前回の記事でPythonからスプレッドシートを編集する方法をまとめたました。
これは実行するたびに、毎回Googleアカウントで許可をしないといけないので、とてもめんどうです。
このプロセスはアクセストークンを保存できれば省略できるのですが・・・
オブジェクトはプログラム終了後に消えるのが難点です。
ということで、今回はpickleという方式で、オブジェクトを保存する方法をまとめました!
紹介スキル
オブジェクトを保存できるようになる
具体例
Goople APIの認証省略!
Google の方法を参考にたので、興味がある方は原文もご覧ください!Python Quickstart | Sheets API | Google Developers
アクセストークン要求(復習)
スプレッドシートをPythonで使用するためには、アクセストークンが必要です。
ID等の入ったjsonファイルをGoogleに渡して、Googleアカウントで認証すると、受け取ることができます。
# APIへのアクセストークンを要求する flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES) creds = flow.run_local_server(port=0)
# ブラウザが立ち上がって、Googleアカウントでログインして認証
実行終了すると、オブジェクトはなくるので、次もまたブラウザを開いてログインして、認証をして・・・・めんどうです!
アクセストークン(オブジェクト)の保存
今回はpickleという形式でオブジェクトを保存してみましょう!
import pickle # まずはインポート!
アクセストークンcreds オブジェクトを、pickle化してみましょう!
with open('token.pickle', 'wb') as token: pickle.dump(creds, token)
これで、credsオブジェクトが token.pikcleというファイルになりました(ダンプはばこんと出力するってかんじです)。
次のようにpickleファイルができました!
アクセストークンの読み込み
次の実行時は pickeファイルをオブジェクトに戻してあげればいいわけです。
with open('token.pickle', 'rb') as token: creds = pickle.load(token)
実例!アクセストークンの有無判定
フロチャート
次のフローで、アクセストークン(オブジェクト)の保存、再利用が組み込めます!
スクリプト化
if文と組み合わせて次のようになります。
# アクセストークン持ってる? # あります! if os.path.exists('token.pickle'): # 再利用(pickle読み取り)! with open('token.pickle', 'rb') as token: creds = pickle.load(token)
# ないです・・・ else: # アクセストークン要求 flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES) creds = flow.run_local_server(port=0) # 次回のために保存(pickle作成)! with open('token.pickle', 'wb') as token: pickle.dump(creds, token)
まとめ
今回はpickle形式でオブジェクトを保存、再利用する方法をまとめました!
この処理フローはGoogleの認証だけに限らず、オブジェクトを再利用する際の基本的なパターンだと思います!
実際には、アクセストークンは有効期限が短いので、さらにリフレッシュトークンも使用することになります。
次回はこの使用方法をまとめたいと思います!
参考URL
Python Quickstart | Sheets API | Google Developers