0

twで写真を付けてtweetできるようになった

arms22さんの提案でCUIで使えるtwitter clientに写真アップロード機能が付きました

Tw: Twitter client on Ruby.

tw うまい --file=food.jpg

–fileオプションにファイル名を渡せば写真がpic.twitter.comにアップロードされつつ、tweetできる。



カメラ

Macではimagesnapをhomebrewで入れればCUIからiSightで写真を取れる
brew install imagesnap
imagesnap -w 2.0 capture.jpg


1行で写真を取ってtweetできる
imagesnap -w 2.0 capture.jpg && tw 定点観測 --file=capture.jpg --yes && rm capture.jpg


crontabに登録しておけば定期的に撮影tweetできる。
2時間おきに撮影するように設定してみた。撮る前にsayで「撮影します」って言わせる。
PATH=$HOME/.rbenv/shims:$PATH
LANG=ja_JP.UTF-8

0 */2 * * * say 撮影します && imagesnap -w 2.0 capture.jpg && tw 定点観測 --file=capture.jpg --yes && rm capture.jpg

やっぱこれ危ないからやめよう


橋本商会 » CUIでUSBカメラキャプチャ

0

新しいTwitterのエゴサーチツールを作った

2010年に作ったやつが動かなくなったので
エゴサーチツール feedim

コードみたらひどかったから、1から作りなおしたほうが速いかーと思って作りなおした。
shokai/twitter-egosearch-skype

すげークリーンなコードになってて良い。

機能

Twでtwitter searchして
本文中の短縮URLはhugeurlで展開して
mongodb/mongoidに保存する

というクローラーがevent_emitterでイベント投げてくるので
Skype gemでpostする。


YAMLの設定ファイルをHashie::Mashで包んだら使いやすくてよかった。sizeとかlengthとかHashやArrayにある値を設定ファイルで使えなくなるけど気をつければメリットの方が大きい。


コードがひどいから作り直そうと思っても大抵挫折するし、がんばっても大して良くならないんだけど、そういう設計をかっこ良く書けるようにするライブラリやフレームワークを作ってから再チャレンジすると革命が起こせる。今回はevent_emitterがそれ。便利すぎ。神。

0

twiticonをTwitter API v1.1対応した

twiticonはこのblogの右上にも出しているtwitterアイコンのサービス。SinatraとHerokuで実装している。

Twitterアイコン画像のURLは超長いし、新しいアイコンをアップロードする毎に変わるのだが、twiticonを使うと

<img src="http://twiticon.herokuapp.com/shokai">
<img src="http://twiticon.herokuapp.com/shokai/mini">
などで埋め込めるようになる。gyazzなどで使っている。


Twitter API v1.0が終了したのだが、1.1ではprofile_image_urlのAPIが無くなった。
代わりにusers/showでprofile_image_urlが取得できるが、各種サイズのURLは無くnormalサイズだけ。

biggerやminiなどのサイズはprofile_image_urlの末尾を_normal.pngから_bigger.pngなどに置換すると得られる。

また、users/showは認証しないと読めなくなったので@shokai_twiticonというアカウントを作ってその権限でOAuthしている。


ソースコード
shokai/twiticon · GitHub
twitterなどの設定は全て環境変数で入れる。

twitterのoauth tokenを設定する必要があるので、取得するためのツールを bin/get_twitter_oauth_keys.rb に入れておいた。
使い方はREADMEに書いた

0

Rapsberry PiでIPアドレスをDMする(pipeとcronで)

羽田先生がやってたやつ
Rapsberry Pi でIPアドレスをDMする | HADA HISAKAZU Personal Information.


twとpipeとcrontabでやってみる


インストール

% sudo gem install tw
% tw --user:add
user:addで @shokai_log としてログインする。


下準備として、 Raspberry Piで使うアカウントにmentionを飛ばす。


