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のブリーダーの新規募集が終わってること。