(apply-generic op . args)

教育者, 将軍, 栄養士, 心理学者, 親はプログラムする. 軍隊, 学生, 一部の社会はプログラムされる. - 計算機プログラムの構造と解釈 序文

Ruby Library twitterlandでTweetMemeのAPIを叩いてみた

 tweetmemeは素晴らしいサービスですね。
tweetmemeとはあるURLに関して、Twitterで何回つぶやかれているか教えてくれるサービスです。
TweetMeme Sunset


 今回、javascriptではなくRubyでライブラリのtwitterlandからtweetmemeのAPIを叩いてみました。
日本語、英語両方ともGoogleでもあまりHITしなかったので知らない方が結構いるかなと。
まぁ、つい10分前に出来たので穴があると思います。
もっとこうしたら良いよ!ってあったら教えてください。


 んで、とりあえずjavascriptから。
ブログとかに数字とグリーンの[retweet]ボタンを見た事がある方もいると思います。
あれ、javascriptで簡単に貼れるんですよ。

<div id="tweetmeme"> 
	<script type="text/javascript"> 
		tweetmeme_style = 'compact';
		tweetmeme_service = 'bit.ly';
		tweetmeme_url = 'http://www.example.com';
		tweetmeme_source = '';
	</script> 
	<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script> 
<div> 

こんな感じ。


 ただ、1pageに20個とか30個とか表示したい場合は重い!重すぎる!
そんな訳で、RubyでmemeのAPI叩こうと調べました。
TweetMeme Sunset


 ふむふむ、なんて読んでいたら
TweetMeme Sunset
File: README — Documentation for squeejee/twitterland (master)
ライブラリ発見!
ktkrって事で早速

$sudo gem install twitterland

========================================================================

           Thanks for installing Gemcutter! You can now run:

    gem push          publish your gems for the world to use and enjoy
    gem owner         allow/disallow others to push to your gems
    gem webhook       register urls to be pinged when gems are pushed

========================================================================

When you HTTParty, you must party hard!
Successfully installed json_pure-1.2.0
Successfully installed rubyforge-2.0.3
Successfully installed gemcutter-0.3.0
Successfully installed hoe-2.5.0
Successfully installed mash-0.0.3
Successfully installed crack-0.1.4
Successfully installed httparty-0.4.3
Successfully installed twitterland-0.4.3
8 gems installed
Installing ri documentation for json_pure-1.2.0...
Installing ri documentation for rubyforge-2.0.3...
Installing ri documentation for gemcutter-0.3.0...
Installing ri documentation for hoe-2.5.0...
Installing ri documentation for mash-0.0.3...
Installing ri documentation for crack-0.1.4...
Installing ri documentation for httparty-0.4.3...
Installing ri documentation for twitterland-0.4.3...
Installing RDoc documentation for json_pure-1.2.0...
Installing RDoc documentation for rubyforge-2.0.3...
Installing RDoc documentation for gemcutter-0.3.0...
Installing RDoc documentation for hoe-2.5.0...
Installing RDoc documentation for mash-0.0.3...
Installing RDoc documentation for crack-0.1.4...
Installing RDoc documentation for httparty-0.4.3...
Installing RDoc documentation for twitterland-0.4.3...

何事もなくインストール成功。わーい。


 んで、requireでちょっと躓きました。

require 'rubygems'
require 'twitterland'
(以下省略)

これで実行すると

$ ruby testMeme.rb

/usr/lib/ruby/1.8/rubygems.rb:827:in `report_activate_error': RubyGem version error: httparty(0.4.3 not = 0.4.5) (Gem::LoadError)
        from /usr/lib/ruby/1.8/rubygems.rb:261:in `activate'
        from /usr/lib/ruby/1.8/rubygems.rb:68:in `gem'
        from /var/lib/gems/1.8/gems/twitterland-0.4.3/lib/twitterland.rb:7
        from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
        from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require'
        from testMeme.rb:4

依存関係にあるhttpartyというライブラリのversionが0.4.5じゃねぇ!と怒られました(´・ω・`)ショボン
現在は0.5.0が最新なのでversion指定してインストールしてやります。

$ sudo gem uninstall httparty
$ sudo gem install httparty --version 0.4.5
$ ruby testMeme.rb

/usr/lib/ruby/1.8/rubygems.rb:827:in `report_activate_error': RubyGem version error: httparty(0.4.3 not = 0.4.5) (Gem::LoadError)
        from /usr/lib/ruby/1.8/rubygems.rb:261:in `activate'
        from /usr/lib/ruby/1.8/rubygems.rb:68:in `gem'
        from /var/lib/gems/1.8/gems/twitterland-0.4.3/lib/twitterland.rb:7
        from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
        from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require'
        from testMeme.rb:4

依存関係にあるhttpartyというライブラリのversionが0.4.3じゃねぇ!と怒られました(´・ω・`)ショボン
・・・ふ・ざ・け・る・な!w


 twitterlandというライブラリの情報自体が日英共に非常に少なく、この情報は全くグーグル先生も教えてくれませんでした。
なので、
/var/lib/gems/1.8/gems/twitterland-0.4.3/lib/twitterland.rb
を直接修正しました。
gemでインストールすると一緒にhttpartyの0.4.3がインストールされる癖に

gem 'httparty', '0.4.5'
require 'httparty'

なんて呼び出しをしていたので、0.4.3に修正。
エラーが消えてくれました。ヤッタネ!
なんか問題あったら教えてください。


 んで、

meme = Twitterland::TweetMeme.url_info("http://www.example.com")

これでCoreAPIを叩けました。
MashClassとして返って来ます。

p meme

で中身を見ると

<Mash status="success" story=<Mash comment_count="0" created_at="2010-01-09 04:12:07" excerpt="\343\203\217\343\203\240\343\202\271\343\202\277\343\203\274\351\200\237\345\240\261 : \343\201\244\343\201\204\343\201\253\346\210\221\343\201\214\345\256\266\343\201\256\343\201\212\351\242\250\345\221\202\343\201\214\343\201\204\343\201\204\343\201\256\343\201\253\343\201\252\343\202\213 http://hamusoku.com/archives/2217169.html" media_type="news" title="\343\201\244\343\201\204\343\201\253\346\210\221\343\201\214\345\256\266\343\201\256\343\201\212\351\242\250\345\221\202\343\201\214\343\201\204\343\201\204\343\201\256\343\201\253\343\201\252\343\202\213:\343\203\217\343\203\240\343\202\271\343\202\277\343\203\274\351\200\237\345\240\261" tm_link="http://tweetmeme.com/story/425003970" url="http://hamusoku.com/archives/2217169.html" url_count=8>>

こんな中身みたいです。
詳しい使い方は上のLinkから見てくださいねー。


 まだ実装していませんが、自分が開発・運営中の
現役主婦が保険見直しについて勉強しながら作るサイト
ここで実装する予定です。
3連休中にはやってしまいますので、出来たらまた追記します。
(今なら、20個memeボタンを何も考えずに、阿呆みたいにただポンッと置いてあるので重さを実感できますw)


んじゃ!