Kasasagi’s memorandum

JavaとかProcessingとか。最近はAtcoderとか。

GoogleDrive REST APIで指定フォルダ内のファイル取得

こんばんは。か(ry

今回は以前の記事でも利用したGoogleDrive REST APIで、指定フォルダ内のファイルを取得しようとしたら、はまったので備忘録としてまとめます。

まずはGoogleDriveのホームディレクトリの取得です。写経なので解説は適当です。

gist9713d1df20c90c4cd2849d4060a09750

(一部なので、このファイルだけでは動作しません。あしからず。)

まず結果代入用のArrayListを作成します。型はcom.google.api.services.drive.model.Fileです。

次にリクエストを作成します。プログラムに記述はないですが、serviceはDrive型のAPIクライアントです。

そして、do while文でループさせ、フォルダ内のファイルを全取得しています。6行目ではexecute(実行する)で、リクエストを実行し、取得したデータをFileListに格納しています。たぶんここで何らかのエラーが起き、実行できなかった時のためにcatch文が用意されているのだと思われます。

ここまでは割とスムーズにできたのですが、フォルダ指定は引っ掛かりました。setQというメソッドを利用することは分かったのですが、なかなか苦労しました。

日本語のソースでは解決せず、泣く泣く英語のページを探って見つけました。requestの定義を以下のようにします。

Files.List request = service.files().list().setQ("'"+folderId+"' in parents and mimeType != 'application/vnd.google-apps.folder' and trashed = false");

folderIdは以前話した通りDriveのフォルダーのidです。URLの一部です。in parentsってのはたぶん親ディレクトリ内の、ということでしょう。mimeType != ~ってのは、データの識別子が、グーグルのアプリのフォルダでない -> フォルダ以外のデータを取得って意味だと思います。trashed = false は削除されたデータを除くって意味ですかね?。

in parentsとtrashed = falseのみのものは試してみたのですが、動作しませんでした。mimeTypeの例外指定をしないと動作しないというのはよくわかりません。

そもそもsetQのQってなんだと思ってggったのですが、quoteのQみたいですね。英語では見積もるという意味ですが、プログラムでは文字列処理に関するなにかみたいですね(能力が乏しい故理解できない)。文字列をアプリケーションで処理できる形式に変換する感じでしょうか。

ライブラリやAPIの利用ではなかなか苦労します。このAPIも日本語のソースはあまり多くなく、最初は大変でした。英語のソースをうまく検索できるコツを身につけたい...。

 

それでは。