真的困在这里了。代码由Google提供的示例构建而成:
public static void main(String[] args) {
try {
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE))
.setAccessType("online")
.setApprovalPrompt("auto")
.build();
String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI).build();
System.out.println("Please open the following URL in your browser then type the authorization code:");
System.out.println(" " + url);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String code = br.readLine();
GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute();
GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response);
//Create a new authorized API client
Drive service = new Drive.Builder(httpTransport, jsonFactory, credential).setApplicationName("Google Push").build();
//Insert a file
File body = new File();
body.setTitle("My document");
body.setDescription("A test document");
body.setMimeType("text/plain");
java.io.File fileContent = new java.io.File("document.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(fileContent));
bw.write("allo!!!!");
bw.close();
System.out.println("file created? -> " + fileContent.createNewFile());
FileContent mediaContent = new FileContent("text/plain", fileContent);
File file = service.files().insert(body, mediaContent).execute();
System.out.println("File ID: " + file.getId());
watchChange(service, "channelId", "web_hook", "https://clementlevallois.net/notifications"); // line 78
} catch (IOException ex) {
Logger.getLogger(DriveCommandLine.class.getName()).log(Level.SEVERE, null, ex);
}
}
private static Channel watchChange(Drive service, String channelId, String channelType, String channelAddress) {
Channel channel = new Channel();
channel.setId(channelId);
channel.setType(channelType);
channel.setAddress(channelAddress);
try {
return service.changes().watch(channel).execute(); //line 91
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
堆栈跟踪:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
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:312)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
at Controller.DriveCommandLine.watchChange(DriveCommandLine.java:91)
at Controller.DriveCommandLine.main(DriveCommandLine.java:78)
发布于 2014-03-13 17:53:02
调用驱动器API时返回HTTP 401或HTTP 403响应的API。这些错误可能表示以下任一项:
令牌过期、令牌吊销(这将导致访问令牌和刷新令牌都停止工作)、未针对所需范围授权的令牌、未使用OAuth 2.0协议正确授权的请求。
可以通过调用refreshToken()来处理令牌过期。如果调用失败,并显示"Invalid Credentials“
发布于 2014-03-12 23:09:28
以下是一些可能帮助您解决问题的步骤:
-Look进入你的Google Apps账户可能你的Docs API访问被关闭了。
-Try验证你的令牌和密钥,然后你重定向url。
发布于 2014-03-14 00:00:48
https://stackoverflow.com/questions/22173832
复制相似问题