何かいつの間にかGoogle APIの認証方法が変わってて、security上の理由からというので仕方ないんでしょうけど。
AUTHORIZATION_CODE
を得ようと、以前のように↓のURLにaccessすると、
https://accounts.google.com/o/oauth2/v2/auth?responsetype=code&clientid=...apps.googleusercontent.com&redirecturi=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/photoslibrary&accesstype=offline
アクセスをブロック: ... のリクエストは無効です
と出て、あれ?!と。
エラー 400: invalid_request The out-of-band (OOB) flow has been blocked in order to keep users secure. Follow the Out-of-Band (OOB) flow migration guide linked in the developer docs below to migrate your app to an alternative method.
で、帯域外(OOB)フロー移行ガイドへ誘導され。
このoobフローはなくなったと!? んじゃどうせぃっていうんじゃねん。
「デスクトップクライアント」に相当するから、ループバック IP アドレス(localhost または 127.0.0.1)フローに飛ばされたものの、こっちもなくなってて、ループバック IP アドレスフローの移行ガイドに飛ばされて、結局library使う方法しか書いてなくて。こちとら、shell scriptで使いたいんですけど。refresh_token
欲しいだけなのに、なんでこんなに苦労せなかんの??🤔
...って嘆いても仕方ないので、library使ってrefresh_token
取得だけします。
ちょっとめんどくさいんですけど、local環境を汚染しない形で。
参考:
Google APIの認証情報のpageから「OAuthクライアントをダウンロード」してclient_secret.json
として保存。
1 2 3 4 5 6 7 |
|
ここでw3m
が開くので、Q
を押して閉じるとURLが表示され、そこをChromeなりで開いて、突き進んで承認します。
そうすると、http://localhost:8080/?state=.... へ回されて止まるので、C-a
で別screenを開いて、そこでw3m 'http://localhost:8080/?state=...'
とすると、The authentication flow has completed. You may close this window.
と言われます。徐に元のscreenに戻るとcredential
objectができているので、credential.refresh_token
とすると、漸くREFRESH_TOKEN
を得られます。1時間有効なACCESS_TOKEN
はcredentail.token
で得られます。
これらを使うと、やっと以前のようにshell scriptで回せるようになります。ふぅ。