YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

【オブジェクト保存できますか?】PythonでGoogleスプレッドシートを編集【アクセストークン保存で加速!】

f:id:YutaKa:20191103112841p:plain

前回の記事でPythonからスプレッドシートを編集する方法をまとめたました。

これは実行するたびに、毎回Googleアカウントで許可をしないといけないので、とてもめんどうです。

yutaka01.hatenablog.com

このプロセスはアクセストークンを保存できれば省略できるのですが・・・

オブジェクトはプログラム終了後に消えるのが難点です

ということで、今回は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ファイルができました!

f:id:YutaKa:20191103092515p:plain

アクセストークンの読み込み

次の実行時は pickeファイルをオブジェクトに戻してあげればいいわけです。

with open('token.pickle', 'rb') as token:
    creds = pickle.load(token)

実例!アクセストークンの有無判定

フロチャート

次のフローで、アクセストークン(オブジェクト)の保存、再利用が組み込めます!

 

f:id:YutaKa:20191101125934p:plain

スクリプト化

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

pickle --- Python オブジェクトの直列化 — Python 3.8.0 ドキュメント

ダンプ (dump)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典