Python#pydriveを使ってみよう

いつもお読みいただきありがとうございます。

いまは自分で色々簡単な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

The Google API Client Library for Python is designed for Python client-application developers. It offers simple, flexible access to many Google APIs.

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.googleapis.com/auth/drive 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.googleapis.com/auth/drive.readonly Allows read-only access to file metadata and file content
https://www.googleapis.com/auth/drive.appfolder Allows access to the Application Data folder
https://www.googleapis.com/auth/drive.file 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.googleapis.com/auth/drive.install Special scope used to let users approve installation of an app.
https://www.googleapis.com/auth/drive.metadata Allows read-write access to file metadata (excluding downloadUrl and contentHints.thumbnail), 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.googleapis.com/auth/drive.metadata.readonly Allows read-only access to file metadata (excluding downloadUrl and contentHints.thumbnail), but does not allow any access to read or download file content
https://www.googleapis.com/auth/drive.scripts Allows access to Apps Script files
https://www.googleapis.com/auth/drive.apps.readonly 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を入れるの必要です。
  • 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認証などを行います。
  • 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はなに?

それじゃねー

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする