2010年11月8日月曜日

MA6に応募

 Google App Engineを使っていればエントリーの要件を満たすことが分かったので、AozoramazonMashup Award 6に応募してみました。

Mashup的要素はGAEではなく、Product Advertising APIを使っている所なのですが、Amazon.co.jpは協賛企業ではないので、この点はエントリー要件に寄与しません。それどころか、協賛しているコンペティターにとっては不参加要件にしたいくらいでしょう。

2010年11月6日土曜日

AozoramazonをAjax化した

 レスポンスの遅さ問題を緩和するためのAjax化を完了。作品リストに遅れて検索結果が現れるようになった。

 サービスの名前は、当初は青空ナビにでもしようと思ったが、ナビと言えるほど案内機能が充実していないので、青空文庫とAmazonをつなげる意味で、単純に名前を連結してAozoramazonとした。

 誰も見てないと思うけど、ここ

やった事とやってない事

作ろうと思っていた機能のうち、以下の物はできた。

  • タブメニュー
  • 新着情報
  • レビューのポップアップ(jQueryのDialog)
  • 作品単位のページ。
やろうと思っていてやっていないのは、

  • 作品長、作品数で作家を分類してマッピングする仕組み。ジャンル関係なし、読むのに必要な時間をキーにしてエイヤッ!で選ぶような感じ。
  • 背景を実写青空写真に変更。
  • ロゴ画像
である。しかしその前に、AJAX化を優先させることにした。1ページを表示するまでにAmazonへ何度も検索をかけるため、どうにもレスポンスが悪すぎる。コレに比べたら、他の問題はたいしたこと無い。

2010年11月4日木曜日

Amazonへのリンクが一応できた

 青空文庫の作品に関連するAmazon商品情報をリストアップする仕組みが大体できた。作者毎の作品リストで、各作品の底本とキーワード検索結果の画像を列挙し、画像からAmazonへリンクされるようになっている。
 これから作らなければならないもの。
  • タブメニュー
  • 新着情報
  • レビューのポップアップ
  • 作品単位のページ。今は青空文庫の作品カードへジャンプするが、関連商品の検索結果を経由するようにしたい。
  • 作品長、作品数で作家を分類してマッピングする仕組み。ジャンル関係なし、読むのに必要な時間をキーにしてエイヤッ!で選ぶような感じ。
  • 背景を実写青空写真に変更。
  • ロゴ画像

2010年10月30日土曜日

Google App Engineのcronを日付指定で実行

 GAEのcronで「毎月5日の午前4時」のような日付指定を設定したかったのだけど、そういう構文は無いらしい。その代わり、第一月曜とかは可能。なので、

cron:
- description: monthly ranking update
url: /tasks/rank/fetch
schedule: 1st mon,tue,wed,thu,fri,sat,sun of month 04:00
timezone: Asia/Tokyo
のように第1週の7日間に毎日起動して、スクリプトの中で日付を調べて動作する/しないを判断するようにした。
 日本のtimezoneはAsia/Tokyo。JSTとかにするとappcfg.py updateで最後のcorn更新のメッセージで500(server error)を吐く。しかしログに残らず(Admin Logには成功した変更のログしか残らない)、ヒントも無いので原因を見つけにくい。

2010年10月23日土曜日

青空文庫リストDBの再構成

 青空文庫の作家別作品一覧CSVから作家リスト、作品リストを再構成するスクリプトがだいたい出来た。「翻訳者名等」のカラムが曲者で、作者不詳の外国作品等で翻訳者と著者を兼ねる人が居る、編集者もここに入るが翻訳者との区別がつかない等が問題。編集者としての存在は今のところ1作品だけなので無視して、著者と翻訳者しか居ないという前提で矛盾無く扱える手順はできた。
 CSVにはWeb上で公開されている読み仮名などの情報が無いので、各著者、作品毎に青空文庫をスクレイピングして情報を追加した。読み仮名はソートで必要になるし、生誕日がわかれば「今日はどの作家の誕生日」というトピックでお勧め作品のリストアップができる。没年月日も取り込んだけど、これは使わないだろうな。

 スクレイピングは、当初はBeautifulSoupを使っていたが、パースエラーが時々起きる上に、回避手段としてblog等に載っているhtml5libを使う手段が実はhtml5lib側で拒絶されてる事がわかり、lxmlを使う方法に改めた。結果、回りくどいやり方で取り出していた文字列がXPathを使って一発でできるようになり、パースエラー回避以外にもメリットがあった。lxmlはGAE上では使えないようだが、あちらではスクレイピングはしないだろう。

2010年10月20日水曜日

Google App Engine SDKは32bit

64bitのActivePython入れても動かなかったよ。