Twitterに参加している人を探すのが面倒だったので、OPMLからTwitterに参加している人を探すスクリプトを作ってみました。Twitterに参加してみたはいいけどaddする人がいなくてorzになってる人向け。
Atom対応のためにRSS Parser 0.1.8が必要です。あとlivedoor ReaderのOPMLしか確認してません。探し方もtwitter.comを含む文字列を探すだけなので、単に言及しているだけの場合も含まれてしまいます。逆にTwitterのブログパーツを使わずに単にリンクしてる人も探せるのでこれはこれでいいかと。エラー処理も単に無視してるだけなので適当です。
書いて実行し終わってからマルチスレッド対応にすれば速くなることに気付いた…orz
#!/usr/bin/ruby
require 'open-uri'
require 'rss'
require 'rexml/document'
opml = REXML::Document.new File::new('export.xml')
xmlurl_ary = []
opml.elements.each("/opml/body/outline/outline") {|e|
if e.attributes["xmlUrl"] then
xmlurl_ary.push(e.attributes["xmlUrl"])
end
}
opml.elements.each("/opml/body/outline/outline/outline") {|e|
if e.attributes["xmlUrl"] then
xmlurl_ary.push(e.attributes["xmlUrl"])
end
}
xmlurl_ary.each {|xmlurl|
puts "RSS/Atom URL: #{xmlurl}"
open(xmlurl) {|f|
rss = RSS::Parser.parse(f.read, false)
case rss
when RSS::Rss
link = rss.channel.link rescue nil
latest_entry = rss.channel.item.link rescue nil
when RSS::RDF
link = rss.channel.link rescue nil
latest_entry = rss.item.link rescue nil
when RSS::Atom::Feed
link = rss.links.find {|l| l.rel = "alternate"}.href rescue nil
latest_entry = rss.entry.link.href rescue nil
end
if link then
puts "Link: #{link}"
open(link) {|f2|
str = f2.read
if str.include?("twitter.com") then
puts "Found: twitter.com"
end
}
end
if latest_entry then
puts "Latest Entry: #{link}"
open(latest_entry) {|f2|
str = f2.read
if str.include?("twitter.com") then
puts "Found: twitter.com"
end
}
end
} rescue nil
}
結果は、1161件中69件になりました。単に言及してるだけの人も含むので実際はこれより少ないと思いますが、意外と多いという印象です。
Leave a Reply