Python
GoogleDrive
gdrive
PythonAnywhere

pythonanywhereでファイルのバックアップにGoogleドライブを使う方法

はじめに

pythonでWebサービスを作るのに、デプロイ先としてpythonanywhereを使っているが、ここで、DBなどのデータのバックアップ先にGoogleドライブを使用したいという希望があり、そのための手順を記載する。

gdriveのインストール

pythonanywhereにはWebインタフェースのBash consoleがついているので、ここからgdrive(Google DriveのCLI版クラアント)をインストールする。

インストールといっても実行プログラムをダウンロードするだけ。Linux 64bit環境向けのもの(gdrive-linux-x64)をダウンロードする。ダウンロードしたら実行権を付け、パスの通っているフォルダに移動する。

(pythonanywhere_console)
~ $ curl -JLO https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download
~ $ chmod +x gdrive-linux-x64
~ $ mv gdrive-linux-x64 ~/.local/bin 

使いやすいようにエイリアスを設定する。

(.bashrc)
alias gdrive=gdrive-linux-x64

googleアカウントへのログイン (アクセストークンの取得)

gdriveでは初回のコマンドの実行時にGoogle認証を行ってトークンを取得するため、とりあえずgdrive listを実行する。

(pythonanywhere_console)
 ~ $ gdrive list
Authentication needed                                                                                                                                                            
Go to the following url in your browser:                                                                                                                                         
https://accounts.google.com/o/oauth2/auth?access_type=offline&...(中略)...state=state                                                                           

Enter verification code:

指定されたURLにブラウザでアクセスするとGoogleのログイン画面が表示され、ログインに成功するとgdriveがGoogleアカウントへのアクセスをリクエストしている旨の画面が表示されるため「許可」をクリックする。

すると、コードが表示されるのでこれをコピーしEnter verification code:にペーストする。

(pythonanywhere_console)
Enter verification code: XXXXXX(表示されたコード)

これでアクセストークンが取得でき、ログインしたアカウントのGoogleドライブをgdriveコマンドで操作することができる。

アクセストークンは~/.gdrive/token_v2.jsonに保存されている。ログイン(Google認証)をやり直すにはこのファイルを削除する。

アップロード

Googleドライブにアップロードするためにはgdrive uploadにファイル名を指定して実行する。

(pythonanywhere_console)
 ~ $ gdrive upload myfile
Uploading myfile
Uploaded 1zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz at 101.0 B/s, total 101.0 B

Googleドライブにアップロードされたファイルを確認するためにはgdrive listを実行する。

(pythonanywhere_console)
 ~ $ gdrive list
Id                                  Name           Type   Size      Created
1zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz   myfile         bin    101.0 B   2018-11-18 12:00:00

ダウンロード

Googleドライブからダウンロードするためには、gdrive downloadIdを指定して実行する。
指定するのはファイル名ではなくIdであることに注意。Idgdrive list実行時に一番左の列に表示されている。

(pythonanywhere_console)
 ~ $ gdrive download 1zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Downloading myfile -> myfile
Downloaded 1zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz at 101.0 B/s, total 101.0 B

おわりに

pythonanywhereから、Googleドライブを使ってファイルのバックアップができるようになった。

また、これにより手元のPCとpythonanywhereとのファイルのやりとりもGoogleドライブ経由でできるようになる。手元のPCとのファイルのやりとり自体はpythonanywhereに付いているWebインタフェースのファイルマネージャでもできるが、一つの代替手段として。

おまけ

URLやコード、ファイルのIDなどは、直接キーボードから入力するよりも、コピー&ペーストで入力する方が楽だが、pythonanywhereのコンソールでもコピー&ペーストが使用できる。

コピーは指定範囲をドラッグしてCtrl+C(MacではCommand+C)、ペーストはCtrl+V(MacではCommand+V)でできる。右クリックでメニューが出てきたり、ペーストができたりはしないので念のため。

参考資料