« 遺憾の意が効かない・・・だと? | メイン | 15年落ちの消防車って・・・ »

2012年7月 6日

コミック発売日一覧完成

ラノベ発売日一覧表を作ろうと思った時、最初はAmazonのAPIを使って自動的にデータを取得する方法を考えましたが、実際にAPIを使ってデータ収集を行ってみたところ、AmazonのAPIで取得できる情報ではレーベル分けが難しく、出版社から出る新刊情報の方が早かったりで、それを先にデータベースに登録し、後からAmazonが割り振るASINという商品管理IDを付け加えたりと面倒な事が多く「どうせ月に100冊程度だし」ということで、データは手動入力で行うことに。

そんなこんなでコミックの方もコレを流用して手動入力としましたが、月に出る数が膨大すぎて挫折orz

ということで、コミックの方はAmazonのAPIを使って自動的にデータを取得する方法にしようと思いAmazonのAPIの仕様をググって資料集めを開始。

ベースとなるソースは既にあるので、あとはコミックのデータを集めてそれをデータベースに流し込んだり、情報が更新されていたらそこだけ更新したりするだけなので、これは楽かな? と思っていたら、試作版のスクリプトを走らせてみたところ、データベースに流し込む情報量が圧倒的に足りていないことが判明。

これはAmazon APIの仕様的なもので、Amazonからデータを受け取る場合はBrowseNodeというジャンルを指定するIDを送り、そのIDに関連したデータを10タイトルが1セットになっているXML形式で受け取るのですが、これが10ページ分しか用意されておらず、コミックのBrowseNodeは「2278488051」なので、これだけを送っても100冊分のデータしか受け取れないと。

これだけでは全然情報が足りないので、Keywordsに色々と文字列をぶち込んで更に細かく分けて情報を受け取る必要があるのですが、講談社や小学館、集英社などになると一月に出すコミックの量が多すぎて、例えばKeywordsに「講談社」だけを指定しても、100冊では講談社の全てのコミックを受け取ることができず、更に細かく指定する必要がでてきたりと、かなり面倒なことに。

それに加えてKeywordsに日本語の文字列を入れると謎のエラーがでてXMLが返ってこないしorz

まあこれはググれば一発でしたが、AmazonのAPIはUTF8しか受け取らないよ! ということで、文字列をUTF8にしてからURI ESCAPEするだけで解決。

Amazon APIを使う場合、ROOT権を持っているサーバーがあれば無問題なのですが、やっすいレンタルサーバーだとそんなモノ有るわけもなく、既に用意されている便利なモジュール類が使えないため、ここが一番躓くところだと思いますが、そんな時はググれば解決! ということで、同じ悩みを抱えている人がやはり居て、その辺もさっくりと解決し、Amazonから自動的にデータを取得するスクリプトが無事完成。

ちなみに参考にしたサイトは下記で、これらが無かったら挫折していたかも。

AmazonのAPIで認証が必要になったのでPerlで対応したよ - (゚∀゚)o彡 sasata299's blog
http://blog.livedoor.jp/sasata299/archives/51311034.html

Amazon API -Perlで署名付URI生成 PythonでXMLを取得-
http://blog.bitmeister.jp/?p=1288

404 Blog Not Foundperl - URIAmazonAPA released!
http://blog.livedoor.jp/dankogai/archives/51211577.html

投稿者 kenji : 2012年7月 6日 10:30


トラックバック

このエントリーのトラックバックURL:
http://kensbar.net/mt/mt-tb.cgi/3852