Weitere ähnliche Inhalte Ähnlich wie LingrBotを作ってみた/ ownCloud+Andoroid+Picasa+Flickr連携/Chromecast をLinuxで遊ぶ (20) Mehr von Kenichiro MATOHARA (20) LingrBotを作ってみた/ ownCloud+Andoroid+Picasa+Flickr連携/Chromecast をLinuxで遊ぶ5. Lingr?
● Web チャットサービス
● IRC に似ている
● IRC との違い
● 常駐したりしなくてもログが保存される
● 専用クライアントは必要なくブラウザだけで ok
● Lingr-IRC GW プログラムを使ったら IRC Client でも
利用できるので IRC 派にも安心 ?
# IRC はやったことがない人にはどうも敷居が高いら
…しい .
6. 鹿児島らぐの Lingr ROOM
● http://lingr.com/room/kagolug
● ML との連携がしたい
● ML にメッセージが投稿されたら Subject を
Lingr に投稿
7. Lingr には bot 用の API がある
● https://github.com/lingr/lingr/wiki/Lingr-Bot-AP
I
● cgi などを用意しておけば Room に投稿され
内容が見える
● get メソッドだけで投稿も可能
8. bot 登録
● 以下のページで bot を登録します.
● “Lingr” http://lingr.com/bot/create
● 登録内容
● Bot id : 任意
● Callback URL : この URL に room の内容が飛
んできます.その内容から反応したりすること
が出来ます.とりあえず最低限 HTTP で 200 を
返すものを用意して指定.
9. メッセージ受信用の cgi を作成
● ひとまず受け答えはしないつもりなので
HTTP 200 を返すだけの Script を用意
● 用意しなかったりエラーがあると room にエ
…ラーメッセージが
#!/usr/bin/perl
print "Content-type: text/plainnn";
10. 投稿テスト
● get だけで投稿できるので試しに投稿してみます.
● 次のページで情報が入手できます
http://lingr.com/developer
● bot_verifier は載っていませんが, bot ID と Secret から
求められます.
● $ echo -n
'KagolugML_botxxxxxxxxxxxxxxxxxxxxxxxxxxx'|sha1sum
B3c03556dca8dfffb8c509cb709817044c98ad87 -
● この場合
b3c03556dca8dfffb8c509cb709817044c98ad87 が
bot_verifier です.
11. 投稿先の 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=b3c03556dca8dfffb8c509cb709817044c
98ad87‘
12. メールから Linger に投稿
● 鹿児島らぐの ML だけを登録したメールアド
レスを用意.
● そのアドレスの .forward に以下の Sctipt
を呼ぶように
"|exec /home/mk/bin/ml2lingr.pl"
のような感じで設定しておきます,後はメー
ルが届くとこの Script が呼ばれて Room に
投稿されます.
13. Script#!/usr/bin/perl
use 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' | sha1sum
my $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 作成 & 投稿
14. ● irc の bot とか書くよりずっとお手軽に書け
ました.
● 今回は単に投稿するだけですが, cgi で
room のメッセージを解析して反応するとか
すると bot らしくなりますね.
http://matoken.org/blog/blog/2014/06/25/lingr
_bot/
21. ownCloud
● Dropbox みたいなファイル共有ソフト
● PHP で出来ていて自分のサーバに導入できる
● Win/Mac/Linux/Andorid/iOS 各種 Client あり
● WebDav プロトコルも動くので dav にアクセス
できたら環境を選ばない
● Android の ownCloud アプリには写真の自動
アップロード機能がある
● ownCloud に一本化して ownCloud サーバ上で処
理 (Google+/Flickr へ Upload) できないか ?
22. ownCloud の導入
● 略
● Ubuntu だといくやさんの PPA おすすめ
"ownCloud Client 1.6.0 のパッケージ - いくやの
斬鉄日記 "
http://blog.goo.ne.jp/ikunya/e/fbfab38bbdd63a3
0ce4db366a8b6ecf6
"Qt5 アプリケーションのフォント設定 - いくや
の斬鉄日記 "
http://blog.goo.ne.jp/ikunya/e/46b9097370dbcc
aa234d53728df869be
24. inotify API でディレクトリを監視
● Linux の inotyfy API を使いディレクトリの状
態を監視できる
● inotify をお手軽に使えるコマンド
inotifywait/inotifywatch の入った inotify-tools
pkg を導入 (Debian/Ubuntu)
$ sudo apt-get install inotify-tools
25. inotifywait コマンドを試す
● option 無しだと 1 つのイベントで終了
% inotifywait data/mk/files/InstantUpload/
Setting up watches.
Watches established.
data/mk/files/InstantUpload/ CREATE
IMG_20140604_185820.jpg.ocTransferId51
94.part
26. ● -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.part
data/mk/files/InstantUpload/ OPEN
IMG_20140604_190315.jpg.ocTransferId6217.part
data/mk/files/InstantUpload/ MODIFY
IMG_20140604_190315.jpg.ocTransferId6217.part
:
data/mk/files/InstantUpload/ CLOSE_WRITE,CLOSE
IMG_20140604_190315.jpg.ocTransferId6217.part
data/mk/files/InstantUpload/ MOVED_FROM
IMG_20140604_190315.jpg.ocTransferId6217.part
data/mk/files/InstantUpload/ MOVED_TO IMG_20140604_190315.jpg
^C
テンポラリファイルが作られる
ファイルが開かれる
転送されたデータ書き込み
( …転送中 )
ファイルクローズ
本来のファイル名に改名
27. ● -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
28. ● てことで
inotifywait -m -e moved_to
data/mk/files/InstantUpload/
● でアップロードされたファイル名が取得でき
ることがわかった
● 転送済みのタイミング :)
29. Google+(Picasa)
● Google+ の画像は Picasa と統合されている
● 2048x2048 以下のサイズであれば容量制限
なしに Upload 可能 :)
● ブラウザ上の Google+ からアップロードす
ると自動的に 2048x2048 以下にリサイズさ
→れる 無制限
● コマンドラインから Google の操作の出来る
GoogleCL というツールがある
30. ● ブラウザ上の Google+ からでも設定によっ
ては縮小されずにアップロードされそう.
https://plus.google.com/settings
31. 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/Financ
e/Picasa/Youtube が操作できるようになる
32. GoogleCL で Google+ の「投稿か
らの写真」領域にアップロード
● 以前 (2011 年冬 ) は 'Instant Upload' というア
プバムにアップロードすると自動的に
2048x2048 以下にリサイズされていた
● "Linux で写真を操作 - 写真の管理、現像、投稿 -"
http://www.slideshare.net/matoken/linux-3356973
9?qid=3de33ac3-f556-4795-bf82-89915918bea6&v=de
fault&b=&from_search=1
● 現在はオリジナルサイズでアップロードされて
→しまうよう ディスクを消費して埋まってし
まう
● 2048x2048 以下にリサイズしてから Up で ok
33. ● 現在はアルバム 'Instant Upload' では「投稿
からの写真」にアップロードされなくなって
いる
● list-albams コマンドでアルバムのリストを取
得し,それらしいアルバムを試していくと
' 自動バックアップ ' というアルバムが該当す
ることが判った.
34. 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
35. 実際のコマンド
● 縮小 (Imagemagic利用 )
convert -resize 2048x -quality 100 画像ファイ
ル名 /tmp/ 縮小ファイル名
● 投稿
google picasa post ' 自動バックアップ ' /tmp/
縮小ファイル名
39. Token を取得する
● ブラウザに URL を入力して認証を行い Enter を入力する.表示
されたトークンを記録.この認証は別マシンで行っても OK
% flickr_upload --auth
1. 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 page
3. Hit <Enter> when finished.
.
Your authentication token for this application is
XXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXX
40. Flickr での投稿
% flickr_upload --auth_token TOKEN --public 0
--friend 0 --family 0 --tag='"InstantUpload"' 画像
ファイル
● --auth_token 前のページで取得した認証トークン
● --public 0 非公開にする
--friend 0 友達に非公開にする
● --family 0 家族に非公開にする
--tag='"InstantUpload"' タグ付け
41. Script#!/usr/bin/perl
use 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;
42. #-- 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
43. 実行時の様子
$ ./inotyfy-post.pl
Setting 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
:
46. Chromecast?
● Google が先日販売を開始した無線 Lan で映
像データを受けて HDMI で出力するストリー
ミングデバイス.結構お安い ?
● "Chromecast"
http://www.google.com/intl/ja/chrome/devices
/chromecast/index.html
47. Linux で使えるん ?
● API もあるし, Chrome の拡張機能もあるよ
うなので最悪 Chrome の画面は映せると思う
….安いしポチる.
● GooglePlay でポチったら国際宅配便で香港
から発送 orz
● 国内購入組より数日遅れで届く
48. セットアップ
● Chromecast に microUSB で給電
● Chromecast が WiFi の AP になるので接続す
る
● 気になるメッセージが表示されるけどそのま
ま進んで AP の設定(普段使う AP )をして
完了
50. Chrome/Chromeium にアプリ導入
● "Chrome ウェブストア - Google Cast"
https://chrome.google.com/webstore/detail
/google-cast/boadgeojelhgndaghljhdicfkmll
pafd?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/dliochdbjfkdbacpmhlcpml
eaejidimm?utm_campaign=en&utm_source=en-e
t-na-us-oc-webstrapp&utm_medium=et
51. 利用方法
● 接続したい PC を Chromecast と同じネット
ワークに接続して Chrome の Chromecast 拡
張機能ボタンを押すと選択できる.
● 指定したタブをキャスト出来る
● Youtube 等の対応 site ではキャストボタンが
利用できる
62. みんなで使える ?
● 同じネットワークで Google アカウントが同
じじゃないと使えないぽい
● プロジェクタなどに Chromecast を繋いでリ
モートでみんなで表示するようなことは
Chromecast だけでは出来ない ><
63. Linux での使い勝手
● HDMI モニタがある & 映像をよく見るならお
すすめ
● NAS を使うと NAS->PC->Chromecast と無
駄な通信が発生する. NAS から直に再生し
たい
● VLC が対応予定らしいので期待
● GoogleI/O で機能増えたらしいけど未だ未確
認 ><
64. Credits & License
● Content by KenichiroMATOHARA(matoken)
http://matoken.org/
License: CC-BY-SA
● OpenOffice.org template by Raphaël Hertzog
http://raphaelhertzog.com/go/ooo-template
License: GPL-2+
● Background image by Alexis Younes “ayo”
http://www.73lab.com
License: GPL-2+