SORACOM応用編!と題しまして、定時実行プログラムと連携させたツールを作ってみたいと思います(実際にSORACOMが登場するのは次回ですが…)。
定時実行プログラムというと、この連載でもcronを使ったツールをいくつか作りましたね。今回は定点カメラを少しカスタマイズして、撮影した写真を自動的にクラウドにアップロードするツールを作ってみたいと思います。
今回はその下準備として、ラズベリーパイからDropboxにデータをアップロードするところまで進めていきます。ラズベリーパイのOSは引き続き「Raspbian Jessie with PIXEL(2016-11-25リリース版)」を使用します。
ラズベリーパイとDropboxを連携させるには?
Dropboxでは、開発者向けに各種APIが用意されています。ドキュメントも充実していますが、初心者にはちょっとむずかしそうですね……。
そんな悩みを解決してくれるのが、「Dropbox-Uploader」というシェルスクリプトです。簡単なコマンドで、Dropbox for HTTPを使えるようにしてくれます!
いざ、Dropbox-Uploader!
「Dropbox-Uploader」のRead Meファイルを参考に、まずはGitHubからスクリプトファイルをダウンロードしましょう。GitHubのRead Meファイルには、gitコマンドとcurlコマンドの2種類のダウンロード方法が紹介されていますが、今回はcurlコマンドで必要なファイルのみをダウンロードしました。
curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
ダウンロードできたら、実行権限を与えて、スクリプトを実行します。
chmod +x dropbox_uploader.sh
./dropbox_uploader.sh
「Access Token」と表示されたところで処理が止まりました。その上には、このスクリプトを使うための手順が書かれています。
1. ブラウザで https://www.dropbox.com/developers/apps にアクセスし、Dropboxにログインします。
2. 「Create App」をクリックし、「Dropbox API app」を選択します。
3. Dropboxフォルダに対するアプリのアクセス権とアクセス制限を選択します。
4. 好きなアプリ名を入力します(例:MyUploader213972842522350)。
まずはDropboxにログインして、My appsのページにアクセスします(Doropboxのホームからたどる場合は、フッターメニュー内の「開発者向け情報」より)。
「Create App」をクリックして、新規作成!
「1. Choose an API」では左側の「Dropbox API」を選択。
「2. Choose the type of access you need」は、アクセスできるフォルダの選択です。「App folder」は、アプリケーション専用のフォルダを作成して、そのフォルダのみにアクセスできます。今回はこちらを選択しました。
「3. Name your app App name」の入力欄に、任意の名前を入力しましょう。今回は「raspberry-soracom」としました。
「Create App」をクリックして、アプリケーションが作成されると……
このような画面に遷移します!ここで、「Dropbox-Uploader」で必要となる「アクセストークン」を取得していきます。
「OAuth 2」という項目の中に「Generated access token」があります。「Generate」ボタンをクリックすると、アクセストークンが作成されます。
上図のような、長めのランダム文字列です。
ラズベリーパイに戻って、「Access Token:」に続けて、先ほど出力したアクセストークンの文字列を設定します。
入力すると、「The access token is xxxxxxxxxxxxxx. Looks ok? [y/N]」と表示されるので、「y」を入力してEnterキーを押しましょう。
「 The configuration has been saved.」と表示されれば、設定完了です!
もう一度スクリプトを実行すると、下図のようにヘルプが表示されます。
Dropboxにファイルをアップロード
./dropbox_uploader.sh upload ./dropbox_uploader.sh test
試しにこんなコマンドに実行してみました。「upload」の後の引数は1番目がローカルのアップロード対象ファイル、2番目がDropboxのアップロード先です。上記は、先ほどダウンロードしたシェルスクリプトファイルをアップロードするコマンドですね。
「DONE」と表示されたので、アップロードは無事に完了したようです!早速Dropboxを確認すると、
「アプリ」というディレクトリ内に、アプリ名のディレクトリ(ここでは「raspberry-soracom」)が作成されています。これが、このアプリのカレントディレクトリです。
そのカレントディレクトリ直下に、「test」というファイルがアップロードされていました。あれ、ちょっと期待していた結果と違う……「upload」コマンドを実行するときはディレクトリや拡張子も含めた文字列を指定する必要があるようですね(テキストエディタで開いてみたところ、中身は確かにアップロードしたファイルでした!)。
./dropbox_uploader.sh upload ./dropbox_uploader.sh test_dir/dropbox_uploader.sh
気を取り直して、2回目のチャレンジ!「test_dir」というディレクトリの中にアップロードするようなコマンドを実行してみました。
こちらも成功!さてさて、Dropboxの中身は……
今度は希望通りの結果になりました!存在しないディレクトリを指定すると、自動で作成してくれるようですね。
./dropbox_uploader.sh upload sample.png sample.png
画像ファイルの場合も同様です。定点カメラと連動させるのであれば、日時を含めた文字列をファイル名やフォルダ名に指定すると良さそうです。
./dropbox_uploader.sh copy sample.png test_copy/sample.png
「copy」はDropbox内のファイルをコピーするコマンドです。先ほどアップロードしたファイルを「test_copy」ディレクトリにコピーしてみました。バックアップを取るときなどに便利ですね。
./dropbox_uploader.sh delete test_copy/sample.png
削除コマンドは、あまり使用することは無いかもしれませんが、Dropboxの残り容量が気になる場合などに活躍してくれるかもしれませんね。
./dropbox_uploader.sh delete test_copy
上記のように記述すると、ディレクトリごと削除することができます。下層ファイルがある場合でも削除されてしまうので、「delete」コマンドを実行する際は注意が必要です。
まとめ
「Dropbox-Uploader」のおかげで、とても簡単にDropboxとの連携を実現することができました!
ローカル環境との同期の必要がないので、ローカルの容量不足を気にせず使うことができます。容量に限りのあるラズベリーパイにぴったりのスクリプトですね!
次回はSORACOMと定点カメラを連動させて、撮影した写真を自動的にDropboxへ送信するようなツールに仕上げていきたいと思います。