hatena VS ココログ


テキストファイルからキーワードを逐次読み込んでBulkfeedsで検索して,引っかかったサイトのドメインの統計をとるみたいなプログラムを書くのはそう難しくないので誰かやって.

こういうことを書いてはいかんなあ
気になって,作っちゃったじゃないか(笑)

require 'net/http'
require "cgi"
require "rexml/sax2parser"
require 'uri'

def getUserName(s)
uri = URI.parse(s)
path = uri.path
user = path[/^\/[A-Za-z0-9_\~]+\//]
end


Net::HTTP.start( 'bulkfeeds.net', 80 ) {|http|
while line = ARGF.gets
hatena = {}
nifty = {}
token = CGI.escape(line.chomp)
response = http.get("/app/search2.rdf?q=#{token}")
xml = response.body
parser = REXML::SAX2Parser.new(xml)
parser.listen(:start_element) do |uri,local,qname,attr|
if local == "item" then
uri = attr["rdf:about"]
if uri.include? "hatena" then
hatena[getUserName(uri)] = true
end
if uri.include? "nifty" then
nifty[getUserName(uri)] = true
end
# print uri,"\n"
end
end
parser.parse
print %Q(keyword = "#{line.chomp}" hatena = #{hatena.size} nifty = #{nifty.size}\n)
end
}

hatenaではインデントがうまく再現できないのは困ったものだ

追記
preを使えばよいのでした

使い方

適当なテキストファイルにUTF-8でこんなふうに書く


xml
java
ruby
perl
SOAP
Jakarta
実行

ruby -Ku bulkfeeds.rb xml.txt

実行結果はこんな感じになる


keyword = "xml" hatena = 2 nifty = 0
keyword = "java" hatena = 2 nifty = 2
keyword = "ruby" hatena = 3 nifty = 1
keyword = "perl" hatena = 1 nifty = 3
keyword = "SOAP" hatena = 1 nifty = 2
keyword = "Jakarta" hatena = 5 nifty = 1
keyword = "struts" hatena = 8 nifty = 2
keyword = "EJB" hatena = 9 nifty = 0
keyword = "ベガルタ仙台" hatena = 5 nifty = 4
keyword = "ジュビロ磐田" hatena = 3 nifty = 7
keyword = "鹿島アントラーズ" hatena = 4 nifty = 3
keyword = "清水エスパルス" hatena = 5 nifty = 5
keyword = "ATOM" hatena = 1 nifty = 1
keyword = "RSS" hatena = 1 nifty = 2
keyword = "Bulkfeeds" hatena = 3 nifty = 2
keyword = "RDF" hatena = 2 nifty = 1
ココログに持っていた幾つかの偏見は払拭されたようである.
言語ネタはほぼ互角,しかしjava関連技術では圧勝だなhatena.
サッカーネタもほぼ互角か,でもJ1なんか僕の知ったことじゃないからいいのだ.
blog関連技術は同程度だね.
客観的かつ用例なネタが出たところで満足していただけましたでしょうか?
ソースは公開していますのでこの続きは皆様でどうぞ.

[permalink][contents][page top]