【Raspberry Pi】Raspberry Piで撮影した画像をGoogle Driveにアップロードさせてみる ~PyDrive編~

はじめに

こんにちは、がんがんです。
以前ラズパイカメラの自動化を行いました。
gangannikki.hatenadiary.jp

カメラで撮った画像をGoogle Driveなどにアップする方法を探していたら2種類の方法に出会いました。
今回はPythonによるPyDriveを用いて実験を行ってみます。

目的

  • PyDriveのインストール
  • Google Driveに画像をアップロード

PyDriveのインストール

まずはPyDriveのインストールを行います。

$ pip3 install google-api-python-client
$ pip3 install PyDrive

設定ファイルの作成

次にこちらを参考にしてsettings.yamlを作成します。クライアントIDとクライアントシークレットについては後ほど記述します。

settings.yaml
client_config_backend: setting
client_config:
  client_id: <クライアントID>
  client_secret: <クライアントシークレット>

save_credentials: True
save_credentials_backend: file
save_credentials_file: credentials.json

get_refresh_token: True

oauth_scope:
  - https://www.googleapis.com/auth/drive.file
  - https://www.googleapis.com/auth/drive.install

クライアントIDの取得

参考記事を参照しながらクライアントIDを取得していきます。まずはGoogle Developers Consoleへアクセスします。
f:id:gangannikki:20190913080947p:plain

参考記事をみながらプロジェクトを作成していきます。
ページのデザインが変わっていますが、基本的な設定は参考記事の通りです。
OAuthクライアントのクライアントIDクライアントシークレット.yamlに書き込んでおくのを忘れないように注意です。

Google Drive APIを有効にしていく

以下のようなAPIライブラリDriveの検索を行います。
f:id:gangannikki:20190913080947p:plain

f:id:gangannikki:20190913081011p:plain
Driveの検索を行うと先頭に出てきます

Google Drive APIをクリックすると以下の画面が表示されるので有効にするボタンをクリックします。
f:id:gangannikki:20190913081019p:plain

Google Driveへアップロード

テキストファイルをアップロードしてみる

まずはテキストファイルをアップロードしてみます。コードは以下のとおりです。
初回コード実行時に認証確認URLがコマンド上に出力されるので承認しておきます。これはGASとかと同じやつです。

test.py
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

def main():
    #  Google Drive 
    gauth = GoogleAuth()
    gauth.CommandLineAuth()
    drive = GoogleDrive(gauth)

    #  file upload
    f = drive.CreateFile({"title": "TEST.TXT"})
    f.SetContentString("Hello Drive")
    f.Upload()

画像をアップロードしてみる

コードは以下の通りです。変更しているのはupload部分のみです。アップロードする画像はラズパイカメラの記事のときに撮影したヨーゼフさんの画像です。

test_img.py
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

def main():
    #  Google Drive 
    gauth = GoogleAuth()
    gauth.CommandLineAuth()
    drive = GoogleDrive(gauth)

    #  image upload
    f = drive.CreateFile({"title": "test.jpg",
                          "mimeType": "image/jpeg"})
    f.SetContentFile("./test.jpg")
    f.Upload()

アップロードの確認

実際にGoogle Driveを見てみるときちんとアップロードされていることが分かります。
f:id:gangannikki:20190913081026p:plain

おわりに

今回はGoogle Driveとの連携としてPyDriveを試してみました。想像していたよりも簡単な印象です。
次回はもう一つのgDriveについて実験を行っていきます。

また、撮影→Google Driveへのアップロードの自動化も試してみようと思います。