« 2006年10月 | トップ | 2006年12月 »

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

投稿者 田中@グリニッジ : 17:31 | コメント (0) | トラックバック