问题描述
这是我的全部代码.我想提供一个来自 youtube 的视频 ID,以获取与此视频 ID 相关的评论.但总是显示我的权限不足.
This is my whole code. I want to give a video ID which from youtube to get the comments related to this vedio ID. But always show that I have Insufficient Permission.
我试图解决这个问题,发现 youtube .commentThreads().list("snippet").setVideoId("tLTm_POao1c") .setTextFormat("plainText").execute();是问题所在.具体来说,这一行中的 execute() 调用Insufficient Permission".这是为什么呢?
I have tried to address this, and found youtube .commentThreads().list("snippet").setVideoId("tLTm_POao1c") .setTextFormat("plainText").execute(); is the problem. Specifically, execute() in this line calls "Insufficient Permission". Why is this?
package com.google.api.services.samples.youtube.cmdline.youtube_cmdline_addsubscription_sample; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.util.List; import com.google.api.client.util.Preconditions;//aiyamaya import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.java6.auth.oauth2.FileCredentialStore; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson2.JacksonFactory; //import com.google.api.services.youtube.YouTube; import com.google.api.services.youtube.model.ResourceId; import com.google.api.services.youtube.model.Subscription; import com.google.api.services.youtube.model.SubscriptionSnippet; import com.google.common.collect.Lists; import com.google.api.services.youtube.model.CommentThreadListResponse; import com.google.api.services.youtube.model.CommentThread; import com.google.api.services.youtube.model.CommentSnippet; import com.google.api.services.youtube.YouTube; import com.google.api.services.samples.youtube.cmdline.youtube_cmdline_addsubscription_sample.Auth; //import com.google.api.services.samples.youtube.cmdline.Auth; /** * Demo of subscribing user to a channel using the YouTube Data API (V3) with * OAuth2 for authorization. * * @author Ibrahim Ulukaya */ public class AddSubscription { /** Global instance of the HTTP transport. */ // private static final HttpTransport HTTP_TRANSPORT = new // NetHttpTransport(); /** Global instance of the JSON factory. */ // private static final JsonFactory JSON_FACTORY = new JacksonFactory(); /** Global instance of Youtube object to make all API requests. */ private static YouTube youtube; public static void main(String[] args) { System.setProperty("proxySet", "true"); System.setProperty("proxyHost", "bproxy.rmit.edu.au"); System.setProperty("proxyPort", "8080"); List<String> scopes = Lists .newArrayList("https://www.googleapis.com/auth/youtube"); try { // Authorization. Credential credential = Auth.authorize(scopes, "commentthreads"); // This object is used to make YouTube Data API requests. youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, credential).setApplicationName( "youtube-cmdline-commentthreads-sample").build(); // YouTube object used to make all API requests. CommentThreadListResponse videoCommentsListResponse = youtube .commentThreads().list("snippet").setVideoId("tLTm_POao1c") .setTextFormat("plainText").execute(); List<CommentThread> videoComments = videoCommentsListResponse .getItems(); } catch (GoogleJsonResponseException e) { System.err.println("GoogleJsonResponseException code: " + e.getDetails().getCode() + " : " + e.getDetails().getMessage()); e.printStackTrace(); } catch (IOException e) { System.err.println("IOException: " + e.getMessage()); e.printStackTrace(); } catch (Throwable t) { System.err.println("Throwable: " + t.getMessage()); t.printStackTrace(); } } /* * Returns a channel id (String) from user via the terminal. */ }
这是错误信息:
May 22, 2015 8:19:15 AM com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly WARNING: unable to change permissions for everybody: C:UsersE18300.oauth-credentials May 22, 2015 8:19:15 AM com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly WARNING: unable to change permissions for owner: C:UsersE18300.oauth-credentials 2015-05-22 08:19:15.192:INFO::Logging to STDERR via org.mortbay.log.StdErrLog 2015-05-22 08:19:15.193:INFO::jetty-6.1.26 2015-05-22 08:19:15.212:INFO::Started SocketConnector@localhost:8080 2015-05-22 08:19:20.433:INFO::Stopped SocketConnector@localhost:8080 GoogleJsonResponseException code: 403 : Insufficient Permission com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden { "code" : 403, "errors" : [ { "domain" : "global", "message" : "Insufficient Permission", "reason" : "insufficientPermissions" } ], "message" : "Insufficient Permission" } at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145) at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321) at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1045) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) at com.google.api.services.samples.youtube.cmdline.youtube_cmdline_addsubscription_sample.AddSubscription.main(AddSubscription.java:86)
推荐答案
这部分缺少文档,但是需要用到范围https://www.googleapis.com/auth/youtube.force-ssl 从 YouTube API 检索评论.我花了太多时间来解决这个问题.
The documentation lacks in this part, but you need to use the scope https://www.googleapis.com/auth/youtube.force-ssl to retrieve comments from the YouTube API. Took me way too much time to solve this issue.