さてIPアドレスをRaspberry Piから自分宛にDMする。
これを実行すればいい。自分宛の最新のmentionが @shokai からで、本文に「IP」という文字列が含まれている時に、自分のIPアドレスをDMで送り返す。
tw --user=shokai_log --format="#{user} #{text}" | tail -1 | grep -i "^shokai .*ip.*" && echo "`/sbin/ifconfig -a | grep "inet" | grep -v 127` `date`" | tw --pipe --user=shokai_log --dm:to=shokai


cronで5分ごとぐらいに実行すればいいと思う。
crontab -e
*/5 * * * *  tw --user=shokai_log --format="#{user} #{text}" | tail -1 | grep -i "^shokai .*ip.*" && echo "`/sbin/ifconfig -a | grep "inet" | grep -v 127` `date`" | tw --pipe --user=shokai_log --dm:to=shokai


実行結果


DMがくる


何か別のこと(IPという文字列を含まないtweet)をmentionしない限り、何回もDMを飛ばしてくるので適当に止める。

0

RubyとArduinoとTwitterで天気予報を見る

こういうのを数年おきに、その時の近代的な実装で作りなおしてみるとプログラミング環境の進歩がわかる。


1. 今日傘が必要かどうか表示してくれるてるてる坊主

晴れの時


雨が降る可能性がある時

ウチでは15分おきにその日の天気予報を取得して表示している。うちテレビ無いけどこれのお陰で傘を忘れたりしなくなった。


プログラムはものすごい単純になっている。Rubyのみ。
Macで開発してRaspberry Piにデプロイした。Ruby動くUNIX系ならどこでも動くはず。
require 'rubygems'
require 'arduino_firmata'
require 'weather_jp'

arduino = ArduinoFirmata.connect
weather = WeatherJp.get '東京'
if weather.today.rain > 30 # 降水確率30%以上
arduino.digital_write 13, true ## 青色LED
else
arduino.digital_write 12, true ## 赤色LED
end
taiki45さんのweather_jpと俺のarduino_firmataを合わせると超綺麗に書ける。
MSN天気からデータを取ってきている。
6年ぐらい前に作ったときはPerlのCGI+XPortだったり、4年ぐらい前はRubyからArduinoにシリアル通信したりでもっと行数多かった。


ちなみにzakuniさん作のweather-reportはlivedoor weatherからデータを取ってきていて、降水量情報がない代わりに雨/雪/雹の可能性を示すumbrella?メソッドが在る。
require 'rubygems'
require 'arduino_firmata'
require 'weather-report'

arduino = ArduinoFirmata.connect
weather = WeatherReport.get '横浜'
if weather.today.umbrella? ## 傘が必要な時
arduino.digital_write 13, true ## 青色LED
else
arduino.digital_write 12, true ## 赤色LED
end


地名や降水確率のしきい値を実行時引数に渡せる仕様にして、githubに置いておいた。
ProcfileもあるのでMacやRaspberry Pi等にサービスとしてインストールできる。
shokai/teruteru · GitHub


回路は、昔秋月で買ったRGBフルカラーLEDを使った。
アノード3本/カソード1本のスタンダードな奴。

arduinoのどのピンにRGBが接続されているかはプログラム中に書いてある

こういうシールドにして、その上にティッシュかぶせて顔を書けば完成です。



2. 今日雨が降りそうだったら教えてくれるtwitter bot


雨が振りそうな日の朝に、こういうのが来る

Twを使うとtwitter botが簡単に作れる。
天気botこれだけで書ける。
require 'rubygems'
require 'tw'
require 'weather_jp'

tw = Tw::Client.new
tw.auth 'shokai_log' ## botアカウントで認証
weather = WeatherJp.get '東京'
if weather.today.rain > 30 # 降水確率30%以上
tw.tweet "@shokai #{weather.today}" ## @shokaiにmention送る
else
puts weather.today ## 予報の文章をterminalに表示するだけ
end

降らない時にも「今日の天気は晴れ」とか送ってるとだんだん見なくなるので、雨降る日だけtweetするようにした。

これも多少使いやすくしてgithubにコード置いておいた。
shokai/twitter-weather-alert · GitHub
cronで朝実行するようにしている。