pydriveを使用するための準備
from google.colab import auth
auth.authenticate_user()
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from oauth2client.client import GoogleCredentials
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
認証作業なしで実行する場合は下記を参考にしてください。
https://qiita.com/plumfield56/items/3d9e234366bcaea794ac
検索方法
上記の状態まで準備できたら、下記で検索を実行します。
drive.ListFile({'q':"{queryの内容を記載}"})
検索例
例えば、タイトルがHello で mimeTypeがスプレッドシート で ゴミ箱以外 を、
検索する場合は下記のように記載します。
drive.ListFile({'q':"title='Hello' and mimeType='application/vnd.google-apps.spreadsheet' and trashed = false"})
その他、検索例は下記サイトを参照
https://developers.google.com/drive/api/v2/search-files#query_string_examples
queryで細かい指定をするためには以下を使用していきます。
queryの指定方法
| 用語 | 使用可能な比較演算子 | 使用方法 |
|---|---|---|
| title | contains, =, != | タイトルの検索 シングルクォーテーションを使用する場合はバックスペースでエスケープさせる |
| fullText | contains | タイトル、説明、内容、インデックスの検索 |
| mimeType | contains, =, != | MIME typeの検索 |
| modifiedDate | <=, <, =, !=, >, >= | 最終更新日の検索 |
| lastViewedByMeDate | <=, <, =, !=, >, >= | 最後に閲覧した日付で検索 |
| trashed | =, != | ゴミ箱内まで検索するかの指定(true,falseで指定) |
| starred | =, != | お気に入りを付けているものを検索するかの指定(true,falseで指定) |
| parents | in | 親のIDを指定 |
| owners | in | オーナーを指定 |
| writers | in | 特定のユーザーが編集者になっているかを指定 |
| readers | in | 特定のユーザーが閲覧者になっているかを指定 |
下記サイトを参照
https://developers.google.com/drive/api/v2/ref-search-terms
GoogleサービスのMIME Types一覧
| サービス名 | MIME Types |
|---|---|
| Google Drive file | application/vnd.google-apps.file |
| Google Drive folder | application/vnd.google-apps.folder |
| Google Docs | application/vnd.google-apps.document |
| Google Sheets | application/vnd.google-apps.spreadsheet |
| Google Slides | application/vnd.google-apps.presentation |
| Google Sites | application/vnd.google-apps.site |
| Google Forms | application/vnd.google-apps.form |
| Google Drawing | application/vnd.google-apps.drawing |
| Google Fusion Tables | application/vnd.google-apps.fusiontable |
| Google My Maps | application/vnd.google-apps.map |
| Google Apps Scripts | application/vnd.google-apps.script |
| Shortcut | application/vnd.google-apps.shortcut |
| application/vnd.google-apps.photo | |
| 下記サイトを参照 | |
| https://developers.google.com/drive/api/v2/mime-types |
Googleサービス以外のMIME Types一覧
| ファイル形式 | MIME Types |
|---|---|
| application/pdf | |
| JSON | application/vnd.google-apps.script+json |
| Plain text | text/plain |
| HTML | text/html |
| MS Excel | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
| MS PowerPoint | application/vnd.openxmlformats-officedocument.presentationml.presentation |
| MS Word document | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| JPEG | image/jpeg |
| PNG | image/png |
| SVG | image/svg+xml |
| JSON | application/vnd.google-apps.script+json |
下記サイトを参照
https://developers.google.com/drive/api/v2/ref-export-formats
https://developers.google.com/drive/api/v2/mime-types
検索結果からデータ取得
queryで指定した内容を GetList メソッドでリストにして、欲しいデータを抽出します。
file_list = drive.ListFile({'q':"title='Hello' and mimeType='application/vnd.google-apps.spreadsheet' and trashed = false"}).GetList()
for file in file_list:
# ファイル/フォルダから抽出したい内容
print(file['title'], file['id'])
抽出可能な項目一覧
| プロパティ名 | タイプ | 説明 |
|---|---|---|
| id | string | ファイルID |
| selfLink | string | ファイルのURL |
| title | string | ファイル名 |
| mimeType | string | ファイルのmimeType |
その他、抽出可能な項目は多数あるので、詳細は下記参照
https://developers.google.com/drive/api/v2/reference/files
ファイル、フォルダの作成
title = 'title'
folder_id = 'id'
f = drive.CreateFile({'title': title,
'mimeType': 'application/vnd.google-apps.spreadsheet',
'parents': [{'id': folder_id}]})
f.Upload()
下記のように別で記載しても同じように動きます。
title = 'title'
folder_id = 'id'
f = drive.CreateFile({'title': title,
'mimeType': 'application/vnd.google-apps.spreadsheet'})
f['parents'] = [{'id': folder_id}]
f.Upload()
ファイルのコピー
公式サイト
https://developers.google.com/drive/api/v2/reference/files/copy#examples
公式サイトの情報は詳細がかかれていなくて参考にしづらいです。
調べた中だとこちらが一番詳細に書かれていました。
https://stackoverflow.com/questions/65450228/google-drive-api-copy-a-file-in-team-drive
dst_parent_id = '1WgZMCQfUX4OizIJ_TYQUBWNs6vNai8wc'
copy_file_id = '1TYvRg6xvHPiZqIOPKZz8XiyriM9sL_yfdQ-sPVh_LbU' # BBさん
new_title
clone = drive.auth.service.files().copy(fileId=copy_file_id,
body={'parents': [{'kind': 'drive#fileLink',
'id': dst_parent_id }], 'title': new_title}).execute()