ぱっと1-2時間ほど調べただけなので、あまり参考にならないかもしれませんが・・・
google-authの周辺ライブラリにgoogle-auth-oauthlib
というライブラリがあります。google-authだけ使うとなるといろいろ面倒な手続きをまとめてできるみたいです。
なお、google-auth(他周辺ライブラリ)には、oauth2clientでいうDjangoORMStorageに相当する機能がないようですので、データベースへの保存は自分で実装する必要があります。
(DjangoORMStorage自体は、資格情報のJSONファイルをBase64エンコーディングしているだけのようですが・・・)
なお、資格情報をJSON化する関数は存在します。
あと、oauth2client.contrib.xsrfutilに相当する機能も見つけられませんでした。もうちょっとマニュアルあされば見つけられるかもしれませんが時間切れ。
一応手元では、元記事のソースのDjangoORMStorage使ってる部分をJSONファイル保存&xsrfutilを使用しない形に変えた簡易版スクリプトでアップロード成功するところまでこぎつけました。
(ただし、現状csfr対策が抜けているため、そのままwebサービスとして用いることは難しそう)
全部ソースにすると文字数なので、さわりだけ記載します。(時間できたらブログかなんかでまとめるかもしれません)
認証フロー初期設定
from google_auth_oauthlib.flow import Flow
# APIコンソールで設定したclient_secrets.jsonファイルから認証フローオブジェクトを生成。
flow = Flow.from_client_secrets_file(settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON,
scopes='https://www.googleapis.com/auth/youtube.upload')
# リダイレクトURIの指定(APIコンソールでこれと同じURIをコールバックURIに設定しておく必要あり)
flow.redirect_uri='http://localhost:8888/oauth2callback/'
実際に認証する際は下記のようにします。
class AuthorizeView(View):
#/authorize/ 呼び出し時のview
# client_secrets.jsonから、OAuth認証を開始するためのURLを作成。
authurl = flow.authorization_url()[0] # 返値は認証用URLとstateのtupleになっている。
# 認証サーバにリダイレクト
return redirect(authurl)
これによりブラウザ上で認可ページが開き、アカウントを選んで許可すると、Googleの認証サーバでユーザ認証が行われ、アクセストークンの取得に必要な認証コード等がパラメータとして付加されたレスポンスがコールバックURIのviewに飛んできます。
class Oauth2CallbackView(View):
# コールバックURI呼び出し時のview
def get(self, request, *args, **kwargs):
# レスポンス中のcodeパラメータを、認証フローに渡し、APIの操作に必要なアクセストークンを獲得。
flow.fetch_token(code = request.GET.get('code'))
# 資格情報を変数に格納。
credentials = flow.credentials
あとは資格情報(credentials)をつかってYouTube APIを操作します。
client = build('youtube', 'v3', credentials=credentials)
以下略
参照公式ドキュメント1 公式ドキュメント2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/07 00:01 編集