YouTube Data APIの「Python クリックスタート」のとおりにしたらつまづいたのでメモを残す
環境
wsl
>wsl --version
WSL バージョン: 2.2.4.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.61
MSRDC バージョン: 1.2.5326
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26091.1-240325-1447.ge-release
Windows バージョン: 10.0.22631.3737
Python
$ python --version
Python 3.10.12
手順
ここに書かれている通りに勧める。
- 登録チャンネルリストの取得ではAPIキーは不要なのでAPIキーに関することはスルーする
実行するとエラーが発生する
$ python example.py
Traceback (most recent call last):
File "sample.py", line 41, in <module>
main()
File "sample.py", line 29, in main
credentials = flow.run_console()
AttributeError: 'InstalledAppFlow' object has no attribute 'run_console'
クイックスタートでインストールしたモジュールは最新のバージョンではrun_console
がないらしい
pip install --upgrade google-api-python-client
pip install --upgrade google-auth-oauthlib google-auth-httplib2
このバージョンで解決するらしい
google-api-python-client==1.7.2
google-auth==2.14.1
google-auth-httplib2==0.0.3
google-auth-oauthlib==0.4.1
上記バージョンのモジュールをインストールすることでサンプルコードは実行できるようになった
最新バージョンを使用するためには
run_console()は Google によって非推奨になっているらしいが、それならどう解決するべきか
run_local_server()を使用するのが正解っぽい
とりあえずモジュールを最新にする
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
run_console()をrun_local_server()にして実行するとエラーが発生する
Traceback (most recent call last):
File "/mnt/c/Users/satoshi/Projects/Youtube/get-my-subscription-list.py", line 41, in <module>
main()
File "/mnt/c/Users/satoshi/Projects/Youtube/get-my-subscription-list.py", line 29, in main
credentials = flow.run_local_server()
File "/mnt/c/Users/satoshi/Projects/Youtube/.venv/lib/python3.10/site-packages/google_auth_oauthlib/flow.py", line 444, in run_local_server
webbrowser.get(browser).open(auth_url, new=1, autoraise=True)
File "/usr/lib/python3.10/webbrowser.py", line 65, in get
raise Error("could not locate runnable browser")
webbrowser.Error: could not locate runnable browser
これはWebブラウザを開こうとして失敗したということらしい。wslでbrowser.get()は機能しないのかもしれない。なのでrun_local_server()の引数にopen_browser=False
を渡すと
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=314104985852-8oqdcunjkim2bfijomq2ilp6g00qukfv.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&state=bWv3M7G4HLjuCVYxvFPEPqAsOsdx8r&access_type=offline
となるのでクリックするとブラウザが開き認証ができるようになる