Youtube Analytics& Google服务帐户

时间:2012-11-27 14:15:30

标签: java youtube oauth-2.0 youtube-api service-accounts

目的: 实现一个程序(java或python)来检索我在Youtube频道上发布的视频中的数据。 该计划将每天(凌晨1:00)推出。

解决方案: 要检索数据Youtube,包括每天的观看次数,我认为YouTube Analytics API是最佳解决方案。我使用Google帐户服务(“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 Analytics查询:

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

感谢您的见解!

2 个答案:

答案 0 :(得分:4)

制作YouTube Analytics API请求时,您无法使用服务帐户。您需要使用YouTube频道的所有者或与该频道相关联的内容所有者的帐户,我不认为服务帐户可以是其中之一。在以拥有YouTube频道的Google帐户登录后,请完成OAuth 2流程,然后可以重复使用已保存的OAuth 2刷新令牌,以获取可用于运行报告的新访问令牌。< / p>

您能否解决该问题,然后再次尝试运行报告?

答案 1 :(得分:-1)

此链接也可能有助于您理解此错误消息以及您可能遇到的其他消息:https://developers.google.com/analytics/devguides/reporting/core/v3/coreErrors

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