Hatena::Grouprubyist

たばさの RSSフィード

05/30(金) 2008

新着日記でプログラマ探し ver.1.1

| 新着日記でプログラマ探し ver.1.1 - たばさの を含むブックマーク はてなブックマーク - 新着日記でプログラマ探し ver.1.1 - たばさの

http://rubyist.g.hatena.ne.jp/hatecha/20080529/p1 の続き。

日記のほうも見て、シンタクスハイライトを検索するようにしました。*1

#!ruby
#rssget-hdp.rb

require 'open-uri'
require 'get_rss'
require 'nkf'

getlog='hateda-new.txt'

puts "getting rss."
r = RssSite.new("http://d.hatena.ne.jp/diarylist?mode=rss")
r.get

$names=[]
r.each_item {|item|
   item.link =~ /\/\/.*\/(.*)\// ;name=$1;$names<< name;
}

nn=$names.size
tmp=$names.dup

open(getlog,'w'){} if not FileTest.exist? getlog
open(getlog,'r+'){|f|
  f.gets(nil)
  if $_
    $last=$_.split
  else
    $last=[]
  end
  $ln=$last.size
  $names.concat($last)
}
$names.sort!.uniq!
puts "#{$names.size}(new #{$names.size-$ln}) users"
#p $names
rest= $names-$last
puts rest*", " if $DEBUG

word=NKF::nkf('-s -m0',"プログラ|program" )
word2=NKF::nkf('-s -m0',"システムエンジニア")
ng=NKF::nkf('-s -m0',"アソシエイ" )
wordd=NKF::nkf('-s -m0',"\"syntax-highlight\"")

c=0
ms=[]
mslog=[]
t=3
rest.each{|u|
  sleep t
  #puts"#{u}:"
  print"."
  f=false
  open("http://d.hatena.ne.jp/#{u}/about"){|i|
    con=i.readlines
    con.each{|li|
      w=NKF::nkf('-s -m0', li)
      print "\r",w if $DEBUG
      if w =~ /#{ng}/
        puts "\n(#{u}):#{w}"
        break
      elsif w =~ /#{word}/ || w =~ /#{word2}/ 
        puts "\n#{u}:#{w}";c+=1;
        f=true
        ms.concat([u])
        mslog.concat(["#{u}:#{w}"])
        break
      end
    }
  }
  next if f
  print"^"
  open("http://d.hatena.ne.jp/#{u}/"){|i|
    con=i.readlines
    con.each{|li|
      w=NKF::nkf('-s -m0', li)
      print "\r",w if $DEBUG
      if w =~ /#{wordd}/
        puts "\n#{u}::#{w}";c+=1;
        ms.concat([u])
        mslog.concat(["#{u}:#{w}"])
        break
      end
    }
  }
}
puts

if ms.size>0
  puts ms*", "
  prgslist="programmer-inHD.txt"
  open(prgslist,'a'){|f|
    f.puts ms
  }
  prgslog="programmer-inHD-log.txt"
  open(prgslog,'a'){|f|
    f.puts mslog
  }
end

def bell
  #puts"\a"
end

puts "#{c} programmers"
bell if c>0
open(getlog,'w'){|f| 
  $names.each{|u|
    f.puts u
  }
}

結果からhtmlを作成

#!ruby
#rssget-hdp-result.rb
class Htm
  def initialize
    @head="<html><head><title>hd programmers?</head><body>\n"
    @body=""
    @last="\n</body></html>"
  end
  def all
    @head+@body+@last
  end
  def set b
    @body=b
  end
end

prgslist="programmer-inHD.txt"
prgslist_htm="programmer-inHD.htm"
getlog='hateda-new.txt'
open(prgslist){|f|
  $p=f.readlines.map{|i|i.chomp} #.sort!
  puts($p*" ") if $DEBUG
}
open(getlog){|f|
  $a=f.readlines.map{|i|i.chomp}
}
open(prgslist_htm,"w"){|f|
  w=Htm.new
  li=$p.map{|i| "<a href='http://d.hatena.ne.jp/#{i}/'>#{i}</a>" }
  w.set( "#{li.size} <br>" + li.reverse*" " )
  f.puts w.all
}
  
per=(($p.size*10000.0/$a.size).to_i/100.0).to_s
puts "#{$a.size}(#{$p.size}), #{per}%"



先頭行を

#!ruby -d

にするとデバッグモードらしいですね。


追記

http://b.hatena.ne.jp/entry/http://taba.s3.zmx.jp/programmer-inHD.htm

こっちか。どうも。足跡つけまくったかいがあります。

機械的にやってるしノイズもあり並びも凝ったことしてないのであれですが、暇つぶしにはいいかと。現在の版では新着rssをみて、aboutでプログラ、keywordcloud,archive,diaryでそれっぽいキーワードなどを探しログを見て様子見しています。

直接の動機としてははてなはそっち系がほんとに多いのかっていう素朴な疑問。keyの設定を受け付ければ汎用化もできるかなあ。


追記

ng word使うようにした。PHP文庫など。あとは「フィギュアスケート」とか「演奏プログラム」をどうするか。できるだけ自動化で。

追記

データを更新しているときにたまたま新着日記のRSSに載っているID50件を調べているので、網羅的にはなっていません。最新から1ヶ月ほど取ってきて調べるように変えようと思ってるんですが、なかなか多量のデータをどうするか。

追記(20080613)

ほぼ日記の新着順に並べた。rssじゃなくした。sqlite3を使うようにした。ソースはやたら長く構成もややこしくなった、どこにおこうか。

 まず新着一ヶ月分を取得

 (以下ループ)

 たまに追加の新着分を調べる

 新着のデータベースを更新

 データベースの日付の新しいほうから順にプログラマチェックのループ

 htmlの作成

 たまにftpでアップ

なかなかややこしい

zmxのほうは規約変更で7月中旬以降無料はなくなりそう、どうしようか。

*1:スーパーpre記法(>|ruby|...||<など)でコードを書くと置換されるので

カレンダー
<< 2008/05 >>
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が取得できませんでした。