lingrbotを作ってみた/ owncloud+andoroid+picasa+flickr連携/chromecast をlinuxで遊ぶ
DESCRIPTION
鹿児島らぐの鹿児島Linux勉強会-第02回-発表 LingrBotを作ってみた OwnClowd+Andoroid+Picasa+Flickr連携 Chromecast をLinuxで遊ぶTRANSCRIPT
LingrBotを作ってみた / ownCloud+Andoroid+Picasa+Flickr連携 /Chromecast を Linuxで遊ぶ
KenichiroMATOHARA(matoken)<[email protected]>
Linux - 02 -鹿児島 勉強会 第 回2014-06-28(Sat)
サンエールかごしま 4F 中研修室 3
KenichiroMATOHARA
● ID : matoken● http://matoken.org/● 興味
● Linux● FLOSS● OpenSteetmap● 電子工作● :
今日のネタ
● LingrBotを作ってみた● OwnCloud+Andoroid+Picasa+Flickr連携● Chromecast を Linuxで遊ぶ
LingrBotを作ってみた
Lingr?
● Webチャットサービス● IRCに似ている● IRCとの違い
● 常駐したりしなくてもログが保存される● 専用クライアントは必要なくブラウザだけで ok● Lingr-IRC GW プログラムを使ったら IRC Clientでも利用できるので IRC派にも安心 ?
# IRCはやったことがない人にはどうも敷居が高いら…しい .
鹿児島らぐの Lingr ROOM
● http://lingr.com/room/kagolug● MLとの連携がしたい● MLにメッセージが投稿されたら Subjectを
Lingrに投稿
Lingrには bot用の APIがある
● https://github.com/lingr/lingr/wiki/Lingr-Bot-API
● cgiなどを用意しておけば Roomに投稿され内容が見える
● getメソッドだけで投稿も可能
bot 登録
● 以下のページで bot を登録します.● “Lingr” http://lingr.com/bot/create
● 登録内容● Bot id : 任意● Callback URL : この URL に room の内容が飛んできます.その内容から反応したりすることが出来ます.とりあえず最低限 HTTP で 200 を返すものを用意して指定.
メッセージ受信用の cgi を作成
● ひとまず受け答えはしないつもりなのでHTTP 200 を返すだけの Script を用意
● 用意しなかったりエラーがあると roomにエ…ラーメッセージが
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
投稿テスト● get だけで投稿できるので試しに投稿してみます.● 次のページで情報が入手できます
http://lingr.com/developer● bot_verifier は載っていませんが, bot ID とSecret から求められます.
● $ echo -n 'KagolugML_botxxxxxxxxxxxxxxxxxxxxxxxxxxx'|sha1sum
B3c03556dca8dfffb8c509cb709817044c98ad87 -
● この場合b3c03556dca8dfffb8c509cb709817044c98ad87 がbot_verifier です.
投稿先の room : kagolug
bot ID : KagolugML_bot
bot_verifier : b3c03556dca8dfffb8c509cb709817044c98ad87
● 以下のようにアクセスしてみると room にメッセージが投稿されました,
% w3m -dump ‘http://lingr.com/api/room/say?room=kagolug&bot=KagolugML_bot&text=はろーわーるど&bot_verifier=b3c03556dca8dfffb8c509cb709817044c98ad87‘
メールから Linger に投稿
● 鹿児島らぐのML だけを登録したメールアドレスを用意.
● そのアドレスの .forward に以下の Sctipt を呼ぶように
"|exec /home/mk/bin/ml2lingr.pl"
のような感じで設定しておきます,後はメールが届くとこの Scriptが呼ばれて Room に投稿されます.
Script#!/usr/bin/perluse strict;use warnings;use Encode;use Email::MIME;use Email::MIME::ContentType;use LWP::Simple; my $ROOM = 'kagolug';my $BOT_NAME = 'KagolugML_bot';# echo -n 'botIDSecret' | sha1summy $BOT_VERIFIER = 'b3c03556dca8dfffb8c509cb709817044c98ad87'; my $mail='';while(my $line=<STDIN>){ $mail .= $line;} my $parsed = Email::MIME->new($mail);my $Subject = encode( 'utf8', $parsed->header('Subject') ) . "\n"; my $url = "http://lingr.com/api/room/say?room=$ROOM&bot=$BOT_NAME&text=$Subject&bot_verifier=$BOT_VERIFIER";print get("$url");
初期設定とか
メール受信
メール Subject取り出し
URL作成 &投稿
● irc の bot とか書くよりずっとお手軽に書けました.
● 今回は単に投稿するだけですが, cgi でroom のメッセージを解析して反応するとかすると bot らしくなりますね.
http://matoken.org/blog/blog/2014/06/25/lingr_bot/
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
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以下 )のみ● 写真アプリ以外で撮影した写真やスクリーン
…ショットは自動保存されない .● Scriptとか用意しなくても実は
Dropbox+IFTTとかでも行けたんじゃ ?● 少し確認したところでは無理そう
Chromecast を Linuxで遊ぶ
Chromecast?
● Googleが先日販売を開始した無線 Lanで映像データを受けて HDMIで出力するストリーミングデバイス.結構お安い ?
● "Chromecast" http://www.google.com/intl/ja/chrome/devices/chromecast/index.html
Linuxで使えるん ?
● APIもあるし, Chromeの拡張機能もあるようなので最悪 Chromeの画面は映せると思う….安いしポチる.
● GooglePlayでポチったら国際宅配便で香港から発送 orz
● 国内購入組より数日遅れで届く
セットアップ
● ChromecastにmicroUSBで給電● ChromecastがWiFiの APになるので接続する
● 気になるメッセージが表示されるけどそのまま進んで APの設定(普段使う AP)をして完了
Chromecastの初期化
● Chromecastの物理ボタンが一個あるがこれを長押しすると初期化され,再セットアップが可能
(このボタンなんだろうと押したら初期化された ><)
Chrome/Chromeiumにアプリ導入
● "Chrome ウェブストア - Google Cast" https://chrome.google.com/webstore/detail/google-cast/boadgeojelhgndaghljhdicfkmllpafd?utm_campaign=en&utm_source=en-et-na-us-oc-webstrapp&utm_medium=et"Chrome ウェブストア - Google Cast (Beta)" https://chrome.google.com/webstore/detail/google-cast-beta/dliochdbjfkdbacpmhlcpmleaejidimm?utm_campaign=en&utm_source=en-et-na-us-oc-webstrapp&utm_medium=et
● 両方入れても問題は無さそう.
利用方法
● 接続したい PCを Chromecastと同じネットワークに接続して Chromeの Chromecast拡張機能ボタンを押すと選択できる.
● 指定したタブをキャスト出来る● Youtube等の対応 siteではキャストボタンが利用できる
画面全体をキャストは今のところ出来無さそう
設定
● オプションから画像の品質の設定が可能
● ベータ版は設定が多い● 「 Additional receiver IPs」とか気になる設定が
色々試す
● バンダイチャンネル・ニコニコ動画● フルスクリーンにすると普通にキャストされる● AdobeFlash経由で元々結構 CPUを必要とするのに更にキャスト分の CPUが必要
● キャスト先と PC両方で映像が表示されるが,音声はキャスト先のみ.映像は遅延するので PCの画面を見るとストレス.
● Tweetdeck(Chromeで動く Twitterアプリ )● 何もしない時に流すのに良さそう.
(実はバンダイチャンネルとかは古いAndroidで再生するほうが PCが熱くならな
…い分快適だったり )
2011年発売の Xperia Pro でバンダイチャンネル視聴
● Slideshare● フルスクリーンにすると違和感なく動作する
● J-comi● マンガ.いちばん高解像度 (720p)にしても台詞が読めなかった orz
● .mp4ファイルを直に再生● 特に問題なく再生できる.ブラウザで表示,再生できるものなら何でも良さそう
● ownCloud経由● 快適に映像が楽しめる
DVIに変換
● 縦横比が少しおかしくなるが映った● 音声はどこからも取り出せ無さそう
HDMIメスーメス
HDMI->DVI変換DVI
オスーオス
VGAに変換
● 初めの起動画面は映るけどその後写らない &デバイスが見つからない.
● 恐らく起動時の解像度はいけるけどその後の高解像度に非対応で Chromecastが寝る
● このアダプタは3.5mmステレオジャックが付いていて音声が取り出せるので残念
みんなで使える ?
● 同じネットワークで Googleアカウントが同じじゃないと使えないぽい
● プロジェクタなどに Chromecastを繋いでリモートでみんなで表示するようなことはChromecastだけでは出来ない ><
Linuxでの使い勝手
● HDMIモニタがある &映像をよく見るならおすすめ
● NAS を使うと NAS->PC->Chromecast と無駄な通信が発生する. NASから直に再生したい
● VLCが対応予定らしいので期待
● GoogleI/Oで機能増えたらしいけど未だ未確認 ><
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+