Help us understand the problem. What is going on with this article?

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

※この記事は大変ちんたらしています。
ダルい方は、この記事の見出し「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サービスに対応しているらしいので、
他にも使いでがありそうですね。
(私はもう使う予定は全くないけれど・・・)

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

ElecCPinAAII
AI系研究室の片隅でパンくずを拾って食べているネズミです。 AIのことは何も知りません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした