統計 - PageRank, Traffic Rank, etc.

 

サイトの統計情報を取得する Ruby スクリプトです。

取得項目 データソース 取得方法
Web Scouter Web Scouter scrAPI (スクレイピング)
Feed 人気度 feed meter scrAPI (スクレイピング)
Feed 発行部数 FeedBurner API (デベロッパーAPI
PageRank Google API (Google Toolbar を模倣)
Blog Ranking Technorati API (Technorati API
Traffic Rank Alexa API (Alexa Toolbar を模倣)

Web Scouter

ソースコード

webscouter.rb
#!/usr/bin/ruby -Ku

require 'rubygems'
require 'scrapi'

site = URI.encode('http://diaspar.jp/')
uri  = URI.parse("http://ja.webscouter.net/info.phtml?u=#{site}")

scraper = Scraper.define {
    process 'span.rank', :rank => :text
    result :rank
}

puts scraper.scrape(uri).gsub(%r|,|, '')

実行結果

$ ruby --version
ruby 1.8.5 (2006-08-25) [i386-linux]
$ chmod 744 webscouter.rb
$ ./webscouter.rb
7510

Feed 人気度

ソースコード

feedmeter.rb
#!/usr/bin/ruby -Ku

require 'rubygems'
require 'scrapi'

feed = URI.encode('http://feeds.feedburner.jp/DiasparJournal')
uri  = URI.parse("http://feedmeter.net/detail.php?r=#{feed}")

scraper = Scraper.define {
    process '.leftcontentcolumn>.leftsitetable>:nth-child(2)>:nth-child(2)', :rating => :text
    result :rating
}

puts scraper.scrape(uri)

実行結果

$ ruby --version
ruby 1.8.5 (2006-08-25) [i386-linux]
$ chmod 744 feedmeter.rb
$ ./feedmeter.rb
1.5

Feed 発行部数

デベロッパーAPI では、認証を使用する方法と使用しない方法のどちらかを選択できます。

認証を使用する場合は「HTTP Parameter Authentication」もしくは「HTTP基本認証」を選択できますが、 どちらもパスワードが漏洩しやすいと考えます。 そのため、認証を使用しない方法を採用することにしました。

認証を使用しない場合は「集客支援」→「フィード・カウント」でサービスを有効に設定します。 そうすると、Feed 発行部数を取得する際に認証が不要になります。 その代わりに、Feed 発行部数の取得を誰にでも許してしまいます。

Feed を特定するために Feed ID を使用します。 Feed ID は「レポート」ページを表示してから、ブラウザの URL 欄で id(CGI パラメータ)を確認します。

ソースコード

feedburner.rb
#!/usr/bin/ruby -Ku

require 'net/http'
require 'rexml/document'

Net::HTTP.version_1_2

id   = 0000

host = 'api.feedburner.jp'
path = "/awareness/1.0/GetFeedData?id=#{id}"

body = Net::HTTP.start(host, 80).get(path).body
doc  = REXML::Document.new(body)

puts doc.elements['rsp/feed/entry'].attributes['circulation']

実行結果

$ ruby --version
ruby 1.8.5 (2006-08-25) [i386-linux]
$ chmod 744 feedburner.rb
$ ./feedburner.rb
168

PageRank

PageRank を取得するにはチェックサム値が必要ですが、計算はそれほど簡単ではありません。 サイトのトップページのチェックサム値を取得するには、次のようにするのが手っ取り早いです。

Firefox に Google Toolbar と Live HTTP headers をインストールします。 次に、メニューバーから「ツール」→「Live HTTP headers」を選択します。 この状態でサイトのトップページを表示すると「http://toolbarqueries.google.co.jp/」で始まる行が表示されます。 この行の ch(CGI パラメータ)がチェックサム値です。

ソースコード

pagerank.rb
#!/usr/bin/ruby -Ku

require 'net/http'

Net::HTTP.version_1_2

page = URI.encode('http://diaspar.jp/')
ch   = 'abcd12345'

host = 'toolbarqueries.google.co.jp'
path = "/search",
       "?sourceid=navclient-ff",
       "&features=Rank",
       "&client=navclient-auto-ff",
#      "&googleip=O;66.249.89.104;250",
       "&ch=#{ch}",
       "&q=info:#{page}"

body = Net::HTTP.start(host, 80).get(path).body
puts body.chomp.scan(%r|^Rank_.:.:(.)$|).to_s

実行結果

$ ruby --version
ruby 1.8.5 (2006-08-25) [i386-linux]
$ chmod 744 pagerank.rb
$ ./pagerank.rb
3

チェックサム値を自前で計算したいのであれば、 Google PageRank (ruby script/class) から入手できる gprank.rb が参考になるでしょう。 このスクリプトを実行すると、次のような結果が得られます。

実行結果

$ ruby --version
ruby 1.8.5 (2006-08-25) [i386-linux]
$ chmod 744 gprank.rb
$ ./gprank.rb -u http://diaspar.jp/
PageRank: 3 : http://diaspar.jp/
$ ./gprank.rb -u http://www.yahoo.co.jp/
PageRank: 8 : http://www.yahoo.co.jp/

Blog Ranking

API を使用するには API Key が必要です。 API Key は、 Technorati にログインしてから、 Technorati: API Key にアクセスすると表示されます。

ソースコード

blogranking.rb
#!/usr/bin/ruby -Ku

require 'net/http'
require 'rexml/document'

Net::HTTP.version_1_2

site = URI.parse('http://diaspar.jp/').host
key  = '0123456789abcdef0123456789abcdef'

host = 'api.technorati.com'
path = "/bloginfo?key=#{key}&url=#{site}"

body = Net::HTTP.start(host, 80).get(path).body
doc  = REXML::Document.new(body)

puts doc.elements['tapi/document/result/weblog/rank'].text

実行結果

$ ruby --version
ruby 1.8.5 (2006-08-25) [i386-linux]
$ chmod 744 blogranking.rb
$ ./blogranking.rb
75935

Traffic Rank

ソースコード

trafficrank.rb
#!/usr/bin/ruby -Ku

require 'net/http'
require 'rexml/document'

Net::HTTP.version_1_2

site = URI.encode('http://diaspar.jp/')

host = 'data.alexa.com'
path = "/data/?cli=10&dat=snba&url=#{site}"

body = Net::HTTP.start(host, 80).get(path).body
doc  = REXML::Document.new(body)

puts doc.elements['ALEXA/SD/POPULARITY'].attributes['TEXT']

実行結果

$ ruby --version
ruby 1.8.5 (2006-08-25) [i386-linux]
$ chmod 744 trafficrank.rb
$ ./trafficrank.rb
299223

更新履歴

日付 内容
2007-03-10 変更 サイトの合計ブックマーク数の取得を、 ブックマーク数 - はてなブックマークブックマーク数 - del.icio.usブックマーク数 - livedoor clip のそれぞれへ移動
2007-01-11 追加Web Scouter, Feed 人気度
2006-12-09 初版