Hatena::Grouprubyist

たばさの RSSフィード

12/11(木) 2008

hateb_followers

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

はてなブックマークのお気に入られ調べ。

参考 => http://wota.jp/ac/?date=20070115

警告が多いので「ruby -W0 hatebmap.rb」などと警告制御オプションをつけて実行。


ver. 0.1



#!ruby
require 'nkf'
require 'open-uri'
require 'scrapi'
# $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

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

$x=[]
$res=[]
$keys=[]
html =gethtml id
#p html
$res =followers id,html
log id,$res
$x << id
$keys += $res
print"depth:"
n=gets.to_i
n.times{|i|
  ($keys-$x).each{|k|
    html=gethtml k
    $res =followers k,html
    $x << k
    $keys += $res
    $keys.sort!.uniq!
    log k,$res
  }
}
p $keys.size,$x.size


ver. 0.2, 例外処理、中断再開



#!ruby
require 'nkf'
require 'open-uri'
require 'scrapi'
# $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

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

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

$x,$keys=getlog
p $keys.size
$res=[]
html =gethtml id
#p html
$res =followers id,html
log 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!
    log k,$res
  rescue Exception=>e
    puts "Exception, #{e},#{k}"
    sleep 4
  end
  }
}
p $keys.size,$x.size



作業手順

| 作業手順 - たばさの を含むブックマーク はてなブックマーク - 作業手順 - たばさの

データの取得、保存

データベース

例外処理

データのアップデート

データの加工、解析、利用

エラーログ、修正

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