2007年05月21日

BOOKLOG ASIN No 取得 for JSONP このエントリーをはてなブックマークに追加

こんにちは、村地弘美です(嘘です)。

前回作成した タイトル取得API for JSONP と同じよーな感じでもう一個作ってみた。

ブクログ -WEB本棚サービス- というマイ本棚サービスでユーザが登録している本のASIN NoをJSON(p)形式で取得するよーなものである。

で、以下、その説明。
end point URL:
http://www.usamimi.info/~ryouchi/booklog/index.php
パラメータ:callback:
コールバック関数名を指定
パラメータ:user:
ASIN Noを取得したいブクログのユーザ名

使い方:
callback関数:viewasinno()
user:ryouchi
の場合、
http://www.usamimi.info/~ryouchi/booklog/?callback=viewasinno&user=ryouchi

などと指定する。

取得データはこんな感じになる。
viewasinno([{'asin':'4883924998'} , {'asin':'4916199626'} , {'asin':'4812420881'} , {'asin':'4104738026'} , {'asin':'4061823175'} , {'asin':'434400759X'} , {'asin':'4344007603'} , {'asin':'4763005014'} , {'asin':'408747402X'} , {'asin':'4198506612'} , {'asin':'4101448248'} , {'asin':'4894569116'} , {'asin':'4101270228'} , {'asin':'4198922330'} , {'asin':'4167659018'} , {'asin':'4062734567'} , {'asin':'4061821466'} , {'asin':'4061821105'} , {'asin':'4062734931'} , {'asin':'406273494X'} , {'asin':'4396631340'} , {'asin':'4163220909'} , {'asin':'4044295042'} , {'asin':'4062649020'} , {'asin':'4344403460'} , {'asin':'4344403452'} , {'asin':'416320900X'} , {'asin':'4043463022'} , {'asin':'4043541015'} , {'asin':'4104722014'} , {'asin':'4575234990'} , {'asin':'4396207557'} , {'asin':'4163228705'} , {'asin':'4101448175'} , {'asin':'4061820834'} , {'asin':'4344402685'} , {'asin':'4344402677'} , {'asin':'4797495588'} , {'asin':'4344405455'} , {'asin':'4488449018'} , {'asin':'4048734504'} , {'asin':'408747349X'} , {'asin':'434440551X'} , {'asin':'4758430594'} , {'asin':'4167642034'} , {'asin':'4035401900'} , {'asin':'4087472175'} , {'asin':'434440324X'} , {'asin':'4894563878'} , {'asin':'4062648121'} , {'asin':'4396326378'} , {'asin':'4488414028'} , {'asin':'4051029069'} , {'asin':'4796643796'} , {'asin':'4101058210'} , {'asin':'4043461011'} , {'asin':'404346102X'} , {'asin':'4104616028'} , {'asin':'410461601X'} , {'asin':'4758410216'} , {'asin':'448841401X'} , {'asin':'4575711950'} , {'asin':'4062738279'} , {'asin':'4334923755'} , {'asin':'4059000345'} , {'asin':'4062739682'} , {'asin':'4062739674'} , {'asin':'4062736691'} , {'asin':'4344004809'} , {'asin':'4796638113'} , {'asin':'4062680130'} , {'asin':'416768201X'} , {'asin':'434440307X'} , {'asin':'4062680157'} , {'asin':'4198915938'} , {'asin':'4041304024'} , {'asin':'4061817906'} , {'asin':'4041898048'} , {'asin':'4198613192'} , {'asin':'4198613206'} , {'asin':'4488416012'} , {'asin':'410443101X'} , {'asin':'4763004204'} , {'asin':'4041789796'} , {'asin':'4106027674'} , {'asin':'4062092980'} , {'asin':'4488425011'}]);

このAPIを利用して簡単なデモを作ってみた。



BOOKLOG ユーザ名を入力しボタンを押すと、テキストボックスの中身を取得し、「BOOKLOG ASIN No 取得 for JSONP」に渡すパラメータを作成する。

下記のよーな感じになるっす。

var aid = "ryouchih-22";
function getasinno(){
 // divタグ内をクリア開始
 $(list).innerHTML ="";
 $(ruri).innerHTML ="";
 $(buri).innerHTML ="";
 $user = document.getElementById('user').value;
 // divタグ内をクリア終了
 // jsonp取得用のURL作成
 // 下記のような形式で送る
 // http://www.usamimi.info/~ryouchi/booklog/index.php?callback= (コールバック関数名) &url=(タイトルを取得したいURL)
 requesturl = "http://www.usamimi.info/~ryouchi/booklog/index.php";
 requesturl += "?callback=viewasinno&user="+escape($user);
 // 取得したjsonpデータは外部スクリプトを埋め込むのと同様に利用可能
 var script = document.createElement('script');
 script.src = requesturl;
 script.type = 'text/javascript';
 document.body.appendChild(script);
 // データの内容を見てみるためのリンクを作成してみる
 $(buri).innerHTML = '<a href="http://booklog.jp/users/'+$user+'" target="_blank">' + $user + 'さんの本棚</a>';
 $(ruri).innerHTML = '<a href="'+requesturl+'" target="_blank">' + requesturl + '</a>';
}
function viewasinno(obj) {
 var resultData="";
 for(var i=0; i<obj.length; i++){
  // asin code
  var iCode = obj[i].asin;
  resultData += "<a href='http://www.amazon.co.jp/exec/obidos/ASIN/" + iCode + "/" + aid + "/ref=nosim/'target='_blank'>" + iCode + "</a><br />";
 }
 $(list).innerHTML = resultData;
}



BOOKLOG の HTML をスクレイピングしているので、そのうち動かなくなる予感がするっす。
なお、なんだかBOOKLOGがリニューアルするっぽいので、直ぐにでも使えなくなること請け合いである・・・orz

JSONP だと JavaScript の XMLhttpRequest() 関数を利用しなくても、
<script type="text/javascript" src"=http://・・・・"></script>
のよーに読み込むような感じでオブジェクトとして直ぐに使えるってのが便利かも。
クロスドメインによりアクセスが制限されている場合などはこんな感じでやればよかろう。今後APIの提供もJSONP形式で提供されることが多くなるよーな予感がするっす。
(といっても、実際はJSONもJSONPもまだ今ひとつよくわかってないっす・・・orz)
(って、このフレーズは前回の記事のコピペでした)
posted by りょーち | Comment(0) | TrackBack(0) | Web周辺技術
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: