「Xangoがデフォルトの状態でrobots.txtをハンドルできるといいのにー」って結構聞く。俺もその期待には応えたいとは思うのだけどこれが実はなかなか難しい。なんでかというと、robots.txtの処理は意外と難しいから(笑)


というのも、パースしたりなんだりはいいのだけど、大量のrobots.txtデータを保存しつつ、高速で適用するというのが結構知恵がいる上にアプリケーションのコンテキストによって大分処理が違うのですな。某サービスの場合は実はrobots.txtの処理は全てデータベース上で行っている。Perlでやってるとメモリ食うし、遅いんだもん。


でもじゃあそれを一般化できるかというと、少なくとも俺のやってるやりかたではできない。っていうか、PostgreSQLのストアドプロシージャをガリガリガリガリ使っているからなんだなー。同じロジックをSQLiteでやれと言われてもできん・・・


ちなみにLWPに入ってるWWW::RobotRulesはとても参考になるが、あれはメモリを食いまくる。WWW::RobotRules::AnyDBM_Fileはメモリを食わないが、どちらにしろ取得してきたrobots.txtをリニアースキャンするので使えない。100万件あったら、それをリニアースキャンするんですよ、奥さん!


ってことで難しい。何か一般化できるいいアイデアはないもんかね。