_ read.cgiのRubyバージョンを書いてみたいなぁ。
mwupみたくNora+Web::Controller::Simple使って、tDiaryテーマ互換にして。
_ 昔作ったdat2htmlを読み直してみよう。
_ DB設計は完了。
_ *.datをインポートするプログラムを作ってテストしてみよう。
_ $KCODE='s'でUTF-8をDBIに渡すとSyntax Errorになる。
正規表現で文字コードが指定されていないのが原因か?
_ 正規表現リテラルを探して全部//nに書き換えよう。
$ ls /usr/lib/libchasen* /usr/lib/libchasen.a /usr/lib/libchasen.so /usr/lib/libchasen.so.0.0.1 /usr/lib/libchasen.la /usr/lib/libchasen.so.0 $ ruby extconf.rb checking for chasen_getopt_argv() in -lchasen... no creating Makefile
_ なぜ?/usr/libにはlibchasen.aがちゃんとあるのに。
Chasenのバージョンによる問題か?
Cygwin上でもchasen-2.3.3.tar.gzとChasen1.6.tar.gzの組み合わせでextconf.rbがlibchasenを認識しなかった。
_ chasen-2.2.9.tar.gzをインストールしたら、Chasen1.6のインストールが正常に完了した。
_ chasen-2.3.0から導入されたdartsのあたりから問題になっているのか?
うちのサーバはどうしてたかな? 帰ったら確認しよう。
_ /etc/bind/db.rootを修正してbindをrestartした。
_ リリース中のURLにスペルミスがあってあせった(^^;
rs.ineternic.netなんてねぇよ。
A Standard for Robot Exclusion(rfc-draft)を参考に組んでみたが、どうもおかしい。
Disallow:の値が空に出来ないのだ。
disallowline = "Disallow" ":" *space path [comment] CRLF comment = *blank "#" anychar space = 1*(SP | HT) path = fsegment *( "/" segment ) fsegment = 1*pchar segment = *pchar
_ A Standard for Robot Exclusionベースで作ったほうがいいんだろうか?
Allow:使ってるrobots.txtが無いようなら、rfc-draftベースは止めよう。
_ パースと書き出しが出来るようになった。次は本題のAllow:,Disallow:のチェック機能だな。
_ チェック機能も出来た。テストを書いてみよう。
12 tests, 60 assertions, 0 failures, 0 errors
_ テスト完了
ハニーポット的な考え。
アクセスすると"moonwolf-spam-"+REMOTE_ADDRを暗号化した文字列+"@moonwolf.com"という文字列を表示するCGIを仕込んでおく。
~/.qmail-spamに来たIPアドレスからのアクセスを禁止していけば、そのうちアドレス収集ボットから逃れられるようになる?
_ 各地に分散して配置してRBL(Realtime Blackhole List)みたくしてやると効果があがるかも。
_ Location:,Refresh:ヘッダ、<meta http-equiv="refresh">によるリダイレクトに対応した。
_ CookieManagerを作りはじめた。これが出来れば、Webのかなりの部分が自動化できるようになる。
WebUnitでも使えるかも。セッション維持できるし。
_ 保存方法(RDB,File)は考えないことにしよう。必要ならPStore使えばいいんだし。
_ CookieManager出来たっぽい。今夜あたりNoraリリースしてみるか。
_ BASIC認証くらいには対応させようか?
そうするとPasswordManagerが必要になるな。
_ schemeが変わるリダイレクトもあるんだったな。ロジック考え直そう。
_ Kuklad [Most Interested facts about that you can read here:, ]
_ Bomzhang [Try to look here and may be you find what do you want:, ]
_ Barsuk [Open this post and read what I think about that:, ]
_ Kalomyal [Stop! Try to read this interested book:, ]
_ Bakerklok [It's so interesting:, ]
_ Nusaklo [Most Interested facts about that you can read here:, ]
_ Vdtszwbv [Yes, you can see more about this here:, ]
_ Dxavmdqj [Most Interested facts about that you can read here:, ]
_ Nfqyofwv [Do you want to see good pics?, ]
lirs = Web::Agent::LIRS.new
open('lirs.gz') {|f|
lirs.parse(f)
}
lirs.each {|rec|
print rec.to_s
}
_ いちおうオプショナルな部分は除いて実装できました。
_ ほかのLIRSとのマージ機能も作りました。
_ hina-diも読み書きできるようになった。
_ Web::Agent::LIRS,Web::Agent::Hina_diも出来たことだしリリースしてみるかな。
_ Web::Agentで取ってきたHTMLのフォームに値を埋めてPOST出来るようにしたいなぁ。Web::Agent::Forms開発開始。
簡単にHTTPのGET/POST/HEADが出来るWeb::Agentを追加
クッキーにも対応しています。
将来的にはFTP/HTTPSにも対応する予定です。
_ robots.txtの解析、判定クラスを追加(Web::Agent::Robots)
_ アンテナ情報フォーマット(LIRS/hina-di)の読み書きクラスを追加(Web::Agent::LIRS,Web::Agent::Hina_di)
_ Webフォームの読み書きに対応(Web::Agent::Forms)
※要htree(http://cvs.m17n.org/cgi-bin/viewcvs/htree/htree.tar.gz?tarball=1&cvsroot=ruby)
_ Xgstzehr [i'm fine good work <a href=" http://www.zebra.lt/english/f..]
_ Bieneevx [Cool site goodluck :) <a href=" http://www.zebra.lt/englis..]
_ Rlnhxiko [Punk not dead <a href=" http://www.zebra.lt/english/forum..]
_ Xtchuvhi [Excellent work, Nice Design <a href=" http://www.zebra.lt/..]
_ Nsgygskl [good material thanks <a href=" http://www.zebra.lt/english..]
_ Xvtitbdu [I love this site <a href=" http://www.zebra.lt/english/for..]
_ Iueozbgw [This site is crazy :) <a href=" http://www.zebra.lt/englis..]
_ replica [<a href="http://groups.google.jp/group/replica-wrist-watch..]
_ replica [<a href="http://groups.google.jp/group/chopard-lady-replic..]
_ Aeyowbvi [i'm fine good work hotels cheap_hotels_and_whistler_and_bc..]
proxyはまだサポートしていないが、直接であればftp://username:password@host/path/file形式でファイルがGET出来るようになった。
_ HTML::TemplateをWeb::Templateとしてマージした。ついでに書式変更"<TMPL_VAR>"を"{{var}}"にした。HTMLエディタとの愛称がよくなったはず。
_ LIRSのサンプルとして他のアンテナのLIRSをWeb::Agentで取得して、全部マージしてHTML,sites.lirs.gzを吐き出すプログラムが出来た。
自前でサイトの更新チェックが出来るようになったら本当のアンテナになるな。
_ 一人前のアンテナになったら「mwantenna」としてリリースします。
_ Cnzbsapz [I love this site <a href=" oporn ">hot </a> 766 <a href..]
_ Laxgjddy [i'm fine good work <a href=" http://boxbit.saiyaithai.org/..]
_ Exccnkjr [It's serious <a href=" porno ">porn machines</a> 18077 <a..]
_ Ecclrqfk [This site is crazy :) <a href=" porn ">web </a> 841 <a ..]
_ Ixojouws [Good crew it's cool :) <a href=" ass black porn ">porn sit..]
_ Dpbwlphu [Very funny pictures <a href=" luv porn star ">porno b&d s&..]
_ Dircxmrm [Hello good day <a href=" male porn ">thumb </a> =] <a h..]
_ Nwvosovj [Good crew it's cool :) <a href=" movies ">black male porn ..]
_ Czavczpi [Excellent work, Nice Design <a href=" jemini ">pornoom</a>..]
_ Njlmcqqr [Thanks funny site <a href=" passforall ">xxxporntube</a> ..]
Web::TemplateにHTML::Templateのglobal_vars相当の機能を加えた。
"{{var name="$varname"}}"とするとloopのなかでもトップレベルの変数が参照できる。Rubyのグローバル変数の$を使っているから判りやすいと思う。
_ mwantenna、UTC表示が分りづらいのでJST表記に変更できるようにした。
UTF-8化してると、tDiaryのCVSに追従するのがきついのでEUC-JPに戻そうと思う。
dbi_ioを使ってるから、EUC-JPのテーブルを作ってテーブルの中身を全部コード変換してやれば、すぐに移行できそうだ。
_ そういえばdbi_ioをtDiaryに標準添付して欲しいのだが、どうすればいいんだろう? ma2takさんはどっかいっちゃったしメンテナは俺でいいんだか。
_ テーブル移行スクリプト、とりあえず出来た。今夜、移行テストしてみよう。
_ pelena [Cheap phentermine - Best page! http://jroller.com/page/phe..]
_ gala [Buy Cialis Online at Lowest Prices. http://www.blogcity.co..]
_ lupatiy [Buy lortab - US Licensed Online Pharmacy - http://blog.az..]
_ lamborgi [Soma carisoprodol - MedlinePlus Drug Information: Carisopr..]
_ laja [http://blog.azpoint.net/blog/paxa buy paxil ]
_ gaga [Buy phentermine - MedlinePlus Drug Information! http://sni..]
_ globo [Cheap tramadol Information! http://snipurl.com/s48b cheap ..]
_ glasha [Buy cialis, buy cialis online. http://snipurl.com/s48g buy..]
_ damping [Buy lortab, Carisoprodol online. http://snipurl.com/s48h b..]
_ Ylia [Buy phentermine - Click here! http://snipurl.com/nujnolave..]
_ 移行前の環境はtar.gzで固めてあるから解いてサルベージしよう。
AV WatchのようなLast-Modifiedを吐かないサイトも更新チェックできるようにした。
start_reg,end_regで切り取る個所を指定してダイジェストの比較によって更新を検出するようにした。
_ 複数のアンテナをマージすると同じコンテンツなのにURIが違っていてエントリが重複してしまうことが有る。
remove_sitesで削除するURLを指定できるようにした。
_ 五月雨を使ってる人はauthor情報を書かない傾向があるみたいだな。
_ カテゴリ分け出来るようにして、さらにtDiaryのテーマに対応した。
_ 現在、ひたすら日記サイトを巡回してカテゴリ分け中。疲れる。
_ SPAMメールとか届き始めてるので、ネット環境は一応復旧したのかな?
コードの公開はまだですが、とりあえず自分のサイトで稼動させてみることにしました。
_ だて [ありがとうございます。便利すぎて CGI や Net::* を生で使う気がしなくなってきました。]
_ だて [CookieManager#get ですが、FQDN ではない domain で Set-Cookie されたクッキ..]
_ porntube [nice post thx see u <a href=" http://www.esnips.com/user/p..]
_ xvideo [nice work thanks see u <a href=" http://www.esnips.com/use..]
_ tube 8 [cool site thanks bookmark you <a href=" http://www.esnips...]
_ pornhube [great work dude thx <a href=" http://www.esnips.com/user/p..]
_ Bnadevzl [Preved webmastero4ki, <a href=" http://www.google.com/note..]
_ Nwohvftf [interesting post thx ]
_ Vgtmvcsx [Sorry, http://www.google.ca/notebook/public/11810455721427..]
wgetのような再帰取得をするにはHTML中のリンクをリストアップする必要がある。
htreeを使ってリンク取得の処理を書いてみよう。
_ スタイルシートのパースではまる。tlexをまたいじらないといけない(^^;
require "htree"
uri = ARGV.shift || 'http://www.ruby-lang.org/ja/'
agent = Web::Agent.new
agent.setup
agent.get(uri)
linkextor = Web::Agent::LinkExtor.new(agent.uri)
doc = HTree.parse(agent.rsp.body)
linkextor.parse(doc)
linkextor.each {|type,uri|
puts "#{type}:#{uri}"
}
stylesheet:http://www.ruby-lang.org/ja/theme/base.css stylesheet:http://www.ruby-lang.org/ja/ruby-lang.css img:http://www.ruby-lang.org/image/title.gif a:http://www.ruby-lang.org/ja/ a:http://www.ruby-lang.org/en/ a:http://www.ruby-lang.org/ja/index.rdf img:http://www.ruby-lang.org/rdf.png a:http://www.ruby-lang.org/ja/20040117.html a:http://www.ruby-lang.org/ja/20020102.html a:http://www.ruby-lang.org/ja/20031225.html a:http://www.ruby-lang.org/ja/20031222.html a:http://www.ruby-lang.org/ja/20031207.html a:http://www.ruby-lang.org/cgi-bin/download-1.8.1.mrb a:http://raa.ruby-lang.org/ a:http://raa.ruby-lang.org/list.rhtml?name=ruby-ifconfig a:http://raa.ruby-lang.org/list.rhtml?name=dirstack a:http://raa.ruby-lang.org/list.rhtml?name=rubum-tools a:http://raa.ruby-lang.org/list.rhtml?name=iterator a:http://raa.ruby-lang.org/list.rhtml?name=genest a:http://raa.ruby-lang.org/list.rhtml?name=purple a:http://raa.ruby-lang.org/list.rhtml?name=nora a:http://raa.ruby-lang.org/list.rhtml?name=hyperset a:http://raa.ruby-lang.org/list.rhtml?name=win32-process a:http://raa.ruby-lang.org/list.rhtml?name=tmail a:http://rnn.sourceforge.jp/modules/news/ a:http://rnn.sourceforge.jp/modules/news/article.php?storyid=160
_ こんな感じでリンクが取得できる。URI+HTree万歳。
_ pornhub [cool post thanks man bookmark you <a href=" http://www.esn..]
_ redtube [interesting site thanks <a href=" http://www.esnips.com/us..]
_ red tube [nice site thx man see u <a href=" http://www.esnips.com/us..]
_ tube8 [great work great site thanks <a href=" http://www.esnips.c..]
_ hq tube [nice work man thanks see u <a href=" http://www.esnips.com..]
_ youporno [wow great post man thanks =) <a href=" http://www.esnips.c..]
_ xtube [interesting site thx ;) see u <a href=" http://www.esnips...]
_ youporne [great work sweet site thanks <a href=" http://www.esnips.c..]
_ nexxx [sweet site thx see my link <a href=" http://www.esnips.com..]
_ uporn [mega site man thanks ;) bookmark u <a href=" http://www.es..]
参考になった。
_ 回線が太くないと全然だめですね。あとやっぱりAddress already in use - connect(2) (Errno::EADDRINUSE)が発生するので途中で止まってしまいます。rescue Errno::EADDRINUSEでもキャッチ出来ないようです。
_ robots.txtのパースをもっと頑丈にしないとエラーが出てしまう。文法チェックを緩めるしかないかな?
rindaによるTupleSpaceを使って分散協調型でクロールするようにしているが、TupleSpaceのプロセスのメモリ使用量がすごく多い。各プロセスのスリープの時間を調整しないとパンクするかもしれない。
_ 目標は10万ページの取得。
_ 単純にhttp://devlog.moonwolf.com/から4レベルの取得をしようとしたらとんでもないことになってしまった(^^;
別サーバへのリンクはレベル2つ分の距離というルールを加えるべきかもしれない。
_ ボトルネックはリンク収集の部分だった。過去ログ等のページでは同じURLへのリンクが大量に発生する。それがTupleSpaceに溜まってしまっていた。
リンク整理プロセスより前にクローラープロセスの部分で重複URLをTupleSpaceに書き出さないように工夫しよう。
_ メルマガのバックナンバーで酷い事になっている。180号まで発行しているメルマガだと180*180=32400リンクにもなっている。重複URLを除けば180リンクにしかならない。
この違いは大きいな。
_ たむら [今繋がりましたぜ age>tmtm.org]