Я могу успешно отправлять запросы в Youtube Analytics API через API Explorer. Мой код пытается использовать клиентскую библиотеку Google PHP, в частности класс 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'
);
Вы делаете неподдерживаемый запрос, невозможно использовать Просмотры & Уникальных без указания размеров.
Вы можете проверить это в Справочник по API Google Analytics.
Попробуйте добавить это измерение как день и это будет работать
$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 это очень полезный инструмент для проверки ваших запросов.
Для целей документирования вы можете взглянуть на исходный код и сами классы, они очень хорошо документированы и «возможно» говорят сами за себя.
Более новый подход заключается в отправке запросов к этому API с использованием протокола oAuth 2.0 для авторизации доступа.
Google предоставляет удивительный ресурс, чтобы попробовать все это: Детская площадка OAuth 2.0
По сути, вам нужно получить токен доступа и его токен обновления, чтобы применить его по истечении срока действия предыдущего.
$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);
Надеюсь, поможет!
Вам нужно добавить ключ API Google
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}
Также я не уверен, является ли метрика «% 2Cuniques» => «unique» правильной.
Вы можете использовать автоматизированный инструмент Google для создания действительной ссылки.