Youtube Analytics& Google服务帐户
目标:
实施程序(java或python)以从我在Youtube频道上发布的视频中检索数据。
此计划将每天(凌晨1:00)推出。
Objectives: Implement a program (java or python) to retrieve data from videos that I published on my Youtube channel. This program will be launched daily (1:00 AM).
解决方案:
要检索数据Youtube,包括每天的观看次数,YouTube Analytics API在我看来是最好的解决方案。我使用Google帐户服务(GoogleCredential)对我进行身份验证:
Solutions: To retrieve data Youtube, including the number of views per day, YouTube Analytics API is in my opinion the best solution. I use the Google Account Service ("GoogleCredential") to authenticate me:
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查询:
And I execute Youtube Analytics query:
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."
}
感谢您的见解!
制作YouTube Analytics API请求时,您无法使用服务帐户。您需要使用YouTube频道的所有者或与该频道相关联的内容所有者的帐户,我不认为服务帐户可以是其中之一。在以拥有YouTube频道的Google帐户登录后,请完成OAuth 2流程,然后可以重复使用已保存的OAuth 2刷新令牌,以获取可用于运行报告的新访问令牌。
You can't use a service account when making a YouTube Analytics API request. You need to use an account that is either the owner of the YouTube channel or a content owner associated with the channel, and I don't believe a service account can be either of those things. Please go through the OAuth 2 flow once while signed in as the Google Account that owns the YouTube channel, and the saved OAuth 2 refresh token could then be used repeatedly in the future to get fresh access tokens which can be used to run reports.
您能否解决该问题,然后再次尝试运行报告?
Could you please resolve that issue and then try running your report again?