Google ドライブからすべてのファイルを一覧表示し、クリックするとそれらを取得する必要がある Web アプリケーションがあります。認証に OAuth を使用していますが、機能しているようです (同じコードが Calendar API でもうまく機能します)。serviceAccountScopes でさまざまなスコープを試しましたが、役に立ちませんでした。
基本的に認証は次のとおりです。
credential = new GoogleCredential.Builder().
setTransport(HTTP_TRANSPORT).
setJsonFactory(JSON_FACTORY).
setServiceAccountId(apiEmail).
setServiceAccountScopes(DriveScopes.DRIVE).
setServiceAccountPrivateKeyFromP12File(p12File).build();
credential.refreshToken();
service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).
setApplicationName("My API").build();
編集: refreshToken() 呼び出しの前に、資格情報の accessToken が null であることを追加する必要があります。
その後、私は試します:
FileList files = service.files().list().execute();
返される FileList は次のとおりです (項目が含まれている必要があります)。
{"etag":"\"_U9FTLXcHskmKgrWAZqJlfW8kCo/vyGp6PvFo4RvsFtPoIWeCReyIC8\"","items":[],"kind":"drive#fileList","selfLink":"https://www.googleapis.com/drive/v2/files"}
そのselfLinkを確認すると、内容は次のとおりです。
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "dailyLimitExceededUnreg",
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
"extendedHelp": "https://code.google.com/apis/console"
}
],
"code": 403,
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
}
}
ここでは、1 日の制限は問題になりません。( https://stackoverflow.com/a/10639679/2090125であるため、これはこの問題とは何の関係もないと思います)。また、コンソールで Drive と Drive SDK を有効にしました ( https://stackoverflow.com/a/10329353/2090125 )。
ファイルをダウンロードするとき、これが実行されます。
File file = service.files().get(fileId).execute();
そして、これを生成します(fileIdが存在します):
An error occured: com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
{
"code" : 404,
"errors" : [ {
"domain" : "global",
"message" : "File not found: 0B97KF40kTwrTaTllMnZCTV9ZSnM",
"reason" : "notFound"
} ],
"message" : "File not found: 0B97KF40kTwrTaTllMnZCTV9ZSnM"
}
また、 https://www.googleapis.com/drive/v2/files/0B97KF40kTwrTaTllMnZCTV9ZSnMを確認すると、同じ「dailyLimitExceededUnreg」が表示されます。
ここで何が起こっているのですか、私の認証に問題がありますか? どうにかして Drive SDK で Drive Integration を構成する必要がありますか? Google のドキュメントから、それは必要ではなく、使用している方法はさらに構成しなくても機能するはずであることがわかりました。