Futile Hope

2008-02-24

個人ニュースサイトの被はてなアンテナ数をRubyで計測してみた

| 01:05

Rails個人ニュースサイトまとめサイトを作ってみようと思ったが、Parallels2さんのリンク切れてないサイトだけでも661サイトもあってカテゴリー分けしてる途中で萎えた。主に取り扱っているものが何なのかなんてぱっと見ただけじゃわからないっす。

ということで、簡単に調査が出来そうな被はてなアンテナ数から攻めて見ることにした。

結果*1

順位サイト名アンテナ
1位ミュージックマシーン4937
2位カトゆー家断絶4833
3位X51.ORG4425
4位アキバBlog(秋葉原ブログ)2671
5位朝目新聞-asame.com2478
6位変人窟2457
7位楽画喜堂2309
8位【2ch】ニュー速クオリティ-VIP-2261
9位ゴルゴ312227
10位イミフwwwうはwwwwおkwwww2114
11位(・∀・)イイ・アクセス1962
12位海外ボツ!News1926
13位ザイーガ1814
14位セキュリティホール memo1733
15位Narinari.com1686
16位pya!1673
17位音楽配信メモ1670
18位everything is gone1512
19位情報考学 Passion For The Future1487
20位TBN1484
21位日刊スレッドガイド1439
22位放蕩オペラハウス1373
23位RinRin王国1371
24位萌えミシュラン1367
25位:::::HK-DMZ PLUS.COM:::::1279
26位▼TS | techside.net1237
27位小心者の杖日記1155
28位BRAINSTORM1138
29位ねたミシュラン1082
30位アルファルファモザイク1076
31位ぁゃιぃ(*゜ー゜)NEWS1016
32位エルエル977
33位面白いサイトを見つけたよ。947
34位好き好き大好きっ911
35位@JOJO896
36位まなめはうす864
37位かーずSP841
38位- BlackAsh -829
39位暗いニュースリンク814
40位★てれびまにあ788
41位「最後通牒・こぼれ話」739
42位三度の飯より。733
43位なんでも評点727
44位hardでloxseな日々683
45位オレンジニュース679
46位連邦670
47位駄文にゅうす661
48位ぬるヲタが斬る645
49位すべらない名無し641
50位ひろぶろ632
51位ブログちゃんねる623
52位ウォッチ!声優板609
53位名前のない部屋598
54位酔拳の王 だんげの方595
55位OnlineSoft VersionUp.info595
56位独り言以外の何か587
57位駿河電力/スク水.jp577
58位◆めっつぉ:スクウェア&デジタルニュース572
59位Goonie!561
60位useWill.com556
61位TricksteR551
62位同人ど〜らく529
63位もみあげチャ〜シュ〜516
64位習慣ベースボール503
65位ハムスター速報 2ろぐ502
66位えんにゅ〜す478
67位Tokyo Fuku-blog462
68位SUZUQ.NET455
69位古今東西製品情報 ― 思いでより、物でしょ。453
70位情報屋さん。442
71位Engadget Japanese441
72位Elastic439
73位From dusk till dawn “三丁偏愛”434
74位Re:戯言430
75位娘。楽宴 - モーニング娘。・ハロプロ・ソニンの応援娯楽サイト426
76位秒刊SUNDAY423
77位REVの日記@はてな419
78位RuputerFan416
79位サポティスタ416
80位小太郎ぶろぐ415
81位[ボ]399
82位今賀堂398
83位I’ve Sound Explorer394
84位萌えプレ389
85位DependSpace383
86位面白ニュース382
87位ugNews.net377
88位イレギュラーエレクトロン358
89位プリキュア様崇拝日記358
90位俺暇358
91位ある編集者の気になるノート357
92位和の心に酔いしれろ356
93位忍之閻魔帳356
94位bogusnews347
95位春屋341
96位Θケータイのアレ337
97位ジャニーズ最新情報。337
98位萌えよ!アキバ人ブログ334
99位Fresh News Delivery334
100位★厳選!韓国情報★334

