2006年11月26日
ブログサーチのクローラーのためのテストエントリ~

ようやくクローラーの精度が上がってきた。
結構いい加減なxmlとかが存在するので、いろいろと工夫が必要でひとすじ縄では行かないですね。
波ダッシュ(~)のマッピングがWindowsのUTF-8でおかしいので、
- module: Filter::Regexp
config:
regexp: s/\xE3\x80\x9C/\xEF\xBD\x9E/g
text_only: 1
を追記してみたけど、ちゃんと働くのだろうか。
うーん、うまく行かんね。
何か見落とししてるのかな。
投稿者 田中@グリニッジ : 22:20 | コメント (0) | トラックバック
2006年11月17日
[Plagger] とりあえず、DBに保存するところは出来た

PlaggerでDBに保存できるようにということで、Googleで調べていたら、Store::DBICというのを発見。
SVNのブランチの、feature_serverの中にありました。
これは、SQLiteしか対応してなさそうでしたが、よくみてみると簡単にMySQL用を作れそうだったので、ちょっと作業してみました。
assets/plugins/Store-DBIC/plagger.sqlite.sql
を元に、plagger.mysql.sqlを作成し、そのSQLにてテーブルを作成。また、
lib/Plagger/Schema
の中の
SQLite.pm
SQLite/Entry.pm
SQLite/EntryMeta.pm
SQLite/EntryTag.pm
SQLite/Feed.pm
SQLite/FeedMeta.pm
SQLite/FeedTag.pm
SQLite/Folder.pm
SQLite/Pin.pm
を元に、
MySQL.pm
MySQL/Entry.pm
MySQL/EntryMeta.pm
MySQL/EntryTag.pm
MySQL/Feed.pm
MySQL/FeedMeta.pm
MySQL/FeedTag.pm
MySQL/Folder.pm
MySQL/Pin.pm
を作成。
これは、SQLite.pmのものをそのまま使っても良さそうだったけど、とりあえず作ってみた。
あとは、config.yamlで
- module: Store::DBIC
config:
schema_class: Plagger::Schema::MySQL
connect_info: [ 'dbi:mysql:testdb', username, password ]
みたいな感じ。
config.yamlの中にパスワードを書くのがちょっと嫌かな。これは要検討
MySQL側はSennaバインディングでentryのbodyを全文検索できるようにした。
次は、Rule::Deduped::DBICかな。
こちらも存在しているのを見かけたので、簡単に行きそう。
それにしても、最近はClass::DBIではなく、DBIx::Classなんですね。
おじさん、時代遅れか。
WEB+DB PRESS Vol.35 になにやらnaoyaさんが書いているよう。
読み直してみよう。
投稿者 田中@グリニッジ : 20:18 | コメント (0) | トラックバック
2006年11月16日
SennaとHyper EstraierとPlaggerと、あとはいろいろマッシュアップで、ちょっと趣味プロジェクトのブログサーチを作るぞ計画。

Rule::Deduped の拡張 engineでMySQLを扱えるように
Plagger::Rule::Deduped::MySQL
Plagger::Rule::Deduped::DBI
みたいなのを作る
Rule::Dedupedは、compare_bodyオプションにてMD5 hashによるチェックを行う。
Rule::Fresh にて新着かどうかを判断
ブログの本文を取得するのにEFTやFilter::RetrieveEntry 以外の方法が無いのか検討中。
今のところ、EFTが一番なのかなぁ。
Filter::RetrieveEntry をベースに、ルールにマッチしない場合は置き換えないような形も検討。
ちょっと精度を上げる必要あり。というか、自分のBlogがうまく取得できないのを、テンプレートを変更することで逃げずに、何とかしたい。
feedに載ってこない過去のエントリや、過去のエントリが更新された場合にそれをどうキャッチアップできるは要検討。
Search関連のプラグインをチェック
そろそろベースの設計をまとめよう。
SennaバインディングのMySQLだから、MySQLクラスターは使えない。
複数ページにわたる検索結果の取得をする場合、ひとつのDBからデーターを取り出すならoffsetを簡単に処理できるが、複数の場合はそうはいかない。
DBごとのoffsetを検索クエリーに持たせれば大丈夫か。
とりあえず、初期開発版は、マスタを複数DBに分けることは考えずに開発することにしましょう。
でもクローラー用DBとストレージ用DBは分けておこう。
投稿者 田中@グリニッジ : 19:46 | コメント (0) | トラックバック
2006年11月14日
ContOS4.3にPlaggerをインストール その3

PlaggerをCPANからインストールすると、最新版が追いかけにくくなりそうなので、subversionから適宜チェックアウトし、インストールすることに方針変更。
svn checkout http://svn.bulknews.net/repos/plagger/trunk/plagger
cd Plagger
perl Makefile.PL
make
make test
make install
でインストール可能。
投稿者 田中@グリニッジ : 18:56 | コメント (0) | トラックバック
2006年11月13日
CentOS4.3にPlaggerをインストール その2

そんでもって、CPANからPlaggerをインストールすると、テンプレートやその他パターンファイルなどの入った assets ディレクトリがインストールされないという、assets問題というのがあるそう。
SoftwareDesign誌にsubversionをインストールして、最新のPlaggerのソースコードをチェックアウトするように書いてあったけど、何の意味があるのかと思えば、このような理由でした。
で、インストール完了。
空のconfig.yamlを作成し、plaggerコマンドを実行してみたところ、とりあえず動作しているよう。
つづいて、hello world!を表示
global:
plugin_path:
- /usr/lib/perl5/site_perl/5.8.5/Plagger/Plugin
assets_path: /usr/lib/perl5/plagger/assets
timezome: Asia/Tokyo
log:
level: info
plugins:
- module: Subscription::Config
config:
feed:
- http://blog.tanaka-cs.com/index.rdf
- module: Publish::Pipe
config:
command: echo "hello world!"
みたいな形で、config.yamlを作成して、
plagger -c config.yaml
を実行し見てると、こちらも問題なさそう。
では、いよいよ開発に取り掛かりますか。
投稿者 田中@グリニッジ : 23:37 | コメント (0) | トラックバック
2006年11月11日
CentOS4.3にPlaggerをインストール

