目标:实现一个程序(java或python),从我在Youtube频道上发布的视频中检索数据。本节目将每日(凌晨1:00)启动。
解决方案:检索Youtube的数据,包括每天的浏览量,YouTube分析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."
}
谢谢你的洞察力!
发布于 2012-11-30 17:08:07
在发出YouTube Analytics请求时,不能使用服务帐户。您需要使用一个帐户,该帐户要么是YouTube通道的所有者,要么是与该通道相关联的内容所有者,而且我不认为服务帐户可以是其中的任何一个。当注册为拥有OAuth通道的YouTube帐户时,请检查一次OAuth 2流,然后保存的OAuth 2刷新令牌可以在将来重复使用以获得可用于运行报表的新访问令牌。
请你解决这个问题,然后再试着运行你的报告好吗?
发布于 2022-04-05 10:02:15
是的,您可以使用服务帐户对任意Youtubes进行身份验证。
您想要使用的服务帐户和帐户必须位于相同的CMS中。(对于Youtube合作伙伴通道,在调用API时,您还需要设置它们的内容所有者ID)。
它是如何为我工作的:在创建服务帐户密钥时,我从Gcloud下载的密钥文件中生成一个access_token。
https://stackoverflow.com/questions/13586153
复制相似问题