6

我能够通过 API Explorer 成功地向 Youtube Analytics API 发出请求。我的代码正在尝试使用 Google PHP Client 库,特别是 Google_Service_YouTubeAnalytics 类。不幸的是,没有关于这个类的文档。

我正在客户端上设置 ID 和断言凭据。我相当有信心这是正常工作,因为如果我将私钥更改为我知道不正确的东西,我会得到:

{"code":400,"error":"Error refreshing the OAuth2 token, message: '{\n \"error\" : \"invalid_grant\"\n}'"}

但是当我插入正确的私钥时,我得到以下响应:

{"code":400,"error":"Error calling GET https:\/\/www.googleapis.com\/youtube\/analytics\/v1\/reports?ids=channel%3D%3DCHANNEL_ID&start-date=2014-09-01&end-date=2014-09-05&metrics=views%2Cuniques: (400) Invalid query. Query did not conform to the expectations."}

它没有告诉我什么是无效的查询(这将非常有帮助),所以我不知道我可能做错了什么。任何帮助表示赞赏。

这是我发出请求的代码:

$client = new \Google_Client();
$client->setApplicationName(self::APP_NAME);

// set some stuff
$client->setClientId( self::CLIENT_ID );
$client->setClientSecret( self::CLIENT_SECRET );
$client->setAssertionCredentials(new \Google_Auth_AssertionCredentials(
    self::CRED_ID,
    [
        "https://www.googleapis.com/auth/youtube.readonly",
        'https://www.googleapis.com/auth/yt-analytics.readonly'
    ],
    self::youtubeKey()
));

$youtubeService = new \Google_Service_YouTubeAnalytics($client);
$resp = $youtubeService->reports->query(
    self::CHANNEL_ID,
    '2014-09-01',
    '2014-09-05',
    'views,uniques'
);
4

2 回答 2

1

您正在进行不支持的查询,无法使用未提供维度的视图唯一性。您可以在Youtube 的 Analytics API Reference中查看。

尝试将它添加一个维度,例如day,它会起作用:

$youtubeService = new \Google_Service_YouTubeAnalytics($client);
$resp = $youtubeService->reports->query(
    self::CHANNEL_ID,
    '2014-09-01',
    '2014-09-05',
    'views,uniques',
    array('dimensions' => 'day')
);

该查询将获得类似于以下内容的响应:

200 OK

- Show headers -

{
 "kind": "youtubeAnalytics#resultTable",
 "columnHeaders": [
  {
   "name": "day",
   "columnType": "DIMENSION",
   "dataType": "STRING"
  },
  {
   "name": "views",
   "columnType": "METRIC",
   "dataType": "INTEGER"
  },
  {
   "name": "uniques",
   "columnType": "METRIC",
   "dataType": "INTEGER"
  }
 ],
 "rows": [
  [
   "2014-09-04",
   1250,
   621
  ],
  [
   "2014-09-05",
   1265,
   577
  ],
  [
   "2014-09-03",
   1255,
   557
  ],
  [
   "2014-09-01",
   1076,
   532
  ],
  [
   "2014-09-02",
   1182,
   570
  ]
 ]
}

Google 的 APIs Explorer是一个非常有用的工具,可以测试您的查询。


出于文档目的,您可以查看源代码和类本身,它们有很好的文档记录并且“可能”不言自明。


一种较新的方法是使用 oAuth 2.0 协议向此 API 发出请求以授权访问。
Google 提供了一个很棒的资源来尝试所有这些东西:OAuth 2.0 Playground

基本上,您需要获取访问令牌及其刷新令牌以在先前过期时应用它。

$client = new \Google_Client();
$client->setApplicationName(self::APP_NAME);

// set some stuff
$client->setClientId( self::CLIENT_ID );
$client->setClientSecret( self::CLIENT_SECRET );

// Set oAuth info
$client->addScope(\Google_Service_YouTubeAnalytics::YT_ANALYTICS_READONLY);
$client->setAccessToken($accessToken);

// Check if token is expired
if ($client->isAccessTokenExpired()) {
    $client->refreshToken($refreshToken());
    $newToken = $client->getAccessToken();

    $authObj = json_decode($newToken);
    if (!is_object($authObj)) {
        throw new \Google_Auth_Exception('Error on updating oAuth tokens');
    }

    //update tokens
    //...            
}

$youtubeService = new \Google_Service_YouTubeAnalytics($client);

希望能帮助到你!

于 2015-08-07T17:38:01.513 回答
0

You need to add a Google API key

    https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel_ID&start-date=2014-09-01&end-
date=2014-10-01&metrics=views%2Cuniques&key={YOUR_API_KEY}

Also I am not sure if "%2Cuniques" => "uniques" is valid metric.

You can use Google automated tool to generate a valid link.

https://developers.google.com/youtube/analytics/v1/

于 2014-12-09T17:23:54.453 回答