2009/09/18(Fri)
twitterからmixiボイスにマルチポストするRubyスクリプト書いた
Ruby | |
【9月19日追記】修正版作りました。
「mixiボイス」提供開始、つぶやき機能「エコー」正式サービス化 -BB Watch
昨日からmixiボイスのサービスが始まりましたね。
mixiエコー時代は、あまり使われていなかったようだけど、mixiボイスが始まってからは、強制的にホームに表示されるようになって利用者が増えたように感じます。
ということで、twitterからmixiボイスにマルチポストするRubyスクリプトを書いてみた。
使い方
スクリプト内の以下の変数を勝手に変更してください。
###################### #mixiのログイン情報 ###################### mixi_username ='hogehoge' #mixiのログイン用メールアドレス mixi_password ='fugafuga' #mixiのログイン用パスワード ###################### #twitterのログイン情報 ###################### twitter_username ='piyopiyo' #twitterユーザー名(メールアドレスは不可) twitter_password ='foobar' #twitterログイン用パスワード ###################### #その他設定項目(必要に応じて変更してください) ###################### cachefile ='echo_cache.dat' #キャッシュファイル名 comment ='[ついったーから投稿]' #追加するフッタ(何も追加しない場合''にしてください)
本当はyamlファイルでも用意すればよかったんだろうけど・・・。
また、ライブラリとして、「Mechanize」、「rubytter」が必要ですので、各自インストールしてください。
推奨動作環境は、Ruby1.8.7です。
これを、crontabで回してやればOK。
twitterにはAPI制限があるし、あまり頻繁にアクセスするとmixiの方でもアクセス制限がかかるようなので、10分に1回程度の実行が良いと思われます。
初回実行時は、自動的にキャッシュファイル(デフォルトではecho_cache.dat)が生成され、twitterの最新の1ポストのみがmixiボイスに投稿されます。
既にキャッシュファイルが存在している場合は、キャッシュファイルとタイムラインの差分を取り、まだボイスに投稿されていないものだけを投稿します。
ただし
・reply(@から始まるつぶやき)は一切mixiボイスにはポストされません
・twitterのタイムラインからは最近の20件までしか読み込まれません
・文章のみで差分を取っているため、過去20件以内に同内容のつぶやきがある場合は、mixiボイスにポストされません。
・つぶやき中の改行は、全てスペースに変換されます。
ソースは以下からコピーしてお使いください。
require 'rubygems' require 'Mechanize' require 'rubytter' ###################### #mixiのログイン情報 ###################### mixi_username ='hogehoge' #mixiのログイン用メールアドレス mixi_password ='fugafuga' #mixiのログイン用パスワード ###################### #twitterのログイン情報 ###################### twitter_username ='piyopiyo' #twitterユーザー名(メールアドレスは不可) twitter_password ='foobar' #twitterログイン用パスワード ###################### #その他設定項目(必要に応じて変更してください) ###################### cachefile ='echo_cache.dat' #キャッシュファイル名 comment ='[ついったーから投稿]' #追加するフッタ(何も追加しない場合''にしてください) agent = WWW::Mechanize.new #mixiにログイン page = agent.get("http://mixi.jp/") form = page.forms.first form["email"] = mixi_username form["password"] = mixi_password form.submit #mixiエコーのページを取得 page = agent.get('http://mixi.jp/recent_echo.pl') form = page.forms[1] tweets = Array.new #twitterのタイムラインから最新の発言を取得して、配列に格納 tw =Rubytter.new(twitter_username,twitter_password) tw.user_timeline(twitter_username).each{|status| tweets.push(status.text.gsub("\n"," ")) } #キャッシュファイルを読み取る #ファイルがない場合、現在のタイムラインの最新1件以外を全て書き込む begin cache = File.open(cachefile) rescue cache = File.open(cachefile,'w') for i in 1...(tweets.size) cache.puts tweets[i] end end cache.close #読み込んだキャッシュを配列に格納 cache = File.open(cachefile,'r') posted =Array.new cache.each do |line| posted.push(line) end cache.close for i in 0...(tweets.size) flag =true #最新の発言20件とキャッシュが一致 for j in 0...(posted.size) if tweets[i].gsub("\n","")==posted[j].gsub("\n","") flag = false end end #その発言がreplyである if /^@/=~tweets[i] flag =false end if flag ==true #mixiエコーに投稿 f = form['body'] =tweets[i]+comment puts tweets[i] form.click_button end end #キャッシュを生成 cache = File.open(cachefile,'w') for i in 0...(tweets.size) cache.puts tweets[i] end cache.close
バグなどの報告お待ちしております。
【9/19追記】:コードの改変、再配布はご自由にどうぞ。こちらから引用したことのみ併記していただけると幸いです。
- さまざまなめりっと - Twitter関連ニュース
- mixiボイスと Twitter の違いまとめ
- ryuzi_kambe の?D - mixiボイスと Twitter の違いまとめ ( ラボブ...
- src’s note - 気になる技術メモ
- なんかmixiボイスとか言うのが始まってた。
- mixiボイス Twitter
- @・ェ・)やるっきゃない - [Ruby]twitter2mixi
- big-eyed-hamsterの日記 - mixiボイス
- [Ruby]twitterからmixiボイスにマルチポストするRubyスクリプトをf...
- 5.1さらうどん - twitterからmixiボイスにポストするスクリプト関連...
- twitte.rbハック mixiボイスへのpost
- twitterの発言をmixiボイスに投稿するスクリプト
- 約束の地 - 「twitterからmixiボイスにマルチポストするRubyスクリ...
- 約束の地 - 「twitterからmixiボイスにマルチポストするRubyスクリ...
- [言語][Ruby][Webサービス]mixi エコー改め mixi ボイスへ twitter ...
- 世界を泳ぐ1bit - wassrからmixiボイスに〜(以下略)
- [VBA] Twitterからmixiボイス(mixiエコー)にポストするExcel VBA...
- mitsuru714の日記 - Twitterからmixiボイス(mixiエコー)にポスト...
- ぺちぱーのユウウツ - Twitterをmixiボイスに同期する
- 記録 - twitterのポストを同時にmixiのボイスに投稿するコマンドラ...
- 852 http://blog.spicebox.jp/labs/2009/09/post_308.html
- 416 http://www.google.co.jp/search?q=mixiボイス+twitter&sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-34,GGGL:ja
- 396 http://b.hatena.ne.jp/hotentry
- 346 http://twitter.com/
- 312 http://reader.livedoor.com/reader/
- 207 http://mixi.jp/recent_echo.pl
- 181 http://d.hatena.ne.jp/
- 178 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=vpm&q=mixiボイス+firefox&btnG=検索&lr=lang_ja
- 176 http://www.google.co.jp/search?q=mixi+ボイス twitter&btnG=検索&hl=ja&rlz=1B3GGGL_jaJP273JP274&sa=2
- 174 http://www.google.co.jp/reader/view/


こちらから引用したことのみ併記して貰えるとうれしいです。
自分自身Rubyに関しては(というかプログラムについては)ずぶの素人で、環境の構築につまづいたりと大変でしたが、なんとか無事動作させることができました!
感謝感謝です!
このエントリーの派生でスクリプトを作っておられる方もいらっしゃて影響力がすごい ><;