2012-11-27 74 views
2

目标: 实现一个程序(java或python)从我在Youtube频道上发布的视频中检索数据。 此计划将每天(凌晨1:00)启动。Youtube Analytics和Google服务帐户

解决方案: 要检索数据Youtube,包括每天的观看次数,YouTube Analytics API在我看来是最好的解决方案。我使用谷歌帐户服务( “GoogleCredential”)来验证我:

static { 
    // Build service account credential. 
    try { 

     // Create a listener for automatic refresh OAuthAccessToken 
     List<CredentialRefreshListener> list = new ArrayList<CredentialRefreshListener>(); 
     list.add(new CredentialRefreshListener() { 

      public void onTokenResponse(Credential credential, 
        TokenResponse tokenResponse) throws IOException { 
       System.out.println(tokenResponse.toPrettyString()); 

      } 

      public void onTokenErrorResponse(Credential credential, 
        TokenErrorResponse tokenErrorResponse) 
        throws IOException { 
       System.err.println("Error: " 
         + tokenErrorResponse.toPrettyString()); 
      } 
     }); 

     // Create a GoogleCredential for authenticate with ServiceAccount 
     // service 
     credential = new GoogleCredential.Builder() 
       .setTransport(HTTP_TRANSPORT) 
       .setJsonFactory(JSON_FACTORY) 
       .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
       .setServiceAccountScopes(SCOPES) 
       .setClock(Clock.SYSTEM) 
       .setServiceAccountPrivateKeyFromP12File(
         new File("key.p12")) 
       .setRefreshListeners(list).build(); 

     credential.refreshToken(); 

    } catch (GeneralSecurityException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

我执行YouTube分析查询:

YoutubeAnalytics youtubeAnalytics = new YoutubeAnalytics.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) 
     .setApplicationName("Test-YouTube-Analytics/1.0").build(); 

    // Create request 
    credential.refreshToken(); 
    YoutubeAnalyticsRequest<?> request = youtubeAnalytics.reports() 
      .query("channel==" + channelId, "2012-10-01", "2012-12-01", "views") 
      .setAlt("json") 
      .setKey(API_KEY) 
      .setDimensions("month") 
      .setPrettyPrint(true); 
    System.out.println(request.buildHttpRequest().getUrl().toString()); 
    ResultTable first = (ResultTable) request.execute(); 
} 

,但我得到了以下错误:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 Internal Server Error 
{ 
    "code" : 500, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Unknown error occurred on the server.", 
    "reason" : "internalError" 
    } ], 
    "message" : "Unknown error occurred on the server." 
} 

感谢您的洞察!

回答

4

您在制作YouTube Analytics API请求时无法使用服务帐户。您需要使用YouTube频道的所有者或与该频道相关联的内容所有者的帐户,并且我不相信服务帐户可以是这些内容之一。作为拥有YouTube频道的Google帐号登录后,请通过OAuth 2流程一次,然后保存的OAuth 2刷新令牌可以在将来重复使用,以获取可用于运行报告的全新访问令牌。

请问您是否可以解决该问题,然后再次尝试运行您的报告?

-1

这个链接也可能会有所帮助理解与他人沿着这条错误消息,你可能会遇到:https://developers.google.com/analytics/devguides/reporting/core/v3/coreErrors

的页面是为谷歌Analytics(分析)核心报告API,但它实际上到错误消息之一是适用我在使用YouTube Analytics API时遇到过。我遇到了同样的500错误,但这是由于我正在重试的查询没有时间流逝,尽管使用了不同的开始和结束日期。

相关问题