繰り返す石ころ

世の中ってたのしい

KindleStoreの新刊を出すサイト使った

サイトできたよー

漫画やラノベの新刊を、KindleStoreから買うためだけのサービスを作った。

KindleStoreって、新刊コーナーが最近電子書籍化された古い漫画で埋め尽くされたりいるなど、諸々辛い点がある。現実の本屋の新刊コーナーのように、新しい書籍かつ一般的に売れてる書籍だけ並ぶようなものが欲しかった。

ただ、Amazonさんのアソシエイトの審査が通らないから、URLはここに書かないしこのままお蔵入りかもしれんね。それについては後述。

使用環境

使ってる環境は以下。

言語とフレームワーク以外は別のにしたかったのだけど(MariaDBとかにしたかった…)、時間がもったいなかったので、経験があるものにしておいた。

使用gem

主な使用gemは以下の通り。

# Product Advertising APIを使うため
gem 'amazon-ecs'
# 半角 <=> 全角 の変換
gem 'moji'
# cronに作ったバッチ(rakeのコマンド)を設定するため
gem 'whenever', :require => false

あとは自力でゴリゴリと。MySQLのgemとかは略してます。

実装

ざっくり言うと、以下のような実装をした。

  1. AmazonからAPIを通して電子書籍のデータを取ってくる
  2. データが怪しいので、紙の本(オリジナル)を再検索してデータを照合・訂正する
  3. 諸条件でフィルタリング(古すぎる本などは表示しないため)
  4. 表示

サーバのセットアップとか合わせて、全部で50時間ぐらいかかったと思う。2番と3番がわりとキツくて、半分以上の時間を取ったのではないかと。かなりの表記ゆれ等があって、それの対処が辛かった。

入ってるデータがテキトーすぎる件

例えば、APIから取れる本のデータには、出版日とリリース日というものがある。多くのデータは、出版日を紙の本が出た日、リリース日をStoreで販売開始した日としている。

…のだが、何割かのデータは出版日が間違っている。1998年に出版された本の電子書籍版が、出版日とリリース日ともに2014年になっていたりする。今回のサービスでは、これを頑張って訂正するプログラムを書く必要があるのだ…。

他にも色々とあった。その一部をご紹介しよう!

  • リリース日より出版日が未来になっている(本来は出版日が必ず古くなる)
  • 出版日に日数がない(2014-06-24となるはずが、2014-06までしかない)
  • 電子書籍には巻数があるのに、紙の本には巻数がないラノベ(サブタイトルのみある)
  • 電子書籍版と紙の本で、著者の姓と名の間の空白があったりなかったり、全角だったり半角だったりする
  • 電子書籍版と紙の本で、レーベル名があったりなかったりする

などなど…。

ここに書いていない事含め、いくつかは辛すぎて放置していることを、ここで懺悔する。

今後

AmazonAPIを使うには、アソシエイトのIDが必要であって、ちゃんと運営するのであればアソシエイトの審査をパスすることは必要条件になる。

ただ、審査に全然通らないので…。10回審査に落ちたら諦めようと思う。今は3回落ちたので、あと7回はチャレンジしてみるかな。

次はiPad向けのアプリを作ろうと思っているので、そっちをやりつつ、様子を見て(色々変えつつ)もう一回審査に出してみようと思う。