Hatena::ブログ(Diary)

でぶぬる日記

2010-11-05

はてなブックマーク お気に入られ数ランキング (2010/11/05)

はてなブックマーク お気に入られ数ランキング (2010/09/23) - でぶぬる日記

前回と同様、はてなブックマークお気に入られ数ランキングを作ってみました。

前回と異なる点は以下の通りです。

総ブックマーク数の取得

各ユーザのRSSフィードに含まれる、"opensearch:totalResults" に、ユーザの総ブックマーク数が含まれているみたいですので、それを自動で取得してみました。

Ruby添付のRSS Parserでは(というか多分RSS Parser全般では)OpenSearch関連のタグは認識出来そうにないこともあり、NokogiriのXML Parserで無理やり読み込んであげています。

ついでなので今回は、総ブックマーク数のランキングも出しています。

最新ブックマーク日時の取得

非アクティブなユーザをランキングから除外する為に、最新のブックマーク日時も取得するようにしてみました。

生データ(CSVファイル)については、もしニーズがあれば公開したいと思います。@aquarlaまでお気軽にご連絡ください。

お気に入られ数のランキング

順位IDお気に入られ総ブックマーク
1naoya20957975
2hatenabookmark159092
3otsune1409101074
4jkondo13863063
5umedamochio132512417
6y_arim125118240
7kanose117069190
8Hamachiya211542667
9amachang11303628
10fromdusktildawn110010582
11miyagawa105924544
12finalvent95431647
13guldeen92835698
14kensuu87011913
15yuiseki727132765
16REV72171506
17ashitano2446895928
18HolyGrail66421537
19kokorosha6545110
20koizuka64619599
21ululun62138657
22maname59069
23secondlife5213986
24pha5069359
25complex_cat47424345
26laiso47135142
27nitoyon4706371
28kanimaster46942167
28netafull4693965
30wacky46020895
31kotorikotoriko4465068
32nipotan4355435
33higepon4343582
34jt_noSke43156384
35TAKESAKO42317117
36wideangle42032149
37mereco4103618
38NATROM4036100
39yamifuu40072746
40ekken39719650
41kyo_ju39624112
42gotanda63926429
42antipop3928217
44FTTH39026823
44zu239021505
46Kamekiti3866771
47westerndog381114225
47kawasaki38111392
47umeten38130752
50tsupo37720516
51Delete_All3734228
52kawango372681
53pollyanna368584
54yto3672455
55jazzanova36337057
55lovelovedog3634626
57FUKAMACHI3576074
58ono_matope3539536
59KoshianX35119242
60yellowbell3476455
61hatayasan34432433
62myrmecoleon33127620
63inumash32811339
64kaitoster32611917
65rikuo32416560
66yachimon31331036
66kurokuragawa31315309
68lovecall3119902
68vantguarde31118521
70SeiSaguru3089451
71hejihogu30333607
72rna30218989
73BUNTEN29814374
74kusigahama29723004
75noreply296262
76girls_fashion294112454
77hotomaru29016851
78toya28821266
79ryuzi_kambe28718031
80hiroyukiegami28612937
81retlet28554197
82crow200828112432
82nkoz28180727
84yappo2795833
84WinterMute27910343
86suVene27815356
87feita27720144
88yugui27613553
89cho452754036
90b4-tt27163392
90medtoolz2711624
92mala26625
93steam_heart26518771
94n-styles2642604
95essa2631684
95feather_angel26311593
97TakahashiMasaki26145273
98massunnk25810944
99blackshadow25712698
100funaki_naoto25550175

総ブックマーク数のランキング

