首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:我在通过身份验证时一直获得“不足的权限”

PHP:我在通过身份验证时一直获得“不足的权限”
EN

Stack Overflow用户
提问于 2014-01-25 18:18:16
回答 1查看 2.2K关注 0票数 3

我试图使用YouTube访问。在我的场景中,我首先检索通道数据,它可以正常工作(即使是通过身份验证的片段)。然后在我的分析电话中解析频道id。在我的控制台中被激活。最后会出现以下错误:

发生客户端错误:调用GET ID##&start-date=2014-01-01&end-date=2014-01-25&metrics=views&dimensions=7DayTotals&sort=day:(403)权限不足

这是我的密码。请注意,我手动添加了我的通道id,以确保它是绝对正确的。正如我所说:身份验证适用于YouTube数据API,但它无法连接到Analytics-API。

代码语言:javascript
复制
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$OAUTH2_CLIENT_ID = '##MY_CLIENT_ID##';
$OAUTH2_CLIENT_SECRET = '##MY_SECRET##';

set_include_path('##PATH_TO_CLIENT_LIBRARY##');
require_once 'Google/Client.php';
require_once 'Google/Service/YouTube.php';
require_once 'Google/Service/YouTubeAnalytics.php';

session_start();

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('https://www.googleapis.com/auth/youtube.readonly', 'https://www.googleapis.com/auth/yt-analytics.readonly');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'], FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);

$youtube = new Google_Service_YouTube($client);

if (isset($_SESSION['token'])) {
  $client->setAccessToken($_SESSION['token']);
}

if ($client->getAccessToken()) {
    $analytics = new Google_Service_YouTubeAnalytics($client);

    $id = 'channel==##MY_CHANNEL_ID##';
    $start_date = '2014-01-01';
    $end_date = '2014-01-20';
    $optparams = array(
        'dimensions' => '7DayTotals',
        'sort' => 'day',
    );

    $metrics = array(
        'views',
        'estimatedMinutesWatched',
        'averageViewDuration',
        'comments',
        'favoritesAdded',
        'favoritesRemoved',
        'likes',
        'dislikes',
        'shares',
        'subscribersGained',
        'subscribersLost'
    );

    $api_response = $metrics;

    foreach ($metrics as $metric)
    {
        $api = $analytics->reports->query($id, $start_date, $end_date, $metric, $optparams);
        if (isset($api['rows'])) $api_response[$metric] = $api['rows'][0][0];
    }
}

?>

顺便说一句,如果有人有使用的YouTube脚本示例,我将非常乐意与您共享它们。我还没有在整个WWW上看到一个有效的例子。

EN

回答 1

Stack Overflow用户

发布于 2014-01-27 15:03:12

我自己已经找到答案了。问题就在眼前

代码语言:javascript
复制
$client->setScopes('https://www.googleapis.com/auth/youtube.readonly', 'https://www.googleapis.com/auth/yt-analytics.readonly');

将其更改为下面的行使脚本工作:

代码语言:javascript
复制
$client->setScopes(array('https://www.googleapis.com/auth/youtube.readonly', 'https://www.googleapis.com/auth/yt-analytics.readonly'));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21354369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档