いつもお読みいただきありがとうございます。
いまは自分で色々簡単なWEBアプリケーションを試しに作っててGoogleDriveにあるFolder、Filesなどを吸出してみようかなと思って。この記事はpydriveというライブラリーを使ってます。ライブラリー使う前に一番大事なのは公式ドキュメントを読むこと。
https://pythonhosted.org/PyDrive/ ←pythonhosted
https://pypi.org/project/PyDrive/ ←HP
https://github.com/gsuitedevs/PyDrive ←Github
PyDrive is a wrapper library of google-api-python-client that simplifies many common Google Drive API tasks.
Features
- Simplifies OAuth2.0 into just few lines with flexible settings.
- Wraps Google Drive API into classes of each resource to make your program more object-oriented.
- Helps common operations else than API calls, such as content fetching and pagination control.
うん〜PyDriveはgoogle-api-python-clientが包んでるライブラリーで、Google Drive APIタスクを簡単に実現できるように作られてる。どんな機能持ってるのかな?簡単でOAuth2.0の設定、Google Drive APIをクラスにおさめてプログラマーにもっとOOPでプログラム作られるように、あとはDataを取るときとか、Paginationするときもっと簡単にできるように。なるほど。でもこの説明の中に3つちょっとわからない単語ありますね〜OAuth2.0とgoogle-api-python-clientとGoogle Drive API。
OAuth2.0
SNSやWebサービス間で「アクセス権限の認可」を行うためのプロトコルのことであり、現在では2012年に発行されたOAuth 2.0が標準化されています。
SNSアカウントやWebユーザーページなどにアクセスする際、そのサービスのユーザーだということを「ログイン」によって認可させなければなりませんが、これを行うインターフェイスをAPIといいます。
たとえば、InstagramとFacebookに同じ写真を投稿する場合、通常であれば双方のAPIを通じたログインが必要になるはずです。
しかし、実際はInstagramへのログインだけでどちらにも投稿が可能となっており、この共有機能に使われているのがOAuthプロトコルなのです。
Source Come From:https://boxil.jp/mag/a3207/
google-api-python-client
https://code.google.com/archive/p/google-api-python-client/
https://github.com/google/google-api-python-client
https://developers.google.com/api-client-library/python/
Google Drive API
このAPIを使えばあなたのアプリケーションをGoogle DriveにFilesをダウンロード・アップロードできるます。さらにそれらのFilesを開いてPDFなどにEXPORTすることもできます。もちろんやろうと思えばFILEを削除・復元のような操作も可能です。
https://developers.google.com/drive/api/v3/about-sdk
認証
https://developers.google.com/drive/api/v3/about-auth ←ここで書いてる
https://qiita.com/Gara-tech/items/df461947344bb76ee25f←qittaの中にも
ScreenShotするのはめんどくさいなので、認証のやり方は上記のLINKを参照してください。
ここで注意してほしいのはScopeの権限です:あとで使うConfig FileでこのTableが大変助けるのは、頭の隅ところに入れて置きましょう。
Scope | Meaning |
---|---|
https://www. |
Full, permissive scope to access all of a user’s files, excluding the Application Data folder. Request this scope only when it is strictly necessary. |
https://www. |
Allows read-only access to file metadata and file content |
https://www. |
Allows access to the Application Data folder |
https://www. |
Per-file access to files created or opened by the app. File authorization is granted on a per-user basis and is revoked when the user deauthorizes the app. |
https://www. |
Special scope used to let users approve installation of an app. |
https://www. |
Allows read-write access to file metadata (excluding downloadUrl and contentHints. ), but does not allow any access to read, download, write or upload file content. Does not support file creation, trashing or deletion. Also does not allow changing folders or sharing in order to prevent access escalation. |
https://www. |
Allows read-only access to file metadata (excluding downloadUrl and contentHints. ), but does not allow any access to read or download file content |
https://www. |
Allows access to Apps Script files |
https://www. |
Allows read-only access to installed apps. |
データをとってみよう
みんなさんclient_idとclient_secretをちゃんともらいましたか?次はPyDriveを使って見ましょう。まずpipでライブラリーをインストールします。
pip install PyDrive
今回のFILE構成を書いてみましょう。
- myDriveApp
- drive.py
- setting.yaml
Setting.yamlの中身がこんな感じですが、覗いていじってる設定を見てみましょう。
setting.yaml client_config_backend: settings client_config: client_id: xxxxxxx.apps.googleusercontent.com client_secret: yyyyyyyyyyyyyy save_credentials: True save_credentials_backend: file save_credentials_file: credentials.json get_refresh_token: True oauth_scope: - https://www.googleapis.com/auth/drive
- client_config_backend (str):
- とこからClient Configuration Fileを読み込むかを決める。有効な設定は”file”か”settings”か。Defaultは”file”です。
- client_config (dict):
- もしclient_config_backendが”setting”になるとここは絶対にdictを入れないといけません。ここでclientの設定をされる場所です。
- client_config[‘client_id’] (str):
- アプリケーションのClient ID。もしclient_config_backendが”setting”になるとここにIDを入れるの必要です。
- client_config[‘client_secret’] (str):
- アプリケーションのClient secret。もしclient_config_backendが”setting”になるとここにIDを入れるの必要です。
- client_config[‘client_id’] (str):
- もしclient_config_backendが”setting”になるとここは絶対にdictを入れないといけません。ここでclientの設定をされる場所です。
- save_credentials (bool):
- save_credentialsを保存したいならTrueをいれてください。DefaultはFalseです。Trueになるとcredentials.jsonが作成される。
- save_credentials_backend (str):
- No.Backendでcredentialsを保存します。現在の有効値は”file”しかありません。
- save_credentials_file (str):
- .credentialsの保存先。もしsave_credentials_backendが”file”なら入れるの必要。
- get_refresh_token (bool):
- Trueになる認証したこと覚える。Default:False。
- oauth_scope (list of str):
- OAuth scope to authenticate.[‘https://www.googleapis.com/auth/drive‘].
次は簡単プログラムを説明しましょう。ここでPydriveにあるサンプルの少しつづ修正し解説したいと思います。わたしはネットで苦戦してたとき体験はやっばり公式ドキュメントのコードを一行一行説明しれくれるのは一番わかり易い。ークラスされたり色々組み込んでしまうと自分であと読んでも大変そうなので。うんうん、常に簡単なところから始まりましょう。
drive.py from pydrive.auth import GoogleAuth from pydrive.drive import GoogleDrive import json import datetime gauth = GoogleAuth() gauth.CommandLineAuth() drive = GoogleDrive(gauth)
認証するためにGoogleAuthとそのあとのDrive操作が必要のモジュールをImportします。
- GoogleAuth
- class pydrive.auth.GoogleAuth(settings_file=’settings.yaml’, http_timeout=None)
Bases: pydrive.apiattr.ApiAttributeMixin, object- google-api-python-clientの中にあるoautrh2clientライブラリーを包んでるクラスですね。このクラス使う、全ての設定とcredentialsは’setting.yaml’に従って、そして一般なOAuth2.0認証などを行います。
- class pydrive.auth.GoogleAuth(settings_file=’settings.yaml’, http_timeout=None)
- CommandLineAuth(*args, **kwargs)
Returns: str – code returned from commandline.- GoogleAuthの中にあるFunctionです。
- 認証方法はコマンドラインに認証URLをPrintしてユーザーが手動で認証行う。
- GoogleDrive()
- Bases: pydrive.apiattr.ApiAttributeMixin, object
- Driveが使われるメインクラス。
じゃコード走ってみよう。
python drive.py py:255: UserWarning: Cannot access credentials.json: No such file or directory warnings.warn(_MISSING_FILE_MESSAGE.format(filename)) Go to the following link in your browser: https://accounts.google.com/o/oauth2/auth?client_id=.... Enter verification code:XXXXXX Authentication successful.
コマンドラインにURLをアクセスしverification codeを入れてください。OKならAuthentication successful.が出てきます。
いまのFILE構成はこうなりますね。
- myDriveApp
- drive.py
- setting.yaml
- credentials.json
このFILEがないと毎回Scriptを走るときも認証しないといけません。これで認証までできましたね。次はFILEを読んでみましょう。
drive.py for file_list in drive.ListFile({'q': 'trashed=false'}): for file1 in file_list: print('title: %s, id: %s' % (file1['title'], file1['id']))
- ListFile(param=None)
- 認証されたGoogleDrive Instanceにそれに対してのGoogleDriveFileListが戻ります。いわゆる認証OKならすべてのFILEが戻るってことですね〜
- file1[‘title’]とか、file1[‘id’]とかの辞書KEY多分?どっかで乗ってるけど見つかりません…私いつもすべてもらってその中に必要なKEYを見つかってもう一回修正する。非常に非効率なやり方…
- qのパラメータはここにあります:https://developers.google.com/drive/api/v2/search-parameters
次はFolderを見ましょう。
for file_list in drive.ListFile({'q':"mimeType='application/vnd.google-apps.folder'"}): for file1 in file_list: print('title: %s, id: %s ,modified: %s' % (file1['title'], file1['id'],file1['modifiedDate'])) #parsed=json.dumps(file1,indent=4) #print(parsed)
今度はqにmimeTypeをFOLDERに指定します。
Commentにされたコードは戻ってきたのJSONを綺麗にPrintできるようにするだけです。
もし指定のFolder中身だけなら?
for f in drive.ListFile({'q':"'yourFolderID' in parents"}): for f1 in f: print(f1['title']+' '+f1['id'])
結構便利なライブラリーですね!〜て、Backendはなに?
それじゃねー