Hatena::Groupkill

イン殺 RSSフィード

2007-03-21

[]被ブックマーク中のアイコンカスタマイズ率 被ブックマーク中のアイコンカスタマイズ率 - イン殺 を含むブックマーク はてなブックマーク - 被ブックマーク中のアイコンカスタマイズ率 - イン殺

「はてブアイコンのカスタマイズに関する雑感 (id:xx-internet:20070310:p1) のコメント欄より。」

# hyuki 『バイナリ比較といってもハッシュ値の比較だけでよいかも。』

はてブアイコンのカスタマイズに関する雑感

「まさか本物の id:hyuki さん?と思いつつ、試しに実装してみたら動いたので、あちこちのサイトに適用して数字を見てみました。」

  • 直近 500 ブックマークのうち、アイコンがカスタマイズされているものを 1pt として集計。
  • ついでにユニークユーザー数も集計。
  • 調査対象は独断と偏見で選びました。近所とアルファっぽいところを適当に。
  • 取得中にブックマークが追加されると値が多少ずれるが、見なかったことにする。誤差誤差。
URLアイコンカスタムなブックマーク数ユニークユーザー数
kill.g.hatena.ne.jp/134223
neo.g.hatena.ne.jp/97166
gigazine.net/57302
blog.livedoor.jp/dankogai/110355
d.hatena.ne.jp/jkondo/155343
d.hatena.ne.jp/naoya/86346
d.hatena.ne.jp/nand/102164
d.hatena.ne.jp/finalvent/90217
d.hatena.ne.jp/another/131189
d.hatena.ne.jp/otsune/150269
d.hatena.ne.jp/kanose/145259
d.hatena.ne.jp/fromdusktildawn/88320

f:id:xx-internet:20070321235616p:image

「前のエントリではこの方法でアルファブロガーを識別できるんじゃないかと書きましたが、どうもこれはカルトブロガー識別法のような気がしてきました。傾向としてはこんな感じか。」

  • 予想通り GIGAZINE のアイコンカスタマイズ率の低さは異常。
  • アルファブロガーは総じてユニークユーザー数が多い。カスタマイズ率は高かったり低かったり。衆愚力?
  • ユニークユーザー数が少ない = 一部の読者にひたすらブックマークされている。 g:killg:neo は一人で 20 以上ブックマークしているユーザーが何人か。
    • 一つの記事に 500 以上ブックマークが付くようなサイトは最新 500 ブックマークの中でユーザーがぶつからないから、もっと取得件数を増やして数字を見たほうがいいかも。やらないけど。
  • 最初からプライベートモードで使ってるユーザーはたぶんアイコンをカスタマイズしていない。が、見えないものはなかったことにするのが大人の態度なので無視。

「ソースコードほかは長くなるので続きを読む記法にします。」


ソースコード

icon_custom.rb

require 'get_rss.rb'
require 'hash_sort.rb'
require 'rss/dublincore'
require 'digest/md5'
require 'icon_custom.conf.rb'

class HatenaUserIcon
  def initialize
    @@default_icon_hash = get_hash("./profile_s_default.gif")
    @icon_hash = Hash.new {|h,id|
      icon_uri = "http://www.hatena.ne.jp/users/#{id[0..1]}/#{id}/profile_s.gif"
      h[id] = get_hash(icon_uri)
    }
  end

  def get_hash(uri)
    Digest::MD5.hexdigest(open(uri).read)
  end

  def custom?(id)
    @@default_icon_hash != @icon_hash[id]
  end
end

def check(icon, url)
  users = Hash.new {|hash,key| hash[key] = 0 }

  0.step(RSS_MAX,25) {|i|
    b_url = "http://b.hatena.ne.jp/bookmarklist?mode=rss&url=#{url}&of=#{i}"
    r = RssSite.new b_url

    begin
      r.get
    rescue
      STDERR.puts $!
      next
    end
  STDERR.puts "get #{b_url}"

    r.rss.items.each {|i|
      id = i.dc_creator
      users[id] += icon.custom?(id) ? 1 : 0
    }
  }

  users.sort_by_value.each {|user,count|
    puts "#{user}\t#{count}"
  }

  total  = users.length
  custom = users.delete_if {|k,v| v == 0 }.length

  puts "#{custom} / #{total}"
end

icon = HatenaUserIcon.new
TARGET_LIST.each {|url| check(icon,url) }

icon_custom.conf.rb

RSS_MAX = 500

# URL リストを書く
TARGET_LIST = %w(
http://kill.g.hatena.ne.jp/
)

「 get_rss.rb ほかの依存ライブラリについては Woshare Wiki - 技術/RubyでRSS 参照。一式まとめたものをサーバに置きました。」

「アイコンのカスタマイズ有無を判定する方法については 生木に鉈(旧称:ゆがみ34/7)改メ井戸型ポテンシャルの中の蛙の Throw Life は日記につき - ネットの裏側で何が行われているのか、無知な私にはわかりませんが (d:id:yshl:20070313#1173815676) で Last-Modified や Content-Length を使うやり方が提案されています。恐らくそっちの方が軽いでしょう。この方式を採用していないのは、「 HTTP ヘッダを見るのは下賎の仕事」という作者のゆとり世代的偏見によるものです。 HatenaUserIcon クラスの差し替えだけで何とかできるはずなので、やりたい方はどうぞ。」

トラックバック - http://kill.g.hatena.ne.jp/xx-internet/20070321