Android アプリで HTTP get リクエストを使用して Google ドライブ ファイルのコンテンツを取得しようとしています。私はすでに自分自身を認証し、トークンを取得し、以下のファイル メタデータを取得しました (「機密情報」を <"機密情報"> に置き換えただけです):
{ "種類": "ドライブ#ファイル", "id": ""myFileId"", "etag": ""this_etag"", "selfLink": "https://www.googleapis.com/drive/v2/files/"myFileId"", "alternateLink": "https://docs.google.com/file/d/"myFileId"/edit", "thumbnailLink": "https://lh4.googleusercontent.com/thumbnailCode", "permissionsLink": "https://www.googleapis.com/drive/v2/files/"myFileId"/permissions", "タイトル": "ファイル名.txt", "mimeType": "テキスト/プレーン", "ラベル": { 「スター付き」: false, 「非表示」: false, 「ゴミ箱」: false, 「制限付き」: false, 「見た」:真 }、 "createdDate": "2012-07-13T17:53:29.589Z", "modifiedDate": "2012-07-13T18:58:36.729Z", "modifiedByMeDate": "2012-07-13T17:53:29.584Z", "lastViewedByMeDate": "2012-07-19T20:40:03.823Z", "両親": [ { "kind": "drive#parentReference", "id": "", "selfLink": "https://www.googleapis.com/drive/v2/files/"myFileId"/parents/"id"", "parentLink": "https://www.googleapis.com/drive/v2/files/"id"", "isRoot": 真 } ]、 "downloadUrl": "https://doc-0k-28-docs.googleusercontent.com/docs/securesc/"bigCode"/"anotherBigCode"/"moreNumbers"/"moreNumbers"/"moreNumbers"/"myFileId"?h ="moreNumbers"&e=ダウンロード&gd=true", "userPermission": { "kind": "drive#permission", "etag": ""this_etag"", "id": "現在", "selfLink": "https://www.googleapis.com/drive/v2/files/"myFileId"/permissions/current", "役割": "所有者", 「タイプ」:「ユーザー」 }、 "originalFilename": "zzzz.txt", "ファイル拡張子": "txt", "md5Checksum": "da22f14e635aa54e97e0e09b5d03a485", "ファイルサイズ": "51", "quotaBytesUsed": "51", "所有者名": [ 「エマーソン.yt」 ]、 "lastModifyingUserName": "Emerson.yt", 「編集可能」: true, "writersCanShare": true }
メタデータで返された downloadUrl を使用してコンテンツを取得しようとすると、エラーが発生します
「W/System.err(612): com.google.api.client.http.HttpResponseException: 404 が見つかりません」
私が使用している関連するJavaコード:
JsonFactory jsonFactory = new JacksonFactory();
HttpTransport transport = new NetHttpTransport();
// prefs is a SharedPreferences instance
// acquired throught PreferenceManager.getDefaultSharedPreferences(this);
CredentialStore credentialStore = new SharedPreferencesCredentialStore(prefs);
TokenResponse accessTokenResponse = credentialStore.read();
Builder bldr = new Builder();
bldr.setTransport(transport);
bldr.setJsonFactory(jsonFactory);
bldr.setClientSecrets(myGoogleApiClientId, myGoogleApiClientSecret);
GoogleCredential accessProtectedResource = bldr.build();
accessProtectedResource.setAccessToken(accessTokenResponse.getAccessToken());
accessProtectedResource.setExpiresInSeconds(accessTokenResponse.getExpiresInSeconds());
accessProtectedResource.setRefreshToken(accessTokenResponse.getRefreshToken());
// HTTP_TRANSPORT is an instance of NetHttpTransport
HttpRequestFactory httpReqFactory = HTTP_TRANSPORT.createRequestFactory(accessProtectedResource);
GenericUrl url = new GenericUrl("https://www.googleapis.com/drive/v2/files/"myFileId"");
HttpRequest httpReq = httpReqFactory.buildGetRequest(url);
HttpResponse httpResp = httpReq.execute();
String resp = httpResp.parseAsString();
// just convert json string into java attributes of FileResourceMetadata class
FileResourceMetadata frm = new FileResourceMetadata(resp);
String downloadURL = frm.downloadUrl;
url = new GenericUrl(downloadURL);
httpReq = httpReqFactory.buildGetRequest(url);
httpResp = httpReq.execute();
どうしたの?
ありがとう、エマーソン。