Google Colaboratory の Google Drive をマウントする機能 (Google Drive File Stream) が使っている OAuth 2.0 トークンを取得する方法
条件
左ペインからファイル一覧を選択して出てくる Mount drive も GDFS がマウントされるが、認証機構が GDFS の管理外にあるのかトークンが取れないため
= 毎回実行環境に接続するときに認証を行う必要がある
しかし下の目的を考えると、誤差である
なんでそんなことするの?
たとえば ショートカットが作成したい
GDFS が symbolic link として作成することに対応してくれればいいんだけど、現時点で対応していない (2020/6/23) この機能が GA になったのは 2020/4 頃であるため、間にあっていないのかもしれない
これまで親フォルダが複数存在できるという状況であったものを親ディレクトリ1つと無数のショートカットに統一しようという流れ
どうやるの
~/.config/Google/DriveFS 以下に設定ファイルがあるのでこれを読みにいく
1. 現在利用しているアカウントIDを signin ファイルから読む
2. refresh_token_{id} ファイルにトークンが記録されているので読む
先頭3バイトにゴミがついてるので無視してその先を読むと良い
! cat file | strings でチェックできる
2020/12 ゴミがつかなくなってた
いつのまにかファイル名の仕様が変わっていた、もしなければ探してみてほしい
Colab Notebook 上で動かすなら次のようなコードで Python の googleapis ライブラリが使えるようになる
ただしこのコードでは Refresh ができないので、Google の OAuth 2.0 トークンの有効期限である1時間以上に渡って使うなら google.auth.credentials.Credentials (参考) を継承した独自クラスを作り、refresh メソッドにトークンが期限切れならファイルの更新を監視するようなコードを書くと幸せだと思う ちなみに…
ショートカットを作るには次の記事を参考に GDFS からファイル ID を引っぱると便利
macOS 版 GDFS はファイルではないところに保存されているらしい(伝聞)
Keychain?
先頭3バイトのゴミはアカウント依存に思えるバイト列がついている
b'\n{アカウントによって違うバイト}\x04'
このバイト列の意味はわからないので、わかるならおしえてほしい