順位ID総ブックマークお気に入られ
1A410134103103
2yuiseki132765727
3toronei126561195
4westerndog114225381
5girls_fashion112454294
6Naruhodius111389146
7zephyr_8210990369
8otsune1010741409
9RanTairyu86014138
10nkoz80727281
11minazuki678468139
12pongpongland77602242
13yamifuu72746400
14REV71506721
15ak971479250
16kanose691901170
17activecute69021236
18Donca6499849
19b4-tt63392271
20solunaris1496309061
21Nean61069175
22bsiyo5689392
23jt_noSke56384431
24wackunnpapa55160142
25retlet54197285
26yuu-kuni53140213
27funaki_naoto50175255
28TakahashiMasaki45273261
29kechack44757165
30iriso4434013
31pema4386884
32kanimaster42167469
33sankaseki41832190
34CAX41749124
35wartanenemon3906564
36ululun38657621
37kozai37957179
38zyugem37292126
39jazzanova37057363
40cubisme_face3697332
41giffie113658458
42cloverleaf2436492172
43ore_de_work36364195
44mosshm36249185
45fs00149336074174
46guldeen35698928
47pc_nagomu3531775
48bunoum35184109
49zonia35156225
50laiso35142471
51advblog34330194
52mikomiko7733785142
53hejihogu33607303
54nilab33391201
55acqua_alta33317235
56mickn3298567
57brainparasite32953225
58rosa_nera3260332
59hatayasan32433344
60wideangle32149420
61akillerOKN31945116
62nofrills31838162
63finalvent31647954
64toratorazero31214158
65yachimon31036313
66kashmir10830756141
67umeten30752381
68sassano30652120
69rahoraho3057169
70memoclip30317233
71pho30163203
72dododod30027149
73gouzou30026138
74Itisango2944655
75denken28350176
76myrmecoleon27620331
77atasinti2747626
78wanderingdj27314109
79rekramkoob2730659
80brax27083132
81tailtame27047119
82tarchan2683059
83FTTH26823390
84sarutoru2663845
85mfluder2662943
86sirouto226621218
87unproblematic2659680
88kennak26559121
89snow1132645052
90colombo2638493
91maple_magician2637426
92F-name26097129
93kiku7225973176
94oguogu2566681
95yomiusi2551864
96sphynx2527236
97kno2524170
98s109001825184138
99Cat-Tram2515558
100k_wizard25136102

ソースコードはこんな感じ

require 'open-uri'
require 'rubygems'
require 'json'
require 'rss'
require 'nokogiri'

usernames = ["aquarla"]
done_usernames = []

# お気に入られ数を取得
def get_followers(username)
  json_url = "http://b.hatena.ne.jp/#{username}/follower.json"
  open(json_url) do |f|
    JSON.parse(f.read)
  end
end

# はてブRSSをXMLとして取得
def open_hatebu_rss(username) 
  rss_url = "http://b.hatena.ne.jp/#{username}/rss"
    open(rss_url) do |file|
      yield file.read
    end
end

# XMLから最も新しいブックマークの作成時刻を取得
def get_latest_created_at(xml)
  RSS::Parser.parse(xml).items[0].date.localtime.strftime("%Y-%m-%d %H:%M:%S") rescue nil
end

# XMLから現在の総ブックマーク数を取得
def get_bookmark_count(xml)
  # Nokogiriは、namespaceを厳密に指定してあげないと動作しなかったりするみたい
  namespaces = {
    'opensearch' => 'http://a9.com/-/spec/opensearchrss/1.0/',
  }
  Nokogiri::XML.parse(xml).at('.//opensearch:totalResults', namespaces).text.to_i rescue -1
end

# メインルーチンはここから
while !usernames.empty?
  username = usernames.shift
  next if done_usernames.include?(username)
  begin  
    followers = get_followers(username)
    latest_created_at, bookmark_count = open_hatebu_rss(username) do |xml|
      [get_latest_created_at(xml), get_bookmark_count(xml)]
    end

    puts "#{username},#{followers.size},#{latest_created_at},#{bookmark_count}"

    STDOUT.flush
    sleep(5)
    followers.each do |f|
      usernames.push(f["name"])
    end
  rescue StandardError,Timeout::Error
    puts "#{username}"
  end
  done_usernames.push(username)
end

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証