はじめに
earthquake.gem は Ruby で書かれた超高機能な CUI ベースの Twitter クライアントです。
いろんなプラグインが公開されていて plugin フォルダにぶっこむだけで試すことができます。
今回はその中の一つの favstar プラグインを改造してみました。
ダウンロード
スクレイピングするのに Nokogiri が必要なので入ってない場合は入れて下さい。
gem install nokogiri
Nokogiri については以下のサイトを参考にさせてもらいました。
ソースコード
# -*- coding: utf-8 -*- # favstar / earthquakge.gem plugin # # e.g. :favstar #=> your favstar # :favstar who #=> who's favstar # require 'rss' require 'open-uri' require 'nokogiri' Earthquake.init do command %r|^:favstar\s*(.+)*|, :as => :favstar do |m| user = m[1] || twitter.info["screen_name"] mark_color = config[:colors].sample + 10 url = "http://favstar.fm/users/#{user}/rss" feed = RSS::Parser.parse(open(url){|f| f.read}, false) feed.items.reverse.each{|item| status_id = item.link.gsub(/^.+\/([\d]+?)$/, "\\1") star,text = item.title.gsub(/\r?\n/," ").scan(/^(\d+)\s+stars?:\s(.+)$/).flatten pub_date = item.pubDate.strftime("%d %B %H:%M") html = Nokogiri::HTML(open(item.link)) favs = "" rts = "" html.css("div[id^='faved_by'] a.avatar").each{|a| fav_user = a.attribute("title").text favs << "#{fav_user} ".c(color_of(fav_user)) } html.css("div[id^='rt_by'] a.avatar").each{|a| rt_user = a.attribute("title").text rts << "#{rt_user} ".c(color_of(rt_user)) } puts "%s%s %s %s %s %s %s%s" % [ ' '.c(mark_color), "[#{id2var(status_id.to_i)}]".c(:info), "#{user.c(color_of(user))}:", text, "#{star.c(:notice)} favs", pub_date.c(:info), (favs != "") ? "Faved by ".c(:info) + favs : " ", (rts != "") ? "RT by ".c(:info) + rts : "" ] } end end
1個ずつ見てるんで重いです。RSS経由しないで元のページ見たほうが多分速いです。誰か書いて下さい。