SoftwareDesign誌の10月号にPlaggerの特別企画があったので、そちらを参考にしながらのインストール
Bundle::CPANをインストール
ミラーサイトをftp://ftp.kddilabs.jp/CPAN/に指定してインストール
cpan> o conf urllist push ftp://ftp.kddilabs.jp/CPAN/
cpan> install Bundle::CPAN
cpan> quit
モジュールのインストール
CPANモジュール
cpan -fi Config::Simple
cpan -fi YAML < /dev/null
cpan -fi Module::Build
cpan -fi ExtUtils::CBuilder
cpan -fi ExtUtils::ParseXS
cpan -fi Test::More
cpan -fi Test::Pod < /dev/null
cpan -fi Test::Pod::Coverage < /dev/null
cpan -fi Exporter::Lite
openssl-develパッケージがインストールされているか確認
されていない場合は、
yum install openssl-devel
SSL関連モジュール
cpan -fi Net::SSleay
cpan -fi IO::Socket::SSL
cpan -fi Crypt::SSLeay < /dev/null
expat-develパッケージがインストールされているか確認
されていない場合は、
yum install expat-devel
XML関連モジュール
cpan -fi XML::Parser
cpan -fi XML::Simple
cpan -fi XML::LibXML < /dev/null
cpan -fi XML::SimpleObject
cpan -fi XML::XPathEngine
cpan -fi XML::Liberal < /dev/null
cpan -fi XML::FOAF < /dev/null
cpan -fi XMLRPC::Lite < /dev/null
HTML関連モジュール
cpan -fi HTML::TreeBuilder < /dev/null
cpan -fi HTML::Scrubber
cpan -fi HTML::ResolveLink
Plagger のTEST
cpan> test Plagger
18個くらい必須モジュールが足りなかった模様
Auto-installを[y]で足りないモジュールをインストール
(で、インストール継続中)
投稿者 田中@グリニッジ : 18:39 | コメント (0) | トラックバック
2006年11月07日
CentOS4.3にSennaのインストール

#巷では、CentOS4.4もよく目にするけど。そのうちアップデートしよ。
1) MeCabのインストール
http://mecab.sourceforge.jp/#download
より、mecab-0.93.tar.gz をダウンロード(wget)
./configure --prefix=/usr --enable-utf8-only
make
su
make install
2) MeCabの辞書のインストール
http://mecab.sourceforge.jp/#download
より、mecab-ipadic-2.7.0-20060707.tar.gz をダウンロード(wget)
./configure --prefix=/usr --with-charset=utf8
make
su
make install
3) sennaのインストール ※センナではなくセナ
http://sourceforge.jp/projects/senna/files/
より、senna-0.8.2.tar.gz をダウンロード(wget)
./configure --prefix=/usr
make
su
make install
4) MySQLのインストール
MySQL用のユーザーとグループを作成
/usr/sbin/groupadd -g 27 mysql
/usr/sbin/useradd -g mysql -u 27 -d /var/lib/mysql mysql
UTF8を扱うため、MySQL4.1を選択
http://dev.mysql.com/downloads/
より、mysql-4.1.21.tar.gz (Source) をダウンロード(wget)
tar で展開したディレクトリに入り、パッチを適用
patch -p1 < ../senna-0.8.2/bindings/mysql/mysql-4.1.20.senna.diff
patch -p1 < ../senna-0.8.2/bindings/mysql/mysql-4.1.20.senna.2ind.diff
autotoolsを用いて、configureを再作成 ← sennaのサイトに書いてあるとおり
libtoolize -c -f
aclocal-1.9
autoheader
automake-1.9 -c -a -i
autoconf
sql/sql_yacc.yyをtouchする
touch sql/sql_yacc.yy
./configure --with-charset=utf8 --with-extra-charsets=ujis,sjis --with-named-curses-libs=/usr/lib/libncurses.so.5 --with-senna
make
su
make install
-----
追記:mysqlクライアントで日本語入力が出来なくなるのでオプション追加の必要があった。ついでにいくつか追加。
./configure --with-charset=utf8 --with-extra-charsets=complex --with-named-curses-libs=/usr/lib/libncurses.so.5 --enable-assembler --enable-thread-safe-client --with-readline --with-senna
※オプションについては、sennaのサイトで情報あり
-----
データベースの初期化
/usr/local/bin/mysql_install_db
データベースディレクトリのユーザーをmysqlに
chown -R mysql:mysql /usr/local/var
cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf ←ここは規模に応じて
cp /usr/local/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
/sbin/chkconfig --add mysqld
/sbin/chkconfig --level 345 mysqld on
service mysqld start
rootユーザーにパスワードを設定
/usr/local/bin/mysqladmin -u root password 'new-password'
/usr/local/bin/mysqladmin -u root -h example.com password 'new-password'
5) おまけ php5.2.0のインストール
http://www.php.net/downloads.php
より、php-5.2.0.tar.gzをダウンロード(wget)
./configure --with-apxs2=/usr/sbin/apxs --enable-mbstring --enable-mbregex --enable-zend-multibyte --with-zlib --with-mysql
make
su
make install
cp php.ini-dist /usr/local/lib/php.ini
で必要に応じて編集
/etc/httpd/conf/httpd.conf
AddTypeの記述がある部分に以下を追記
AddType application/x-httpd-php .php