AmazonWebサービスだと、みんなと同じなのでBk1を使ってみることにした。
bk1の画像とか各情報がリアルタイムで欲しい
でもAmazonのような巨大WebサービスがBk1には存在しない。ブリーダーの新規募集が終わってるほどお粗末。なんとかして、価格情報とか各種データを取り出してみたい。スクレーピングは最終手段として何か良い方法を探してきた。
簡単リンク君をみつける。こいつ送信したTMLコードをそのまま返してくる。これは使えそうだ。JavaScriptやPHPやPerlのコードも吐き出すんじゃないか。
ISBNからBk1の情報を調べられる。
<?php /* * Bk1の商品情報を取得するスクリプト * * 動作原理:簡単リンク君にEvalできるソースコードを作ってもらう。 * @since 07/03/21 * @last modified 07/03/21 * @param $isbn ISBN か BIBID を指定する。 * @return Object Bk1の商品情報を持つオブジェクト */ function Utena_Bk1_ItemLookUp($isbn) { /** HTTP_Client */ require_once "HTTP/Client.php"; $cli = new HTTP_Client(); /** request headers */ $header["UserAgent"] = "bookmacro.com/Spider (hatena_id=takuya_1st)"; $header["UA-CPU"] = "x86"; $header["Referer"] = "http://breeder.bk1.jp/cgi-bin/link/create.cgi"; /** request data **/ $data["bibid"] = $isbn; $data["tmpl"] = '__PHP__SRC__START__$bk1_item->URL="[URL]";' .'$bk1_item->BIBID="[BIBID]";' .'$bk1_item->ProductName="[ProductName]";' .'$bk1_item->Author="[Author]";' .'$bk1_item->ISBN="[ISBN]";' .'$bk1_item->ReleaseDate="[ReleaseDate]";' .'$bk1_item->Manufacturer="[Manufacturer]";' .'$bk1_item->ImageUrlSmall="[ImageUrlSmall]";' .'$bk1_item->ImageUrlLarge="[ImageUrlLarge]";' .'$bk1_item->Availability="[Availability]";' .'$bk1_item->ListPrice="[ListPrice]";' .'__PHP__SRC__END__'; /** post data to server */ $cli->post("http://breeder.bk1.jp/cgi-bin/link/create.cgi", $data ); $response = $cli->currentResponse(); /** get response and eval **/ $html = $response["body"]; $server_enc = str_replace( "text/html;charset=", "", $response["headers"]["content-type"]); $html= mb_convert_encoding( $html, "utf-8", $server_enc ); $code = preg_match("/__PHP__SRC__START__(.*)__PHP__SRC__END__/", $html, $matches); $src = $matches[1]; $src = str_replace("¥","", $src ); eval($src); return $bk1_item; } //動作てすと var_dump( Utena_Bk1_ItemLookUp("4592182847") ); /** テスト結果 *************************** object(stdClass)#3 (11) { ["URL"]=> string(58) "http://www.bk1.co.jp/product/2761920/?partnerid=99easylink" ["BIBID"]=> string(7) "2761920" ["ProductName"]=> string(28) "ボクを包む月の光 4" ["Author"]=> string(16) "日渡 早紀著" ["ISBN"]=> string(10) "4592182847" ["ReleaseDate"]=> string(6) "2007.3" ["Manufacturer"]=> string(9) "白泉社" ["ImageUrlSmall"]=> string(55) "http://img.bk1.co.jp/bookimages/0276/027619200000_s.jpg" ["ImageUrlLarge"]=> string(53) "http://img.bk1.co.jp/bookimages/0276/027619200000.jpg" ["Availability"]=> string(41) "通常24時間以内に発送します。" ["ListPrice"]=> string(3) "410" } */
amazonに画像無くてもBk1から取得できたりするんだけど。
取得しちゃうとBk1に怒られるんじゃ。。。bk1の中の人教えてください。この使い方ダメデスカ?
bk1のbibidとISBNの相互変換ができるのはかなり便利だと思います。ISBNからBIBIDに変換するのにもっと良いやり方あるかな?教えてほすぃ・・・
ちなみに戻り値のObjectは,簡単リンク君そのもの
//オブジェクト戻り値 //[URL] 商品ページへのアフィリエイト対応URL //[BIBID] 商品コード //[ProductName] 商品名 //[Author] 著者名 //[ISBN] ISBNコード //[ReleaseDate] 刊行年月 //[Manufacturer] 出版社 //[ImageUrlSmall] 画像のURL(小) //[ImageUrlLarge] 画像のURL(大) //[Availability] 在庫状況 //[ListPrice] 価格
これで、Amazon ECSとbk1をマッシュアップしたAPIを作れますよね〜〜。Bkamazon1みたいなサイトができそうだ。残念なのはBk1のブリーダーの新規募集が終わってること。