ソースコード

Parallels2さんからニュースサイトのリンクをCSVに抽出
require 'rubygems'
require 'scrapi'
require 'open-uri'
require 'nkf'
require 'csv'

$KCODE = 'u'

def get_newssites
  html = NKF::nkf('-w -m0', open('http://parallels.at-ninja.jp/').read)
  Scraper.define do
    process "dl > dt > a:first-child", 'matches[]' => {:name => :text, :url => "@href"}
    result :matches
  end.scrape(html, :parser_options => {:char_encoding => 'utf8'}) || []
end

CSV.open('newssite.csv', 'w', "\t") do |writer|
  sites = get_newssites
  sites.each do |site|
    writer << [site[:name], site[:url]]
  end
end
簡易リンク切れ/移転チェック

ページが見つかりません。 | 宿題は風俗のあとでプログラミング言語 Ruby リファレンスマニュアルを参考にしました。

require 'csv'
require 'uri'
require 'net/http'

$KCODE = 'u'

Net::HTTP.version_1_2

def fetch(uri, limit = 10)
  raise '引越しが多過ぎるので追跡を断念しました' if limit == 0
  response = Net::HTTP.get_response(URI.parse(uri))
  case response
  when Net::HTTPSuccess
    raise "引越し先は #{uri}" if limit < 10
  when Net::HTTPRedirection
    fetch(response['Location'], limit - 1)
  else
    raise "リンク切れ?:#{response.code}:#{response.message}"
  end
end

CSV.open('newssite.csv', 'r', "\t") do |site|
  begin
    fetch site[1]
  rescue Timeout::Error
    retry
  rescue => e
    puts "#{site[0]}: #{site[1]}#{e.message}"
  end
end
アンテナ数をCSVで出力

件数取得APIみたいなのあるかな〜と思ったけど、軽く探してみて見つからなかったのでscrapiに逃げ。

どうやらhttp://www.futilehope.net/http://www.futilehope.netみたいに後ろの/があったりなかったりすると件数が違うっぽいので、適当に足してみる。

require 'rubygems'
require 'scrapi'
require 'open-uri'
require 'nkf'
require 'csv'

$KCODE = 'u'

def hatena_antena_counter(url)
  def antena_counter(url)
    hatena_antena = NKF::nkf('-w -m0',
                             open("http://a.hatena.ne.jp/include?#{url}").read)
    count = Scraper.define do
      process 'div#hatena-antenna-include > h1', :count => :text
      result :count
    end.scrape(hatena_antena).to_s.match(/\((\d+)\)/).to_a[1].to_i || 0
  end
  site_url = URI.encode(url.gsub(/\/$/, ''))
  antena_counter(site_url) + antena_counter(site_url + '/')
end

sites = Array.new
CSV.open('newssite.csv', 'r', "\t") do |newssite|
  site = Hash.new
  site[:name]  = newssite[0]
  site[:url]   = newssite[1]
  site[:count] = hatena_antena_counter site[:url]
  puts "\"#{site[:name]}\",#{site[:url]},#{site[:count]}"
  sites << site
  sleep 1
end

sites.sort! {|a, b| b[:count] <=> a[:count]}
CSV.open('hatena_antena.csv', 'w', "\t") do |writer|
  sites.each do |site|
    writer << [site[:name], site[:url], site[:count]]
  end
end

この結果をRubyで適当に置換して、順位付け&はてな記法化して完成。

*1:上位100にしぼってあります。

?? 2008/02/29 12:11 76位 秒刊SUNDAY 423
77位 秒刊SUNDAY 423

t7n1kanot7n1kano 2008/03/01 18:08 Parallels2さんにのっているhttp://byokan-sunday.haru.gs/が
http://www.yukawanet.com/sunday/へ移転?した結果
同じリンクが2つになってしまったようです。
修正しました、ご報告ありがとうございます。