followerの情報をcsvに書き出すだけの簡単なお仕事です-改
先日作成した、followerの情報をcsvに出力するRubyスクリプト 、twitterのレイアウト変更でちゃんと動かなくなってしまったので、手をいれてみました。
----
require 'rubygems'
require 'hpricot'
require 'net/http'
Net::HTTP.version_1_2
max_page = 20
account = 'account'
password = 'password'
printf("\"screen_name\",\"Name\",\"Location\",\"Web\",\"Bio\"\n")
i = 1
while i<max_page
followers_path = '/followers?page='+i.to_s
followers_req = Net::HTTP::Get.new(followers_path)
followers_req.basic_auth account, password
Net::HTTP.start('twitter.com'){|http|
followers_body = http.request(followers_req).body
followers_doc = Hpricot(followers_body)
followers_doc.search('strong').each{|strong|
printf("\"%s\"", strong.at('a').inner_text)
next_row = 1
user_path = '/'+strong.at('a').inner_text
user_req = Net::HTTP::Get.new(user_path)
user_req.basic_auth account, password
user_body = http.request(user_req).body
user_doc = Hpricot(user_body)
user_doc.at('address').at('ul').search('li').each{|li|
if li.search('span')[0].inner_text == "Name" then
printf(",\"%s\"", li.search('span')[1].inner_text)
next_row = 2
end
if li.search('span')[0].inner_text == "Location" then
while next_row<2
printf(",")
next_row+=1
end
printf(",\"%s\"", li.search('span')[1].inner_text)
next_row = 3
end
if li.search('span')[0].inner_text == "Web" then
while next_row<3
printf(",")
next_row+=1
end
printf(",\"%s\"", li.at('a')['href'])
next_row = 4
end
if li.search('span')[0].inner_text == "Bio" then
while next_row<4
printf(",")
next_row+=1
end
printf(",\"%s\"", li.search('span')[1].inner_text)
end
}
printf("\n")
}
}
i+=1
end
----
htmlを取得してそれをパースしているため、あいかわらず時間がかかります。
さきほど僕のfollower 142人の情報を吐くのに、7分ほどかかりました。
LocationとかWebとかの記述がみつからない場合は、空列を出すようにしました。
また、各項目をダブルコーテーションで囲んで出力するようにしたので、中にカンマが入っていても、それなりのビューワでみればずれないでしょう。
| 固定リンク
「twitter」カテゴリの記事
- ふぁぼカウンター(2009.06.28)
- あの人にふぁぼられたい!(2009.06.21)
- 台北でもカレーは幸福!(2008.12.13)
- twitterのFavoritesをローカルにcsv形式で書き出すスクリプト-改(2008.06.29)
- 日本の救助隊はこのように行動した (2008.05.19)

コメント