首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Youtube分析和Google服务帐户

Youtube分析和Google服务帐户
EN

Stack Overflow用户
提问于 2012-11-27 14:15:29
回答 2查看 2.5K关注 0票数 2

目标:实现一个程序(java或python),从我在Youtube频道上发布的视频中检索数据。本节目将每日(凌晨1:00)启动。

解决方案:检索Youtube的数据,包括每天的浏览量,YouTube分析API在我看来是最好的解决方案。我使用Google ("GoogleCredential")对我进行身份验证:

代码语言:javascript
运行
复制
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查询:

代码语言:javascript
运行
复制
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();
}

但我得到了以下错误:

代码语言:javascript
运行
复制
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."
}

谢谢你的洞察力!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-30 17:08:07

在发出YouTube Analytics请求时,不能使用服务帐户。您需要使用一个帐户,该帐户要么是YouTube通道的所有者,要么是与该通道相关联的内容所有者,而且我不认为服务帐户可以是其中的任何一个。当注册为拥有OAuth通道的YouTube帐户时,请检查一次OAuth 2流,然后保存的OAuth 2刷新令牌可以在将来重复使用以获得可用于运行报表的新访问令牌。

请你解决这个问题,然后再试着运行你的报告好吗?

票数 5
EN

Stack Overflow用户

发布于 2022-04-05 10:02:15

是的,您可以使用服务帐户对任意Youtubes进行身份验证。

您想要使用的服务帐户和帐户必须位于相同的CMS中。(对于Youtube合作伙伴通道,在调用API时,您还需要设置它们的内容所有者ID)。

它是如何为我工作的:在创建服务帐户密钥时,我从Gcloud下载的密钥文件中生成一个access_token。

您可以在这里阅读更多关于使用Oauth2进行服务器-服务器身份验证的信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13586153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档