Hatena::Grouprubyist

たばさの RSSフィード

12/23(火) 2008

hateb_entrylist

| hateb_entrylist - たばさの を含むブックマーク はてなブックマーク - hateb_entrylist - たばさの

entryナンバーでタイトルとタグを取得。

どこか悪いようでたまに文字化け


#!ruby

require 'open-uri'
require 'nkf'
$KCODE = 'u' 


# class File
#   alias old_puts puts
#   def puts *a
#     old_puts a
#     $stdout.puts a
#   end
# end

class String
  def to_u
    NKF.nkf('-w', self)
  end
  def to_sj
    NKF.nkf('-s', self)
  end
end


$errorlog="d:/path/hateb_entrylist_error.txt" # 書き換える
def errlog d
  (open($errorlog,"w"){}) if not File.exist? $errorlog
  open($errorlog, "a"){|f|f.puts d}
end

log="d:/path/hateb_entrylist_log.txt" # 書き換える
base="http://b.hatena.ne.jp/entry/"

ended=[]
print"loading..."
open(log){|f|ended=f.read.select{|i|i=~/^\//}.map{|j|j[1..-1].to_i}}
puts ended.size
puts"input(from to sleep)"
s,t,sl=gets.split
s=s.to_i
t=t.to_i
sl=sl.to_f
p s,t,sl
s.upto(t){|i|
  next if ended.member? i
  sleep sl
  url=base+"#{i}"
  begin 
    open(url){|f|
      lines =f.read.map*""
  
        open(log,"a"){|fo|
          entry=""
          fo.puts "/#{i}",(lines=~/<title>(.+)<\/title>/m;$1.gsub("\n"," ")).to_sj.sub("はてなブックマーク - ","")
          fo.puts((lines=~/>URL:.*?\"(htt[^>]*)\"/m;$1).to_sj)
          fo.print((lines=~/curvebox-body(.*)class=\"interest\"/m;entry=$1).to_sj.scan(/class="tag">([^<]+)<\/a>/m).map{|i|"#{i},"})
          fo.puts
          entry=~/>(\d*.users?)/m
          fo.puts $1
        }
    }
  rescue Exception=>e
    d="#{e},#{url}"
    puts "Exception, #{d}"
    errlog d
	sleep 4
  end
}

いま1140万エントリーあるようだ。全部調べるといったい何日かかるか。

すなおに検索したほうがいいような。というよりなんに使うかなどは考えてるわけでもない。

ためしにentry901を探すため「シェイクスピア全作品」などではてブ検索したら、見つからないな。消えてるわけでもない。なんだろう。

b:keyword:Shakespeare こっちだと見つかる。タイトルは見ない?


またデバッグでputsを書き換えてみた(まえはflushした)。引数がないときがだめなようだ。

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20081223
カレンダー
<< 2008/12 >>
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
archive Error : RSSが取得できませんでした。