2014-10-17 14 views
6

Tôi có thể thực hiện thành công yêu cầu đến API YouTube Analytics thông qua API Explorer. Mã của tôi đang cố gắng sử dụng thư viện Google PHP Client, cụ thể là lớp Google_Service_YouTubeAnalytics. Thật không may, không có tài liệu nào về lớp này.Mọi yêu cầu đối với API Analytics của Google thông qua Kết quả của Thư viện PHP của Google trong 400 Yêu cầu Không hợp lệ

Tôi đang đặt ID và xác thực xác nhận trên máy khách. Tôi khá tự tin này đang làm việc một cách chính xác, bởi vì nếu tôi thay đổi khóa bí mật để một cái gì đó tôi biết là không chính xác, tôi nhận được:

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

Nhưng khi tôi chèn private key đúng, tôi nhận được sau phản ứng:

{"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."}

Nó không cho tôi biết những gì là hợp lệ về truy vấn (đó sẽ là vô cùng hữu ích), vì vậy tôi không có ý tưởng những gì tôi có thể làm không đúng cách. Bất kỳ trợ giúp được đánh giá cao.

Đây là mã của tôi mà làm cho các yêu cầu:

$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' 
); 
+0

Ngoài ra, tôi đang sử dụng thư viện ứng dụng khách Google Analytics trong mã của mình và hoạt động tốt. Tôi đang sử dụng mã theo cách tương tự. Xấu. –

+0

Ứng dụng của bạn có thực sự gửi chuỗi "channel == CHANNEL_ID" làm giá trị của tham số id hay là sửa đổi của bạn khi bạn dán mã lỗi trong SO? – jlmcdonald

+0

Không, tôi đã thay đổi điều đó để ẩn ID kênh thực của tôi trong bài đăng này. Trong mã của tôi, đó là giá trị ID kênh của tôi. –

Trả lời

0

Bạn cần phải thêm một API Google chính

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} 

Ngoài ra tôi không chắc chắn nếu "% 2Cuniques" => "uniques" là số liệu hợp lệ.

Bạn có thể sử dụng công cụ tự động của Google để tạo liên kết hợp lệ.

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

1

Bạn đang thực hiện một truy vấn không được hỗ trợ, đó là không thể sử dụng xem & uniques không có kích thước quy định. Bạn có thể kiểm tra trong Youtube's Analytics API Reference.

Hãy thử thêm nó một chiều hướng như ngày và nó sẽ làm việc:

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

truy vấn đó sẽ nhận được một phản ứng tương tự như:

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's APIs Explorer là một công cụ rất hữu ích để kiểm tra các truy vấn của bạn.


Vì mục đích tài liệu, bạn có thể xem xét mã nguồn và các lớp học, chúng được viết rất rõ ràng và "có thể" tự giải thích.


Một cách tiếp cận mới hơn là làm cho yêu cầu API này sử dụng OAuth 2.0 giao thức cho phép truy cập.
Google cung cấp một nguồn tài nguyên tuyệt vời để thử tất cả các công cụ này: OAuth 2.0 Playground

Về cơ bản, bạn cần phải nhận được một access token và thẻ làm mới mình để áp dụng nó khi hết hạn trước.

$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); 

Hy vọng điều đó sẽ hữu ích!

Các vấn đề liên quan