FlashAirのLuaでGoogle Driveに写真を自動アップロードする (1)

東芝のWi-Fi内蔵型SDカードのFlashAirを購入しました.
Amazonだと並行輸入版が2000円台から買えるので,数年前の半額以下程度となって非常に購入しやすくなりました.
とりあえず手持ちのPEN E-PL2に入れて使っています.めっちゃ便利や.

ところでこのFlashAir,そのままスマホへの写真転送用としても便利なのですが,一部の人の間ではスクリプト言語Luaの実行環境として異常な人気()を誇っていることも有名です. 撮影した写真を無線LAN経由でDropboxへアップロードするサンプルコードなんかがよく見られます. 私もできればこういったLuaを実行できることの恩恵にあずかりたいタイプの人なので,今回はFlashAir上のLuaを用いてGoogle Driveに写真をアップロードするスクリプトを試してみました.

参考にしたのは次のサイト:

サンプルコードはほとんどを1つ目の記事から引用しています.

準備

まず準備として,Google Drive APIを使えるようにしておかなければなりません.

Developers Consoleにログインして新しいプロジェクトを作成します.

gdevpng1
左側のボタン”Create Project”をクリック

プロジェクト名を要求されるので,ここでは”flashair-lua-upload”としておきます.

gdevpng2
適当なプロジェクト名をつける

作成が完了すると,プロジェクトのダッシュボードへ飛ばされるので, “Use Google APIs”から”Drive API”を有効にします.

gdevpng4
“Enable API”をクリック

有効にしたAPIに対してCredentialsを作成する必要があるので,”Go to Credentials”へ.
次にAPIを何に対して使うかを聞かれるので,”Other UI”かつ”User data”としておきます.

gdevpng6
non-UIではUser dataが使えないらしい

ユーザーに対して表示されるアプリ名とかを聞かれるので,これも適当につけてあげると 最終的にClient IDが発行されるので,その画面で”Download”をクリックして Client IDやClient Secretが含まれるJSONをダウンロードしておきます.

OAuth認証

ブラウザ上で,取得したClient IDを埋め込んだ次のURIにアクセスしてOAuth認証をしておきます.

https://accounts.google.com/o/oauth2/auth?client_id=CLIENT_ID&response_type=code&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/drive

無事認証が通ればDevice Codeが発行されるので,これをしっかり保存しておきます.

Access token, Refresh token

続いて,今度はcURLでAccess tokenおよびRefresh tokenのリクエストを行います. Device code,Client ID,Client Secretは先に取得したものを挿入しておきます.

$ curl -X POST https://accounts.google.com/o/oauth2/token \
  -d "code=DEVICE_CODE" \
  -d "client_id=CLIENT_ID" \
  -d "client_secret=CLIENT_SECRET" \
  -d "redirect_uri=urn:ietf:wg:oauth:2.0:oob" \
  -d "grant_type=authorization_code"

ここで返ってくるJSONに今後必要なRefresh tokenが含まれています.

写真のアップロードテスト

次のLuaスクリプトの冒頭でClient ID,Client Secret,Refresh tokenを宣言しているので, それぞれ取得したものを埋め込みます.

41行目でfilePath="/testfile.jpg"としている部分がありますが, ここに適宜アップロードしたい写真のパスを指定しておきます.

このLuaスクリプトをFlashAirの適当な場所に置き, カメラを起動してSTAモード等で無線LANに接続します.

同じネットワーク内のPCなどからFlashAirに接続し, 先程置いたLuaスクリプトを開くと,自動的にAccess tokenの取得と それを用いた写真のアップロードが行われるはずです.

まとめ

今回はFlashAir上に置いたLuaスクリプトを用いて「カメラ単体で」Google Driveに写真をアップロードすることを試してみました.

FlashAirにはカメラの起動時や撮影時などに任意のスクリプトを走らせる機能があるらしいので,今後は撮影時に自動的にファイルを走査し,必要な写真をGoogle Driveにアップロードするようにスクリプトを改良できればと考えています.

ところで,できればGoogle DriveよりもGoogle Photosにアップロードしたいんだけど良い方法はないだろうか…??? (っ´﹏`c)