0

私の Java プロジェクトでは、公開ドライブからファイルをダウンロードするために Google Drive API を使用しています。

いくつかの基準に従って特定のフォルダーの子をリストしようとすると、すべてが期待どおりに実行されます。それでも、結果を返さないこのmodifiedDateフィールドがあります。エラーは発生しませんが、完全に合理的な検索句を書いたにもかかわらず、リストは空です (かなりの数のファイルがあるはずです)。

これは私のコードです:

    Drive.Children.List firstRequest = service.children().list(folderId)
            .setQ("mimeType='application/pdf' and modifiedDate <= '2016-03-07T19:17:54.759Z'" );
    do {
        ChildList result = firstRequest.execute();
        for(ChildReference child: result.getItems()) {
            File file = service.files().get(child.getId()).execute();
            System.out.printf("Found file: %s (%s): %s\n",
                    file.getTitle(), file.getId(), file.getCreatedDate());
        }
        firstRequest.setPageToken(result.getNextPageToken());
    } while (firstRequest.getPageToken() != null &&
            firstRequest.getPageToken().length() > 0);

使ってみよう!Google Developers のページの機能では、同じクエリが期待どおりの結果を返します。そこにあるHTTPリクエストは次のとおりです。

ここに画像の説明を入力

そして、これは応答です: ここに画像の説明を入力

Java アプリを実行すると、これがリクエスト URL になります。

GET  https://www.googleapis.com/drive/v2/files/0B3Y7hLeztp6SUVBCbnpRN0ZQVVU/children?q=mimeType%3D'application/pdf'%20and%20modifiedDate%20%3C%3D%20'2016-03-07T19:17:54.759Z'

HTTP 応答は次のとおりです。

kind: drive#childList
etag: "TEeH8_qJkyJwjzQ-F4FJRbfwWxI/vyGp6PvFo4RvsFtPoIWeCReyIC8"
selfLink: https://www.googleapis.com/drive/v2/files/0B3Y7hLeztp6SUVBCbnpRN0ZQVVU/children?q=mimeType%3D'application/pdf'+and+modifiedDate+%3C%3D+'2016-03-07T19:17:54.759Z'
items: [


]

要求は同じです。しかし、反応はそうではありません... 理由は何でしょうか?

編集

サービス アカウントを使用しようとしたことを言及する必要があります。これはデスクトップ アプリケーションになるので、必ずしもユーザーに Google API の使用を認めてもらいたくないし、Gmail アドレスを持っていない場合に備えて Gmail アドレスを作成してリクエストを承認するよう強制する必要もありませんでした。さらに、アプリケーションはパブリックに共有されているドライブ上のリソースにのみアクセスし、クライアントに関する情報は必要ありません。

ただし、サービス アカウント キーが現在の問題を引き起こしていますが、OAuth クライアント ID キーを使用すると、目的の結果を得ることができます。

このシナリオに対処するための推奨される方法はどれですか? それとも、OAuth2 フレームワークについてすべて間違っているのでしょうか?

4

0 に答える 0