PHP フロントエンドと Java バックエンドを備えたアプリケーションを開発しており、ユーザーがフロントエンドからオフラインで Google ドライブにアクセスすることを承認する必要があります。アプリケーションは、ユーザーが明示的に許可することなく、Google アクセス トークンとリフレッシュ トークンを保存し、後で使用する必要があります。問題は、Java アプリケーションが Google ドライブから作成されたファイルをダウンロードできず、次のようなエラー メッセージが常に表示されることです。ただし、ファイルのアップロードと、このクライアント アプリケーションからアップロードされたファイルのダウンロードには問題はありません。
PHP 側のコードは次のようになります。
$client = new Google_Client();
// Get your credentials from the APIs Console
$client->setClientId('xxxxxx.apps.googleusercontent.com');
$client->setClientSecret('xxxxxxx');
$client->setRedirectUri('http://localhost/google-test/index.php');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$service = new Google_DriveService($client);
$authUrl = $client->createAuthUrl();
$authCode = trim(fgets(STDIN));
// Exchange authorization code for access token
$accessToken = $client->authenticate($authCode);
$client->setAccessToken($accessToken);
print "AccessToken:\n$accessToken\n\n";
?>
そして、私は次の出力を受け取っています
{"access_token":"ya29.AHES6ZRw6aUxSAlwunKlgJ1pWu0PD1tise_cu7IshJ8_Mg8",
"token_type":"Bearer", "expires_in":3600,
"refresh_token":"1\/ZEU4mGWxEnrqogPVml3cHc5s9okqHplVZc3FhSF5sac",
"created":1379705627}
ユーザーを認証し、Google ドキュメントにアクセスするための Java コード:
GoogleCredential.Builder credentialBuilder = new GoogleCredential.Builder();
credentialBuilder.setJsonFactory(new JacksonFactory());
credentialBuilder.setTransport(new NetHttpTransport());
credentialBuilder.setClientSecrets("xxxxxx.apps.googleusercontent.com","xxxxxx");
Credential credentials = credentialBuilder.build();
//credentials.setAccessToken("ya29.AHES6ZRw6aUxSAlwunKlgJ1pWu0PD1tise_cu7IshJ8_Mg8");
credentials.setRefreshToken("1/ZEU4mGWxEnrqogPVml3cHc5s9okqHplVZc3FhSF5sac");
Drive drive = new Builder(HTTP_TRANSPORT, JSON_FACTORY, credentials)
.setApplicationName("API Project").build();
String query = "mimeType = 'application/vnd.google-apps.document'";
try {
Drive.Files.List request=drive.files().list();
FileList tempFileList = request.setQ(query).setMaxResults(1000).execute();
List<com.google.api.services.drive.model.File> files=tempFileList.getItems();
for(com.google.api.services.drive.model.File file:files){
GenericUrl url = new GenericUrl(file.getDownloadUrl());
HttpResponse response = service.getRequestFactory().buildGetRequest(url)
.execute();
}
これらの各ファイルにアクセスしてそのタイトルを出力できますが、ダウンロードしようとすると、次のエラーが表示されます。
{
"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."
}
}
誰かがこれに何が問題になるのか考えていますか? 私はいくつかの異なるアプローチを試みましたが、常に同じ問題に悩まされていました。
ありがとう