ふぁぼカウンター
| 固定リンク | コメント (0) | トラックバック (0)
あいかわらず ふぁぼったー が面白いです。
各ユーザーのふぁぼりページをみていると、その人の性癖がみえてくるような気がします。
Yahoo!提供のWeb APIに、
「日本語文を解析し、特徴的な表現(キーフレーズ)を抽出」する キーフレーズ抽出 というのがあったので、
ふぁぼってる発言のキーフレーズを集計してみるスクリプト
をつくってみました。
使い方:
スクリプト中のYahooApiIdをあなたが取得したYahoo!のアプリケーションIDに書き換えてから実行してください。
第一引数にふぁぼりを集計したいtwitterのユーザーID、
第二引数にふぁぼりページを何ページまで遡るかを指定してください。
第二引数を省略した場合は10ページ遡ります。
第一引数も省略した場合は yasu_kobayashi になります。
標準出力に出力しますので、ファイルにリダイレクトするといいでしょう。
yasu_kobayashiのふぁぼり10ページ分集計した 結果 はこうなりました。
「殿がネコをなでながらカレー食べてる!」とかいうと僕にふぁぼられそうです。
このスクリプトの作成には、以下の記事を参考にしました。
Rubyはじめました4:RubyでYahoo!検索APIを使って検索結果を表示してみる
| 固定リンク | コメント (0) | トラックバック (0)
休暇がとれたので、台北に旅行に行こっかなー、と思い、
twitterでそう呟いたところ、
@taipeideer : 歡迎歡迎啊!!咖哩推薦店
( http://www.taiwanfun.com/north/taipei/dining/0808/0808CurryChampTW.htm )
と教えてもらったので、行ってきました。
Curry Comboだったかな?
左にかかっているのがビーフカレーで右がチキンカレーです。
もし近所にあったら週一で通いたくなるような店でした。
| 固定リンク | コメント (0) | トラックバック (0)
twitterのFavoritesをローカルにcsv形式で書き出すスクリプト を、改修しました。
使い方:
第一引数にあなたのtwitterのusername、
第二引数にパスワード、
第三引数に Favoritesページを何ページまで遡るかを指定してください。
第三引数を省略した場合は1000ページ(20000発言分)遡ります。
標準出力にcsvを吐きますので、
ファイルにリダイレクトするといいでしょう。
Rubyの入ってないWindowsを使っている人のために、
rubyscript2exeで変換したもの
も置いておきます。
| 固定リンク | コメント (0) | トラックバック (0)
四川の地震の報道をみていると、落涙を禁じえません。
twitterをみていると、こんなブログのURLが流れてきました。
http://www.mindmeters.com/showlog.asp?log_id=7424
文章をざっと日本語訳してみます。
----
日本の救助隊はこのように行動した
日本の救助隊は16日の早朝二時に成都国際空港に到着し、
ただちに災害現場に向かった。
夕方から徹夜で救助を行い。
17日の朝7時20分に二人の遺体を発見した。
一人は28歳の女性で、
二ヶ月の子供を抱いていた。
遺体を発見した後に、
全ての救助隊員が二列を作り、
遺体に黙祷をささげた後に敬礼をした。
日本の救助隊は、このように生命を尊重している。
----
| 固定リンク | コメント (0) | トラックバック (0)
両思い/片思い/片思われチェッカー が出力するhtmlはalt属性がなかったので、
screen_nameを付けるように改良してみました。
スクリプト
rubyscript2exeで変換したもの
| 固定リンク | コメント (0) | トラックバック (1)
hpricotでtwitterをパースしてみるシリーズ。
自分のFollowing/Followersページをパースして、
両思い(followし、かつ、followされている)、
片思い(followしているけど、followされてない)、
片思われ(followされてるけど、followしてない)を、
それぞれ一覧して、
一枚のhtmlに書き出す Rubyスクリプト
をかいてみました。
# 似たようなWebサービスをどっかでみたような気もするのですが、
# 凄く遅かったので・・・・・・
使い方:
第一引数にあなたのtwitterのusername、
第二引数にパスワード、
第三引数にFollowing/Followersページを何ページまで遡るかを指定してください。
第三引数の20倍がFollowing/Followersの多い方より小さいと、正しい結果になりません。
第三引数を省略した場合は50ページ(1000人分)遡ります。
標準出力にhtmlを吐きますので、
ファイルにリダイレクトするといいでしょう。
twitterが重かったりしてページの取得に失敗すると、
正しい結果にならなかったりするかもしれないので、
removeされた!とか思う前に再確認したほうが賢いでしょう。
Rubyの入ってないWindowsを使っている人のために、
rubyscript2exeで変換したもの
も置いておきます。
| 固定リンク | コメント (0) | トラックバック (0)
hpricotでtwitterをパースしてみるシリーズ。
twitterで片思いfollowしていた人がProtectに設定を変更すると、
自分のRecentに、
"I'm only giving updates to friends. Add me."
とかいう表示になります。
ウザいのでremoveしたくても、
その人のhomeからはremoveすることができず、
自分のFollowingページからしかremoveできません。
しかし、
Followingページはソートされていないので、
removeしたい人が何ページ目にあるのか、
探すのが面倒です。
そんな動機から、
それぞれの人がFollowingの何ページにあるのか一枚のhtmlに書き出すRubyスクリプト
を書いてみました。
使い方:
第一引数にあなたのtwitterのusername、
第二引数にパスワード、
第三引数にFollowingページを何ページまで遡るかを指定してください。
第三引数を省略した場合は50ページ(1000人分)遡ります。
標準出力にHTMLを吐きますので、
ファイルにリダイレクトするといいでしょう。
このスクリプトを使って作った、
現時点で僕がfollowしている人一覧
を晒しておきます。
Rubyの入ってないWindowsを使っている人のために、
rubyscript2exeで変換したもの
も置いておきます。
| 固定リンク | コメント (0) | トラックバック (0)
ξ゚⊿゚)ξ<APIがないならHTMLをパースすればいいじゃない?
・・・と、いうことで、
hpricotでふぁぼったーをパースしてみるシリーズ。
ふぁぼったーの新着ページ を遡って、
ふぁぼっている回数、ふぁぼられている回数を集計し、
ランキングをHTMLに書き出す 「ふぁぼったーランキング」作成スクリプト
を作りました。
名称は、もちろん、 ついったーランキング へのリスペクトです。
使い方:
第一引数に遡るページ数を指定してください。
引数を省略した場合は10ページ遡ります。
標準出力にHTMLを吐きますので、
ファイルにリダイレクトするといいでしょう。
使用例:
C:\work>ruby favran.rb 20 > tmp.html
さきほどの時点(最終クロールが「2008/02/09/ 23:02:23」)で、
100ページほど遡って( 一番古い発言が「2008/02/08/ 03:59:01」)集計してみた結果が、
これ
です。
rubyscript2exeで変換したもの も置いておきます。
| 固定リンク | コメント (0) | トラックバック (0)
ふぁぼられグラフ作成スクリプト を、
Rubyの入ってないWindowsでも使えるように、
rubyscript2exeを使ってCUIアプリにしてみました。
使い方:
コマンドプロンプトで実行してください。
第一引数にtwitterのscreen_name、
第二引数にふぁぼったーを何ページ遡って集計するかを指定してください。
第二引数を省略した場合は20ページ遡ります。
標準出力にふぁぼられグラフを吐きますので、
ファイルにリダイレクトするといいでしょう。
使用例:
C:\work>favogra.exe yasu_kobayashi 10 > tmp.html
| 固定リンク | コメント (0) | トラックバック (0)
ふぁぼられ集計 を改良して、
アイコンを並べたグラフっぽいHTMLに書き出すようにしてみました。
----
require 'rubygems'
require 'hpricot'
require 'net/http'
Net::HTTP.version_1_2
# const
Address = 'favotter.matope.com'
Path1 = '/user.php?user='
Path2 = '&mode=new&page='
TwitterAddress = 'http://twitter.com/'
if ARGV.length == 0 then
printf("usage: ruby favogra.rb account [max_page]\n")
exit
end
if ARGV.length < 2 then
max_page = 20
else
max_page = ARGV[1].to_i
end
counter = {}
counter.default=0
img_src = {}
# parse
path = Path1+ARGV[0]+Path2
i = 1
skip_flag = false
while i<max_page
path = Path1+ARGV[0]+Path2+i.to_s
Net::HTTP.start(Address){|http|
response = http.request_get(path)
body = response.body
doc = Hpricot(body)
doc.search("div[@class~='info']").each{|div|
# skip
if skip_flag == false then
div.search('img').each{|img|
counter[img['title']]+=1
img_src[img['title']]=img['src']
}
else
skip_flag = false
end
}
}
i+=1
skip_flag = true
end
# output
printf("<HTML>\n")
printf("<HEAD>\n")
printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n")
printf("<TITLE>%s fav by</TITLE>\n", ARGV[0])
printf("</HEAD>\n")
printf("<BODY>\n")
counter.to_a.sort{|a, b| b[1]<=>a[1] or b[0]<=>a[0]}.each{|a|
printf("<P>")
i = 0
while i<a[1]
printf("<A HREF=\"%s\"><IMG SRC=\"%s\" ALT=\"%s\"></IMG></A>\n", TwitterAddress+a[0], img_src[a[0]], a[0])
i+=1
end
printf("</P>")
}
printf("</BODY>\n")
printf("</HTML>\n")
----
サンプルとして、 現時点での僕のふぁぼられグラフ を載せておきます。
| 固定リンク | コメント (0) | トラックバック (0)
ono_matope さんの作られた ふぁぼったー が面白いです。
API公開等はないようですので、
hpricotでふぁぼったーをパースしてみました。
とりあえず、
特定のアカウントの発言が誰に何回favられているか集計するものを作ってみました。
他にもイロイロできそうな気がします。
----
require 'rubygems'
require 'hpricot'
require 'net/http'
Net::HTTP.version_1_2
# const
Address = 'favotter.matope.com'
Path1 = '/user.php?user='
Path2 = '&mode=new&page='
if ARGV.length == 0 then
printf("usage: ruby favo.rb account [max_page]\n")
exit
end
if ARGV.length < 2 then
max_page = 20
else
max_page = ARGV[1].to_i
end
counter = {}
counter.default=0
# parse
path = Path1+ARGV[0]+Path2
i = 1
skip_flag = false
while i<max_page
path = Path1+ARGV[0]+Path2+i.to_s
Net::HTTP.start(Address){|http|
response = http.request_get(path)
body = response.body
doc = Hpricot(body)
doc.search("div[@class~='info']").each{|div|
# 2ページ目以降の最初の発言は、前のページの最後と重複しているので、スキップする。
if skip_flag == false then
div.search('img').each{|img|
counter[img['title']]+=1
}
else
skip_flag = false
end
}
}
i+=1
skip_flag = true
end
# output
counter.each{|key, value|
printf("%s, %s\n", key, value)
}
----
現時点で、一番僕の発言をふぁぼってくれたのは KuenFu さんの47個、
次は hatron さんの35個、
その次は katoyuu さんの30個でした。
| 固定リンク | コメント (0) | トラックバック (0)
在twitter上, Edifier 问我。
Edifier : @yasu_kobayashi 帮忙看一下这篇文章真的是不是真的。
http://msn.myspace.cn/t/3452490.html
这篇文章很有意思。
但是,我觉得,文章中的一部分不是真的。
找一般的工作(除了明星,模特,etc...)的话,
外面的美醜没有关系。
大部分的公司要求有能力的人材。
| 固定リンク | コメント (0) | トラックバック (2)
twitterで、 Edifier さんから、この↓文章に書いてあることって本当?と訊かれました。
http://msn.myspace.cn/t/3452490.html
てきとーに日本語訳してみます。
----
私の見た日本と日本の女の子
男が奮闘するべき目標の一つは、日本人の嫁さんをもらうことだといわれているが、
私にはよくわからない。
日本人女性が優しいといっても、
それだけで日本人の嫁さんが人々の目標になるのだろうか?
いったい日本人女性のどこが人を惹きつけるのか?
今回の日本行きで、一つの解答が得られた。
嫁さんをもらうなら日本人。
日本人女性は優しいだけではなく、
世界で最も美しいといわれている。
北京の街で十分に一人の美女をみかけるとしたら、
上海では五分に一人、
バンクーバーでは三分に一人、
そして、日本では、一秒に五人の美女をみかけるというのだ。
日本についた最初の日、兄の提案で、
日本の街のヒトゴミをみにいった。
大阪梅田駅の地下は、
わずか数十平米の中に、
商店、レストラン、娯楽施設がぎっしりと並んでいる。
帰宅ラッシュのピーク時のヒトゴミをみると、
その中には多くのきれいなキャリアウーマンがいた。
これまでは、
日本の女性の多くは家庭にいるものだと思っていた。
また、
日本は老齢化社会だときいていたので、
若い人の割合は少ないと思っていた。
しかし、大阪の中心では、
大勢のおしゃれな若い日本女性が風景の一部になっていたのだ。
日本に行く前は、大陸と北米で会った人たちから、
日本の女性は、背が低くてがに股だという印象を持っていた。
日本に来てみて、そのような偏見は笑うべきものであることを知った。
日本は、戦後、
欧米から外来した人口が増え、異なる人種が混ざり合い、
経済力が向上して生活方式が変わり、食べるものが変わり、
日本人種は改良され続けている。
現代の日本人は、チビ、がに股の代名詞ではなくなり、
街には背の高い男性と女性がみられるようになった。
どうして国外でみる日本の女の子が醜いかわかった。
仕方がないのだ。
醜い女たちは日本国内で生存するのは難しいのだ。
日本は容貌を重視する社会で、
顔がいい人の方が仕事を得る機会に恵まれているのだ。
女の子も、電気製品や車と同様に、
最もよいものは日本国内にとどめるのだ。
現代の日本の女の子のスタイルのよさは、
合理的な日本料理と関係がある。
天性の資質に加えて化粧もうまい。
日本の街中で化粧をしていない女性をみることはなく、
もしいたとしたら宇宙人をみるような目でみられることだろう。
彼女たちは、化粧によって自分の短所を隠して長所をのばし、
服とアクセサリーに対する造詣は非凡である。
科学技術の進歩にともなって、化粧品と服飾も進歩しており、
日本のそれは世界の最先端をいっている。
大陸やカナダから日本旅行に行った若い女性は、
強烈な劣等感を抱いた後に、狂ったように買い物と模倣をはじめる。
私の目は美女を追うのに忙しかった。
しかし、兄は、
大阪は最良の場所ではなく、
最先端の女性は東京にいるのだという。
日本全国、中国、東南アジアから来た労働者と留学生が集まっている東京とは違い、
大阪は歴史が古く日本本土の人が多いので、美女の密度は東京よりも高い。
東京にはよそ者が多いのが、
それが東京にいった人が日本には美女が多くないと思う原因なのだという。
関西に行けば、日本の美女に対するより深い理解が得られる。
一般的に、
東京、大阪、神戸のような大都市には美女が多く、
横浜や奈良には少ない。
大都市の中でも、
地下鉄の駅やショッピングモールが美女をみる機会が多い。
東京でお薦めの場所は、
1.東京駅
交通の中心で、日本と世界の美女が集まる。
美女たちが荷物を持って急いでいる風景をみることができる。
2.銀座
世界最高のブランドショップが集まっている、OLたちのパラダイス。
ここの美女は上品で、ときには高慢であったりする。
3.渋谷、六本木、池袋
Cosmoで化粧した女の子や学生、若い人が多い。
大阪で美女をみるのに最もよいのは、いわゆるダウンタウンで、
北に一つ、南に一つある。
北は梅田で、
新しいショッピングセンターがある。
各ビルの屋上には公園があり、
カップルが多いところである。
当然、美女も多い。
南は難波で、
心斎橋筋商店街には透明の屋根があり、
雨や雪から大阪美女たちを守る。
日本の美女の美しい理由は、
天性や化粧だけではなく、
内面が外観の美しさを押し上げている。
その中には長い時間で培われた文化があり、
外国人が日本で十年以上くらしても学ぶことはできない。
彼女たちは、もの静かで、上品である。
日本は礼儀の国であり、日本の女性は礼儀正しい。
日本では、お客は皇帝であるかのような扱いを受けている、と感じた。
兄がいっていた、日本のサービス業は世界最高だという言葉は、誇張ではなかった。
小さな店でも高級レストランでも、
百円ショップでもデパートでも、
女性店員は最大限に丁寧な待遇をしてくれる。
日本ではどこの店でも美女店員をみることができるが、
彼女たちの美しさは外見だけではなく、内側の教養からくるものである。
大陸でも美女をみることはできるが、
ホワイトカラーの麗人のほとんどは高慢であり、
店員は美女でも問いかけられることさえめんどくさそうな態度をとる。
美しいものは得難い。
兄は日本に十年いるが、日本人の嫁さんをもらうことはできていない。
日本は排外的であり、
「外」とは欧米以外の外国を指す。
現代の日本語で外国人といった場合は、
通常は欧米人のとこであり、
中国人韓国人、東南アジアやその他の国の人は含まれない。
現代の日本女性は独立心が強くなっており、
独身女貴族が多くなってきている。
彼女たちは、高級な場所にショッピングに連れていってくれる結婚相手を求めている。
近頃の日本経済は不景気であり、失業する人も多い。
日本男性にとって、失業は離婚を意味するかもしれない。
一般的な経済力の日本男性では、日本美女を養うことはできない。
深夜の小さな居酒屋でみた仕事帰りの男性たちは、
女性に対する渇望と幻想を語っていた。
彼らにとって、日本の美女は手の届かないものなのだ。
異郷の地で奮闘している中国人である兄によれば、
日本美女と結婚するのは永遠に実現しない夢なのだそうだ。
----
| 固定リンク | コメント (0) | トラックバック (0)
日本では、冬至といえば南瓜ですね。
twitterを眺めていると、
中国の北の方では餃子を、
台湾では湯圓という料理を食べる習慣があるようです。
| 固定リンク | コメント (0) | トラックバック (0)
hpricotでtwitterをパースしてみるシリーズ。
時間を空けてtwitterをみたときに、
followしている人数が多いと、
過去ログをさかのぼって全部みるのはちょっと無理です。
そこで、僕は、
そのときそのときで特に気になっている人が、
自分がみてない間に発言してないかどうかチェックすることにしています。
それを楽にするために、
Twitのお気に入りIDを記録した"Twit.fav"ファイルを標準入力から読み、
標準出力にそれらの人の最新の発言を集めたhtmlを出力するスクリプトを、
書いてみました。
----
require 'rubygems'
require 'hpricot'
require 'net/http'
Net::HTTP.version_1_2
# const
HttpScheme = 'http://'
Address = 'twitter.com'
# arg
account = 'account'
password = 'password''
printf("<HTML>\n")
printf("<HEAD>\n")
printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n")
printf("<TITLE>What they are done ?</TITLE>\n")
printf("</HEAD>\n")
printf("<BODY>\n")
entry_table = []
i = 0
STDIN.each{|line|
entry_table[i] = []
entry_table[i][0] = line.chomp
req = Net::HTTP::Get.new('/'+entry_table[i][0])
req.basic_auth(account, password)
Net::HTTP.start(Address){|http|
body = http.request(req).body
doc = Hpricot(body)
if doc != nil then
if doc.at('h2') != nil then
if doc.at('h2').at('img') != nil then
entry_table[i][1] = doc.at('h2').at('img')['src']
end
end
if doc.at('p.entry-title') != nil then
entry_table[i][2] = doc.at('p.entry-title').inner_text
else
entry_table[i][2] = 'error'
end
if doc.at('abbr') != nil then
entry_table[i][3] = doc.at('abbr')['title']
else
entry_table[i][3] = 'error'
end
end
}
i+=1
}
num = i
entry_table.sort!{|x, y| y[3]<=>x[3]}
i = 0
while i<num
STDOUT.printf("<P><IMG SRC=\"%s\"></IMG>", entry_table[i][1])
STDOUT.printf("<A HREF=\"%s\">%s</A>", HttpScheme+Address+'/'+entry_table[i][0], entry_table[i][0])
STDOUT.printf(" %s ", entry_table[i][3])
STDOUT.printf(" %s </P>\n",entry_table[i][2])
i+=1
end
printf("</BODY>\n")
printf("</HTML>\n")
----
このスクリプトで作った サンプル
をおいておきます。
ちなみに、これはあくまでもサンプルで、
本当の僕のお気に入りIDはもっと多いです。
| 固定リンク | コメント (0) | トラックバック (1)
僕は普段 Twit というtwitterクライアントを使っています。
Twitは非常によくできているのですが、
僕にとって致命的なことに、
中国語が文字化けします。
そのため、
中国語を読んだり書いたりするために、
Firefoxも常時立ち上げています。
os0x さんの作られた Twitter Post Anywhere というGreaseMonkeyを動かしています。
これも非常に便利です。
| 固定リンク | コメント (1) | トラックバック (0)
在twitter上, zhanghao 问我。
zhanghao : @yasu_kobayashi 请问有没有专门介绍日本家庭料理的网站呢?
yasu_kobayashi : 日文的网站可以吗?
zhanghao : 恩,没问题。谢谢
几位热心的日本人twitterer教我信息。
| 固定リンク | コメント (0) | トラックバック (0)
在twitter上,Edifier问我。
Edifier : @yasu_kobayashi问你个事啊。KOSEIDON你看过没?里面的女主角叫村野奈奈美,她是我们这代人小时候的心中偶像。你知道关于她的一些信息吗?请帮我找一下。我找过中文的信息了,非常的少。我想你找日文信息应该比较容易吧。
Edifier : @yasu_kobayashi 对了,KOSEIDON的中文名片叫《恐龙特急克塞号》。主要讲的是时空管理局的事。成员有格乌,特兹等,机器人吉伊等。
Edifier : @yasu_kobayashi 我写了一篇博客是关于对村野奈奈美的回忆。你可以看看。http://tinyurl.com/yvqc9q
孩子的时候,我看过《恐龙特急克塞号》。
据维基百科的说明 ,《恐龙特急克塞号》受到中国的青少年的欢迎。
我找过日文的网站,没找到信息。
我问一个喜欢特摄的朋友,他说不知道。
有人知道村野奈奈美的信息,请教教我。
| 固定リンク | コメント (0) | トラックバック (0)
いつものようにtwitterでダラダラやっていると、
Edifierさんという方からこんな質問を受けました。
Edifier : @yasu_kobayashi问你个事啊。KOSEIDON你看过没?里面的女主角叫村野奈奈美,她是我们这代人小时候的心中偶像。你知道关于她的一些信息吗?请帮我找一下。我找过中文的信息了,非常的少。我想你找日文信息应该比较容易吧。
(ききたいんだけど、KOSEIDONってみたことある?そのヒロインの村野奈奈美は僕らの世代の子供の頃の心のアイドルなんだ。彼女の情報知ってたら教えて。中国の情報を探したけどとても少ないんだ。日本語だったら情報ないかな。)
Edifier : @yasu_kobayashi 我写了一篇博客是关于对村野奈奈美的回忆。你可以看看。http://tinyurl.com/yvqc9q
(村野奈奈美の思い出をブログに書いたからみて)
KOSEIDON・・・「恐竜戦隊コセイドン」か。幼い頃にみた記憶があります。
中国語版のWikipediaの説明 によれば、
80年代に中国で放送されて「青少年の歓迎を受けた」のだそうです。
でも、そこにでていた村野奈々美については、
ちょっとググッた程度では何の情報もでてきません。
コセイドン以外に何かにでていたのかも不明。
誰か、村野奈々美についてご存知の片がいましたら、教えてください。
| 固定リンク | コメント (0) | トラックバック (0)
在twitter上,我跟一位在台湾的人会话。
台湾的人:為什麼日文說騙人的要吞千根針?
yasu_kobayashi :我不知道......
台湾的人:哈哈,那你負責去查....查了來教我們XD
几位热心的twitterer教我信息。
两个日本人做约的时候,使彼此的小指头缠绕的唱一个短的歌;
"指きりげんまん嘘ついたら針千本のます"
"嘘ついたら"是"如果你失约的话"的意思。
"指きり"是"切断小指头"的意思。
"げんまん"是"用拳头打一万次"的意思。
"針千本のます"是"让你吞千根针"的意思。
跟随这个歌,失约的人要切断小指头,被打一万次,吞千根针。
当然,这是一种比喻。绝对禁止失约的意思。
因为没找到这个歌的由来,我的说明不会回答她的疑问。
有人知道由来,请教教我。
| 固定リンク | コメント (0) | トラックバック (1)
自分で必要なRubyスクリプトを書いてみるシリーズ。
twitterのFavoritteページ、後から見直したり検索したりするのには不向きです。
ローカルにとってきてcsvにしとけば、どうとでもできるかなと思って書いてみました。
----
require 'rubygems'
require 'hpricot'
require 'net/http'
Net::HTTP.version_1_2
# const
HttpScheme = 'http://'
Address = 'twitter.com'
Favorite_path = '/favourites?page='
Status_path = '/statuses/'
# arg
account = 'account'
password = 'password'
target = 'account'
max_page = 30
i = 1
while i<max_page
path = '/'+target+Favorite_path+i.to_s
req = Net::HTTP::Get.new(path)
req.basic_auth(account, password)
Net::HTTP.start(Address){|http|
body = http.request(req).body
doc = Hpricot(body)
table = doc.at('table')
if table != nil then
table.search('tr').each{|tr|
id = tr['id']
id.gsub!(/status_/, '')
screen_name = tr.search('td')[1].at('strong').at('a').inner_text
content = tr.search('td')[1].at('span').inner_text
content.gsub!(/\n/, '')
content.gsub!(/\t/, '')
published = tr.search('td')[1].search('abbr')[0]['title']
url = HttpScheme + Address + '/' + screen_name + Status_path + id
printf("\"%s\",\"%s\",\"%s\",\"%s\"\n", screen_name, content, published, url)
}
end
}
i+=1
end
----
| 固定リンク | コメント (4) | トラックバック (3)
先日作成した、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とかの記述がみつからない場合は、空列を出すようにしました。
また、各項目をダブルコーテーションで囲んで出力するようにしたので、中にカンマが入っていても、それなりのビューワでみればずれないでしょう。
| 固定リンク | コメント (0) | トラックバック (1)
Rubyを使って、followerの情報をcsvに出力するスクリプトを書いてみました。
--------
require 'rubygems'
require 'hpricot'
require 'net/http'
Net::HTTP.version_1_2
max_page = 20
account = 'account
password = 'password
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)
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.inner_text =~ /^Name/ then
printf("%s,", li.at('span').inner_text)
end
if li.inner_text =~ /^Bio/ then
printf("%s,", li.at('span').inner_text)
end
if li.inner_text =~ /^Location/ then
printf("%s,", li.at('span').inner_text)
end
if li.inner_text =~ /^Web/ then
printf("%s,", li.at('a')['href'])
end
if li.inner_text =~ /^Joined/ then
printf("%s", li.inner_text)
end
}
printf("\n")
}
}
i+=1
end
--------
最初はtwitter API経由で取得しようとしたのですが、
という、二つの理由から、
htmlを取得してそれをパースするようにしました。
そのため、すさまじく時間がかかります。
人によってはBioとかLocationとかWebの項目がない人がいたりとかしますし、
inner_textの中にカンマが含まれていた場合にどうにかする処理をいれた方がいいような気もします。
| 固定リンク | コメント (0) | トラックバック (2)
数ヶ月前にtwitterをはじめたのですが、実に面白いですね。
仕事をしているときと寝ているとき以外は、ずっとみているような感じです。
僕のfollower(発言をみてくれている人)は大半が日本人ですが、
台湾、香港、中華人民共和国、マレーシアの方もいて、
イロイロと面白い話をきくことができます。
| 固定リンク | コメント (0) | トラックバック (0)