Upload
kenichiro-matohara
View
746
Download
1
Embed Size (px)
DESCRIPTION
#osckansai 東海道らぐLT スライド "オープンソースカンファレンス2014 Kansai@Kyoto - イベント案内 | 2014-08-02 (土): 東海道らぐの夏祭り!ライトニングトークBoF大会" https://www.ospn.jp/osc2014-kyoto/modules/eguide/event.php?eid=15 "東海道らぐの夏祭り!ライトニングトークBoF大会 in OSC京都 - 東海道らぐ | Doorkeeper" http://tokaidolug.doorkeeper.jp/events/13185
Citation preview
OwnCloud + Andoroid + Picasa + Flickr連携
KenichiroMATOHARA(matoken)<[email protected]>
BoF東海道らぐの夏祭り!ライトニングトーク 大会 in OSC京都
2014-08-02(Sat)
KenichiroMATOHARA
● ID : matoken● http://matoken.org/● 興味
– Linux
– FLOSS
– OpenSteetmap– 電子工作– :
OwnCloud + Andoroid + Picasa + Flickr連携
Android
● 写真の自動アップロード機能● 自動的にバックアップされていてとても便利● Google+だと写真を選択して投稿も楽々● …でも
● アプリケーションがそれぞれにアップロードしている– Google+/Dropbox…
● データ通信もそれぞれ必要だしバッテリーも減る
● Androidからは1回だけアップロードしてアップロード先でそれぞれに転送できないか?
これを
携帯ネットワーク
こうしたい
携帯ネットワーク
固定回線
…そういえば昔こんなことを
● "Linux で Eye-Fi Card を設定・各種ストレー ジサービ スに転送する"
http://www.slideshare.net/matoken/koedo-lug-c80eyefi
ownCloud
● Dropboxみたいなファイル共有ソフト(最近はグループウェアみたいな機能もあって色々便利)
● PHPで出来ていて自分のサーバに導入できる● Win/Mac/Linux/Andorid/iOS各種Clientあり
– WebDavプロトコルも動くのでdavにアクセスできたら環境を選ばない
● AndroidのownCloudアプリには写真の自動アップロード機能がある– ownCloudに一本化してownCloudサーバ上で処理
(Google+/FlickrへUpload)できないか?
ownCloudの導入
● 略● UbuntuだといくやさんのPPAおすすめ
"ownCloud Client 1.6.0のパッケージ - いくやの斬鉄日記" http://blog.goo.ne.jp/ikunya/e/fbfab38bbdd63a30ce4db366a8b6ecf6"Qt5アプリケーションのフォント設定 - いくやの斬鉄日記" http://blog.goo.ne.jp/ikunya/e/46b9097370dbccaa234d53728df869be
● DebianWheezyのpkgだとちょっと古いけど今回の内容では問題ない(RaspberryPiでも!)
Android版ownCloudの自動アップロード機能
● 写真を撮影すると自動的に登録したownCloud ディレクトリの下の data/アカウント名/files/InstantUpload 以下にアップロードされる
● ここを監視する
inotify APIでディレクトリを監視
● Linuxのinotyfy APIを使いディレクトリの状態を監視できる
● inotify をお手軽に使えるコマンドinotifywait/inotifywatch の入ったinotify-tools pkg を導入(Debian/Ubuntu)
$ sudo apt-get install inotify-tools
inotifywaitコマンドを試す
● option 無しだと1つのイベントで終了
% inotifywait data/mk/files/InstantUpload/Setting up watches.Watches established. data/mk/files/InstantUpload/ CREATE IMG_20140604_185820.jpg.ocTransferId5194.part
● -m option でmonitor mode イベントをずっと拾う.でも冗長.
% inotifywait -m data/mk/files/InstantUpload/Setting up watches.Watches established.data/mk/files/InstantUpload/ CREATE IMG_20140604_190315.jpg.ocTransferId6217.partdata/mk/files/InstantUpload/ OPEN IMG_20140604_190315.jpg.ocTransferId6217.partdata/mk/files/InstantUpload/ MODIFY IMG_20140604_190315.jpg.ocTransferId6217.part :data/mk/files/InstantUpload/ CLOSE_WRITE,CLOSE IMG_20140604_190315.jpg.ocTransferId6217.partdata/mk/files/InstantUpload/ MOVED_FROM IMG_20140604_190315.jpg.ocTransferId6217.partdata/mk/files/InstantUpload/ MOVED_TO IMG_20140604_190315.jpg^C
テンポラリファイルが作られる
ファイルが開かれる
転送されたデータ書き込み(転送中…)
ファイルクローズ
本来のファイル名に改名
● -e option で必要な MOVED_TO event だけを拾う
% inotifywait -m -e moved_to data/mk/files/InstantUpload/Setting up watches.Watches established.data/mk/files/InstantUpload/ MOVED_TO IMG_20140604_190738.jpg
● てことでinotifywait -m -e moved_to \ data/mk/files/InstantUpload/
● でアップロードされたファイル名が取得できることがわかった– 転送済みのタイミング :)
Google+(Picasa)
● Google+の画像はPicasaと統合されている● 2048x2048以下のサイズであれば容量制限なしにUpload 可能 :)
● ブラウザ上のGoogle+からアップロードすると自動的に2048x2048 以下にリサイズされる→ 無制限
● コマンドラインからGoogleの操作の出来るGoogleCLというツールがある
● ブラウザ上のGoogle+からでも設定によっては縮小されずにアップロードされそう.https://plus.google.com/settings
GoogleCL
● "googlecl - Command line tools for the Google Data APIs - Google Project Hosting" https://code.google.com/p/googlecl/
● pythonで出来ていてマルチプラットホームで動作します.
● 導入するとgoogleコマンドが利用できるようになり,Blogger/Calendar/Contacts/Docs/Finance/Picasa/Youtubeが操作できるようになる
GoogleCLでGoogle+の「投稿からの写真」領域にアップロード
● 以前(2011年冬) は 'Instant Upload'というアプバムにアップロードすると自動的に2048x2048以下にリサイズされていた– "Linux で写真を操作 - 写真の管理、現像、投稿 -"
http://www.slideshare.net/matoken/linux-33569739?qid=3de33ac3-f556-4795-bf82-89915918bea6&v=default&b=&from_search=1
● 現在はオリジナルサイズでアップロードされ → てしまうよう ディスクを消費して埋まっ
てしまう● 2048x2048以下にリサイズしてからUpでok
● 現在はアルバム'Instant Upload'では「投稿からの写真」にアップロードされなくなっている
● list-albamsコマンドでアルバムのリストを取得し,それらしいアルバムを試していくと'自動バックアップ'というアルバムが該当することが判った.
GoogleCL認証● 利用できるよう認証をする.初回実行時に認証が走る.
% google --force-auth picasa list-albums
Please log in and/or grant access via your browser at:
https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=4%2F19Y3OMnTQtuJWWi31IR0sH8JgDKO&hd=default
ブラウザが開かれるのでGoogleの認証を行う
※w3m でも行けるかと思ったが,2段階認証後JavaScriptが 必要と言われて失敗した.リモートサーバ環境 ではssh のX
転送でブラウザを開いて回避した$ ssh -XC user@host
実際のコマンド
● 縮小(Imagemagic利用)
convert -resize 2048x -quality 100 画像ファイル名 /tmp/縮小ファイル名
● 投稿google picasa post '自動バックアップ' /tmp/縮小ファイル名
Google+投稿時に選択できるようになった
Flickr
● Yahoo!米の写真共有サービス● 有料版だと無制限アップロードだった
– 現在はAdFreeとAdFree+容量2Tのプランが出来た
– 無制限時からの有料ユーザは引き続き無制限
● 無料版でも1T利用可能になった
Flickrへの自動投稿
● libflickr-upload-perl パッケージのflickr_uploadコマンドを利用する
$ sudo apt-get install libflickr-upload-perl
Tokenを取得する
● ブラウザにURLを入力して認証を行いEnterを入力する.表示されたトークンを記録.この認証は別マシンで行ってもOK
% flickr_upload --auth1. Enter the following URL into your browser
http://api.flickr.com/services/auth/?api_key=8dcf37880da64acfe8e30bb1091376b7&perms=write&frob=72157644983537186-197058a4fdf82491-183451&api_sig=8e06c3da0b66cc512a3ec74131b3309b
2. Follow the instructions on the web page3. Hit <Enter> when finished..
Your authentication token for this application is XXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXX
Flickrでの投稿
% flickr_upload --auth_token TOKEN --public 0 --friend 0 --family 0 --tag='\"InstantUpload\"' 画像ファイル
● --auth_token 前のページで取得した認証トークン● --public 0 非公開にする
--friend 0 友達に非公開にする● --family 0 家族に非公開にする
--tag='\"InstantUpload\"' タグ付け
Script#!/usr/bin/perluse strict;use warnings; my $WATCHDIR = '/var/www/owncloud/data/mk/files/InstantUpload/';my $FLICKR_TOKEN = 'xxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxx'; my $jpg;open CMD, "/usr/bin/inotifywait -m -e moved_to --format %f $WATCHDIR |"; while($jpg=<CMD>){ chomp $jpg; my $small = $jpg;
#-- resize(Google+用) $small =~s/\.jpg$/-2048\.jpg/i; system("convert -resize 2048x -quality 100 $WATCHDIR/$jpg /tmp/$small"); #-- Google+ post system("google picasa post '自動バックアップ' /tmp/$small"); system("rm /tmp/$small"); #-- Flickr post system("/usr/bin/flickr_upload --auth_token $FLICKR_TOKEN --public 0 --friend 0 --family 0 --tag='\"InstantUpload\"' $WATCHDIR/$jpg");} __END__ "inotyfy-post.pl" https://gist.github.com/matoken/1e9a5455bf8ab6511c7d
実行時の様子
$ ./inotyfy-post.plSetting up watches.Watches established.Loading file /tmp/IMG_20140621_075659-2048.jpg to album 自動バックアップUploading /var/www/owncloud/data/mk/files/InstantUpload//IMG_20140621_075659.jpg...Waiting for upload results (ctrl-C if you don't care).../var/www/owncloud/data/mk/files/InstantUpload//IMG_20140621_075659.jpg is at http://www.flickr.com/tools/uploader_edit.gne?ids=14282595917 :
問題点
● Google+は広範囲の画像ファイルを検索,アップロードしていた– ownCloudアプリはカメラアプリで撮影したもの
(DCIM/Camera以下)のみ
● カメラアプリ以外で撮影した写真やスクリー…ンショットは自動保存されない .
● Scriptとか用意しなくても実はDropbox+IFTTとかでも行けたんじゃ?– 少し確認したところでは無理そう
Credits & License
● Content by KenichiroMATOHARA(matoken)http://matoken.org/License: CC-BY-SA
● OpenOffice.org template by Raphaël Hertzoghttp://raphaelhertzog.com/go/ooo-templateLicense: GPL-2+
● Background image by Alexis Younes “ayo”http://www.73lab.comLicense: GPL-2+