Hatena::Grouprubyist

たばさの RSSフィード

12/12(金) 2008

hateb_followers 続き

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

http://rubyist.g.hatena.ne.jp/hatecha/20081211/p1 のつづき

ver. 0.3

分けた。

調査部

#!ruby
#hatebmap_log.rb

$logname="hatebmap.txt"
def putlog id,fs
  open($logname,"a"){|f|
    id=~/\/(.*)\//
    f.puts $1
    fs.each{|i|
      i=~/\/(.*)\//
      f.print $1," "
    }
    f.puts
  }
end

def getlog mode=0
  x=[];y=[]
  open($logname){|f|
    while f.gets
      x << "/#{$_.chomp}/"
      if mode==0
        y += f.gets.split.map{|i|"/#{i}/"}
      else
        y += [f.gets.split.map{|i|"/#{i}/"}]
      end
    end
  }
  [x,y]
end


if __FILE__ == $0
  x,y=getlog -1
  $f={}
  x.size.times{|i|$f[x[i]]=y[i]}
  p $f.size
  print"input(name, -name, >followmin, <followmax or =followeq):"
  while gets
    break if $_=="\n"
    case $_
    when /^-/
      id=$_.chomp[1..-1]
      puts (ans=$f.keys.select{|k|$f[k].select{|i|/#{id}/ =~ "#{i}";$&}.size>0}).size, ans.sort*" "
    when /^>(.*)/
      min=$1.to_i
      puts $f.keys.select{|k|$f[k].size>min}.map{|i|"#{i}(#{$f[i].size})"}*" "
    when /^<(.*)/
      max=$1.to_i
      puts $f.keys.select{|k|$f[k].size<max}.map{|i|"#{i}(#{$f[i].size})"}*" "
    when /^=(.*)/
      m=$1.to_i
      puts $f.keys.select{|k|$f[k].size==m}.map{|i|"#{i}(#{$f[i].size})"}*" "
    else
      puts x.select{|i|/#{$_.chomp}/ =~ "#{i}";$&}.map{|i|"#{i}(#{$f[i].size}) #{$f[i]*' '}"}.sort
    end
  end
end


メイン


#!ruby
require 'nkf'
require 'open-uri'
require 'scrapi'
require 'hatebmap_log'
# $KCODE = 'u' 
$KCODE='s'
id="/hatecha/" #=> 書き換えましょう

class String
  def scrape(pattern, options = {}, &block)
    options = {:extract=>options} unless options.is_a?(Hash)
    options[:parser_options] = {:char_encoding=>'utf8'}.merge(options[:parser_options]||{})
    extract = options.delete(:extract) || block && :element || :text
    scraped = Scraper.define do
      process pattern, "matches[]"=>extract
      result :matches
    end.scrape(self, options) || []
    block ? scraped.map{|i| block.call(i)} : scraped
  end
end

def gethtml id,t=1.3
  urlb="http://b.hatena.ne.jp"
  url=urlb+id+"follower"
  sleep t
  print"."
  NKF.nkf('-w', open(url).read)
end


def followers id,html
  word=".followers a"
  html.scrape(word,"@href"){|i| i}# div div ul li.followers")
end

$x,$keys=getlog
puts "#{$keys.size}(#{($keys-$x).size})"
$res=[]
html =gethtml id
#p html
$res =followers id,html
putlog id,$res if not $x.member? id
$x << id
$keys += $res
print"depth:"
n=gets.to_i
n.times{|i|
  ($keys-$x).each{|k|
  begin
    html=gethtml k
    $res =followers k,html
    $x << k
    $keys += $res
    $keys.sort!.uniq!
    putlog k,$res
  rescue Exception=>e
    puts "Exception, #{e},#{k}"
    sleep 4
  end
  }
}
puts "all: #{$keys.sort.uniq.size}, done: #{$x.sort.uniq.size}"


21個までしか取得できてないな。やりなおさないと。

hatenaの編集自動バックアップ、ぜんぜん古い日付のが挿入された。なんだろう)

はてブ お気に入り

| はてブ お気に入り - たばさの を含むブックマーク はてなブックマーク - はてブ お気に入り - たばさの

・数字とアイコンの数が違う

・たどってもトップに飛ばされるのがある(退会?)

・自分のお気に入りページ、閾値を4などにして表示すると保存される

b:id:hatecha:favorite select(ruby) del(perl) - b:id:hatecha  とか

|  b:id:hatecha:favorite select(ruby) del(perl) - b:id:hatecha  とか - たばさの を含むブックマーク はてなブックマーク -  b:id:hatecha:favorite select(ruby) del(perl) - b:id:hatecha  とか - たばさの

自動バックアップやはり変。クリアしますかって聞かれるのもいやなかんじ

トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20081212
カレンダー
<< 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が取得できませんでした。