PythonでGoogle APIのOAuth認証をやる

eyecatching_python-google-api-oauth プログラミング
この記事は約4分で読めます。
Googleカレンダーで予定を追加したり、Googleタスクでタスクを追加したりをPythonからやりたくて環境を構築した。ググって出てきた情報と大差ないが備忘として記事にする。

Google Cloud Platformでやったこと

プロジェクト作成

  • 左側ペイン「ホーム」→「ダッシュボード」でダッシュボードを表示して「プロジェクトを作成」をクリックする
  • 新しいプロジェクト:下記の情報を入力して「作成」をクリックする
    • プロジェクト名:picscels-sample
    • 場所:組織なし

OAuth同意画面作成

  • 左側ペイン「APIとサービス」→「OAuth同意画面」を表示する
  • User Typeを「外部」にして「作成」をクリックする
  • ①OAuth同意画面:下記の情報を入力して「保存して次へ」をクリックする
    • アプリ名:picscels-sample
    • ユーザーサポートメール:自分のメールアドレス
    • デベロッパーの連絡先情報:自分のメールアドレス
    • 上記以外は何も入力しない
  • ②スコープ:何も設定せず「保存して次へ」をクリックする
    • 設定しない
  • ③テストユーザー:下記の情報を入力して「保存して次へ」をクリックする
    • 「ADD USERS」:自分のメールアドレスを追加する

作成後はこんな感じになる。

認証情報作成

  • 左側ペイン「APIとサービス」→「認証情報」を表示する
  • 上部にある「+認証情報を作成」→「OAuthクライアントID」をクリックする
  • OAuthクライアントIDの作成:下記の情報を入力して「作成」をクリックする
    • アプリケーションの種類:デスクトップアプリ
    • 名前:desktop-application
  • 「JSONをダウンロード」をクリックする

作成後はこんな感じになる。

API有効化

ディレクトリ構成

ディレクトリ構成は上記のような感じ。

ダウンロードしたjsonファイルは「credentials.json」にファイル名を変更して、credentialsディレクトリ配下に格納する。

Pythonコード

__init__の中を少し解説。

tokenpickleファイルが存在する場合は読み込んでcredsに格納する。tokenpickleファイルがあるが、トークンが切れている場合は、リフレッシュする。tokenpickleファイルがないやcredsが無効な場合はcredentials.jsonを読み込んで認証画面URLを生成する。リフレッシュや認証が完了したらtokenpickleファイルに認証情報を書き込む。このトークンはリフレッシュトークンのため、再認証は不要となる。

初回はこんな感じでURLが表示されるので、そこにアクセスして認証する。「このアプリはGoogleで確認されていません」と表示されるのはテスト中のため。認証画面上に「The authentication flow has completed. You may close this window.」と表示されれば成功。

Error when invoking the open external command: Error in response: Unable to parse response as JSON:と表示されるのはVScodeの軽いバグらしい。次のバージョンアップでは修正されるっぽい。

初回実施後の状態はこんな感じ。

つまづいた・悩んだところ、その他

  • GoogleカレンダーとGoogleタスクはAPIキー認証だと利用できない。OAuth 2.0認証が必要なので、OAuth 2.0 クライアントIDを作成する必要あり
    • 自分で使うだけなので画面認証とか不要→何かないかなと思ったらAPIキーがあったのでやってみようと思ったら対応してなかった
  • credentials.jsonの中身に”redirect_uris”:[“http://localhost”]と記載されているがこれが重要だと思う
    • OAuthクライアントIDの作成でアプリケーションの種類をウェブアプリケーションを選択、承認済みのリダイレクトURIを設定しないと、URIにアクセスしてもエラーとなり進めない
  • 認証画面URL遷移後の動きが不安定
    • きちんと設定していても認証の最後の最後で止まったりして先に進めなくなるときあり。そういうときは何回かやり直すしかない
  • GoogleカレンダーAPIGoogleタスクAPIの詳細説明は別記事にした。

参考サイト

タイトルとURLをコピーしました