PyDriveによるGoogleドライブへのファイルアップロード

公開 | 更新 

Google API Python Clientをインストール

PyDrive2の前にまず、Google API Python ClientをRaspberry Piへインストールします(執筆当時最新2.36.0)。

pip のこのエラーは以前、作業用ディレクトリ/tmpをtmpfs化した際に16MBしか割当てていなかったため、 pip がデフォルトで作業場所として使用する /tmp が容量不足となったものです。

pip はダウンロード時のキャッシュフォルダと、その後の展開ビルド作業用フォルダを使用するので、オプションでキャッシュは無効の上、 $HOME 下に一次的な作業フォルダを用意してビルド場所に指定します。

Google API Python Clientは8MB程度なものの、依存するライブラリを含め、ビルドに使われた容量は67MBもありました。

 

PyDrive2をインストール

冒頭で述べた通り、PyDrive2pip でインストールすることが出来るのですが、前述同様、依存関係含めると大きくなりそうなので、ビルド場所を指定してのインストールとしました。

 

PyDrive2でDrive APIの疎通確立

図11でダウンロードした client_secrets.json をRaspberry Piへコピーした後、PyDrive2公式ページの「OAuth made easy」項に従ってGoogleドライブAPIとの疎通確立を目指します。まず、次の内容を入れた settings.yaml と言うテキストファイルを用意。

このファイルがOAuth2の挙動を記した設定ファイルで、まず冒頭の client_config_backend が認証情報の記述方法を指定しています。上記の例ではダウンロードした client_secrets.json ファイルを参照するようにしていますが、 settings.yaml へ直接認証情報を記述したい場合は、冒頭を次のように変更します。

続く save_credentials 項は認証通過後の資格情報の保存方法に関する項目で、 credentials.json というファイルで保存すると共に、続く get_refresh_token 項を True とすることで、次回以降の認証作業をパスするようになります。

そして設定ファイルの最下段にある oauth_scope 項目は、付与する権限に関するもので、今回の命題である「Googleドライブへのファイルのアップロード(新規と既存上書き)」であれば上記の権限で十分です。もし、さらに色々な操作の試行において、エラーに遭遇するようであれば、当該項を以下のように記述することでドライブAPIへのフル権限を付与して、問題点の切り分けをしてみると、良いかもしれません。

 

下ごしらえが済んだら、認証のためのPythonスクリプトを実行するのですが、公式ページにある次のスクリプトはブラウザでの認証ウィザードの後、自身の8090ポートへ確認コードを自動的に投げるため、GUIのあるデバイス環境を前提としています。

ヘッドレスでSSH越しに作業しているような場合は次のようにすることで、CLI上で示された認証リンクを別途GUIのあるデバイスで開いて認証を進め、最後の確認コードをCLIへペーストして認証を通過させることができます。

 

実際にPythonコンソールから実行してみました。

図16.認証ウィンドウで権限を承認

図16.認証ウィンドウで権限を承認

図17.承認後確認コードを取得

図17.承認後確認コードを取得

Ctrl-D でPythonコンソールを抜けると、カレントディレクトリには credentials.json ファイルが生成されおり、この状態でもう一度同じスクリプトを実行しても、今度は認証を求められることはありませんでした。

 

PyDrive2でのファイルアップロード(新規・既存上書き)

Googleドライブ上のとあるサブフォルダ内へ画像ファイルをするPythonスクリプトは以下の通りです。アップロードの際、既に同名のファイルが存在するか調べ、存在しない場合は新規ファイルとして、存在する場合はそこへ上書きという形で書き込む仕様です。

ブラウザからGoogleドライブを確認してみると、確かに画像ファイルがアップロードされていました。

図18.アップロードされたファイル

図18.アップロードされたファイル

こうして出来上がった仕組みを使い、Raspberry PiのCSIインターフェイスに繋いだカメラで静止画を撮影、Googleドライブへ定期的にアップロードする定点カメラシステムを次回まとめてみるつもりです。

 

余談ですが今回の作業において調べものをしている時に、rcloneというツールをよく目にしました。様々なオンラインストレージ相手のファイル操作が出来るこのツールでは、GoogleドライブもサポートされているのでPythonに依らない環境で実現したい場合は、このツールを使ってみるのも良いと思います。

 

created by Rinker
¥1,250 (2024/04/26 16:04:32時点 Amazon調べ-詳細)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA