🫠

GoogleDrive APIでつまづいたとこ

2023/09/28に公開

はじめに

SpreadSheetに記載されたGoogleDriveのフォルダIDのファイルをコピーしてDBに登録するような処理を作っていたところ2箇所ほど躓いたので記載しておきます。

謎のゴミファイルがくっついてくる。
フォルダを覗いてもそんなファイルはない。。
みたいなやつの真相です。

どんな状態

処理はPythonでgoogleapiclientを使用してます。

  1. あるドライブのフォルダの下に入っているファイルの一覧を取得しようとしたが、取得できない。
  2. フォルダには動画が一つしかない状態なのにも関わらず謎のファイルがくっついてくる。

原因

  1. ドライブが共有のものの場合、その情報を与えないと取得できなかったから。
  2. ファイルを特定のフォルダにアップロードした後に消したファイルの履歴が残っているから。

具体的に

ちょっとややこしい実装にしているので特定のフォルダ配下のファイル一覧を取得するところのみ。

# trashed=falseで削除されているファイルを対象外にする
query = f"parents='{directory_id}' and trashed=false"
files = self.google_service.files().list(
    q=query,
    corpora="drive",  # この設定を入れないと共有ドライブを参照できない
    driveId=drive_id,
    includeItemsFromAllDrives=True, # この設定を入れないと共有ドライブを参照できない
    supportsAllDrives=True,  # この設定を入れないと共有ドライブを参照できない
    orderBy='name',
    fields='files(id, name, trashed)',
).execute().get('files')
return files

最後に

trashedとか結構誰もが気にするであろう情報が全然拾えなくて結構詰まりました。
条件に与えられる情報はfieldsで拾ってみると良いです。

fields='files(*)'

で全項目取得できるのでそれでフィールドを確認してqueryを組み立てるのがおすすめです。

Discussion