読者です 読者をやめる 読者になる 読者になる

自分がどのTwitterクライアントをどれくらいの割合で使ってるのかを調べるスクリプト書いた

REXML(http://www.germane-software.com/software/rexml)を使用してるので使いたい人はインスコしてね

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

id = "tasuten"
count = 20 # 何件のツイートを所得するか。APIのデフォルトは20、最高200
include_rts = "true" # 公式RTも含めるか
trim_user = "true" # ユーザ情報を簡略化するか

res_xml =  Net::HTTP.get("api.twitter.com", "/1/statuses/user_timeline/#{id}.xml?count=#{count}&include_rts=#{include_rts}&trim_user=#{trim_user}", 80)

# こっからXMLを解析して統計

doc = REXML::Document.new(res_xml)

statistics_hash = Hash::new # 統計用のハッシュ

doc.elements.each('statuses/status/source') do |element|
  # HTMLなテキストをREXMLのドキュメントとして開いてREXMLで処理する
  if element.text == "web" #webのときだけ書式が他と違う
    if statistics_hash.key?("web")
      statistics_hash["web"] += 1
    else
      statistics_hash["web"] = 1
    end
  else
    # <や>が実体参照になっているので置き換えてから
    tmp = REXML::Document.new(CGI.unescapeHTML(element.text))
    tmp.elements.each('a') do |source_element|
      cliant_name =  source_element.text
      if  statistics_hash.key?(cliant_name)
        statistics_hash[cliant_name] += 1
      else
        statistics_hash[cliant_name] = 1
      end
    end
  end
end

# こっから整形して表示
statistics_hash.sort{|a, b| b[1] <=> a[1]}.each do |key, value|
  print key, ": ", value, "  ", value.prec_f / count.prec_f * 100.0, "%", "\n"
end

使用するときは先頭のidやらcountをごにょごにょやってね。ちなみに環境によってはすこし時間がかかるよ!countを200にしたらうちのちょっと古めのマシンじゃ10秒くらいかかったり。ちなみに自分のID(@)で200件でやってみたらこんな感じだったよ

Twittelator: 90  45.0%
Mobile Web: 69  34.5%
Saezuri: 28  14.0%
web: 10  5.0%
Tweet Button: 2  1.0%
Twitpic: 1  0.5%

ツイートボタン(http://twitter.com/about/resources/tweetbutton)も"Tweet Buttonから"みたくなるのね

当ブログに於いて、私tasutenによって創作されたことが自明である著作物に対しては、別途明示のある場合を除き全てCC0が適用されます。