LoginSignup
10
8

More than 3 years have passed since last update.

ラズパイで画像をGoogleDriveにアップロードするならrclone一択じゃね?という話

Last updated at Posted at 2019-12-21

※この記事は大変ちんたらしています。
ダルい方は、この記事の見出し「rcloneって知ってる?(神)」からお読みください。
https://qiita.com/ElecCPinAAII/items/19f1757e89bc06535d98#rclone%E3%81%A3%E3%81%A6%E7%9F%A5%E3%81%A3%E3%81%A6%E3%82%8B%E7%A5%9E

この記事は、まっじっでっLinux、RaspberryPiを初めて:beginner:触った、
そして普段プログラミングなどは一切やらないド素人:baby:が書いたものですので、
用語の使い方が変、とか、間違ってるとか、いろいろお察し&ご容赦ください。
完全なる素人ですが、まわりにはちらほらと神:zap:がいて、
たくさん助けていただきましたこと、改めてこちらでお礼を申し上げます。
さて。

やりたかったこと:ラズパイでtimelapse動画を作るための写真を自動でとって、GoogleDriveに自動でアップロードする

なんでど素人がいきなりそんなことをやるんだよ、
と突っ込まれると説明が長くなるので割愛いたしますが、
とにかくやることになったのです :frowning2:
それでもカメラの操作自体はわりとあっさりできるようになりました。
でも、そこから
=>GoogleDriveの認証(OAuth2)が自動でできずにドツボにハマる
=>もうできない、無理、と死にそうになる
=>神:zap:からrcloneの存在を教わる
=>あまりにあっさりと解決
という流れでしたので、自分のメモと記念のために記事にしておきます。

RaspberryPiで写真をとる

これもいろんな方法があって、いろんなサイトでお知恵を借りました。
一番簡単なのはシェルスクリプトでrapstillを使うことなのですが、
今回は写真をとったら、GoogleDriveに画像をアップしたいので、
pythonのpicameraを利用して写真を撮りました。

-【picamera】ラズパイで写真を撮るコードを書いてみた
https://ymgsapo.com/2019/03/25/picamera-raspi/

↑こちらを参考に。
このpythonをcronに実装すれば、写真を自動で撮るのはわりと簡単(!?)です。
(とはいえ、環境設定や謎のエラーなどで、十分もう大変だったのですが、
ここでもまわりの神:zap:に助けられました)

画像をGoogleDriveのマイドライブにアップする

しかしながら、ここからおそろしくハマりました。
まずラズパイの画像を自動アップロードする方法としては
OAuth2とGoogleDriveAPIを利用する方法が多くのウェブページに紹介されています。
日本語だけでなく英語のページも随分見ました。
情報が古いのかもと思って、2019年内に書かれた記事も読みました。
しかし結果からいうと、どれも上手くいきませんでした。
どの記事でも、一度手動でコンソールから認証すると、
次回からは自動認証できると書いてあるのに、
毎回毎回毎回毎回、手動で認証しないと動かない :sob: :sob: :sob:
認証情報がちゃんとセーブできていないのだと思って、
かなりいろいろやってみたのですが、どの方法でも上手くいきませんでした。
いろんな人にも見てもらいましたが、結局理由はわかりませんでした。
もしかしたら職場で提供されているGoogleアカウントなので、
そもそも何か制約があったのかも???

rcloneって知ってる?(神)

もう諦めかけて、手動でアップロードするしかないかと思っていたところ、
また別の神:zap:が降臨して、以下のWebページに関する啓示を与えてくれたのです。

-いるかのボックスーRaspberry PiのファイルをGoogleドライブにバックアップする
https://irukanobox.blogspot.com/2019/07/raspberry-pigoogle.html

rcloneという、これは何?プログラム?アプリ?を
こちらの記事通りにインストールして設定するだけ。
一点だけ違うのは、rcloneも日々進化しているらしく、

$ rclone config

でサービスを設定する際は、こちらの記事では

(12 / Google Drive)
Storage> 12

と書いてありますが、2019年12月現在では
13 がGoogle Driveになっていましたので、

Storage> 13

で利用設定をしました。
また変わるかもしれませんが、そこは普通にリストで表示されるので、
冷静にGoogleDriveの番号を選んでください。
全部設定が終われば、これで

$ rclone copy XXXX gdrive:YYYY

とするだけで、ファイルXXXXをGoogleDriveのマイドライブの中のYYYYフォルダーに
アップロードできるようになりました:tada:
クライアントIDやクライアントシークレットなどの情報は、
rcloneの設定の段階で手動認証する時に取得してしまうようです。
こうなるとpythonじゃなくていいので、
シェルスクリプトでrapstillを使うのが一番シンプルです。

-パソコン工房NEXMAG 定点観測カメラをRaspberry Piで作る
https://www.pc-koubou.jp/magazine/25538

↑こちらの情報をもとに、シェルスクリプトにしました。
結果としてなんと:sunny:
たった4行のシェルスクリプト↓をcronで10分おきに走らせることで
解決してしまいました :joy: :joy: :joy:

#!/bin/sh
fn=$(date +%Y%m%d%H%M%S)
raspistill -o /home/pi/timelapse/${fn}.jpg
rclone copy /home/pi/timelapse/${fn}.jpg gdrive:timelapse-pic
rm -f /home/pi/timelapse/${fn}.jpg

仕事の合間にちらちらやっていただけとはいえ、
一ヶ月以上もOAuth2の認証に悩まされていたのに、
このあっさり感。
私は探し方が下手なのか、どこにもこの簡単な方法を見つけられなかったので、
こちらにポストしておきます。
ぜひ同じようなOAuth2の呪いにハマる人がいませんように :angel:

このrclone、GoogleDriveだけでなく、
いろんなcloudサービスに対応しているらしいので、
他にも使いでがありそうですね。
(私はもう使う予定は全くないけれど・・・)

このプロジェクト、いろいろ大変だったけど、まあ楽しかったです。
最後まで読んでいただき、ありがとうございました!!!

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8