top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_865

いつでもランキング:とりあえず「Amazon」「Yahoo」「楽天]の3ポータル、切替式のランキングパーツはできた。でも、ちと不完全燃焼なのだ。 ・・・ 【創ったmetaboy】

 2009-04-20
 先日の投稿
 ・ランキングマッシュアップ:なるほど、ねぇ。また「やられた」な。ランキング部分に焦点を絞ったランキングサイトかぁ ・・・ 【マッシュアップ】

 での、
  「ショッピンGood!! ランキンGood!!」に
 触発されて始めた

 ・ブログパーツとしての
  この3ポータルのランキング表示ツール

 一応はできたのだけど、不完全燃焼。
 ほんとは
 (別ウインドウで表示しているように)
 いつでもランキング:ターゲットを探せ!
 こんな感じで、
  ・狭い枠で自動スクロールさせたかったのだが・・・

 かなわなかった・・・とは!

  追記に ▼

FC2ブログランキングにほんブログ村 IT技術ブログ Webサイト構築へブログ王ランキング人気ブログランキング人気ホームページランキングへ


more************************************************
◎ いつでもランキング:ターゲットを探せ!
************************************************


最初に、企画仕様。
ショッピンGood!! ランキンGood!!
 に触発されてつくったとはいえ、
 何か、一工夫加えなきゃな。

で、最初の仕様。
 
 ◆仕様策定◆
 ・3ポータル
  「Amazon」「Yahoo」「楽天」の
   売れ筋ベスト10 を切替表示する
  ・利用者が一度設定したポータルは
   次回訪れてくれたときにクッキー利用で
   反映する

  に加え、
 
  ・狭い枠内で、ランキングを
   閲覧できるように、自動的に
   縦スクロールさせる


 としたかったのだが・・・
 さて、それから、どうした。


 ■実際の構築

   それぞれの「ランキング取得」

   ***************
   □Amazon(本)
   ***************
    ・3つの中で、実はこれが一番ややこしい
     のだが、前に経験していることもあり
     比較的うまくいった。
     ・Amazon Webサービス その6:やっぱ、整列させたいよなぁ。 ・・・ 【AmazonECS4】

   ★Amazon Web サービス
    ※今回に関しては、すべて
     ・JavaScript でレイアウトを用意し
     ・iframe内で、PHPによるマッシュアップを
      行なっているので、
     「クロスドメイン問題」は(基本的に)発生しない。

    【値セット】
     Pearのライブラリを利用して、
     次のように、Services_Amazon に値を送る。
// AmazonのアクセスID とアフィリエイトIDをセット
$amazon = new Services_AmazonECS4(ACCESS_KEY_ID, ASSOC_ID);
$amazon->setLocale('JP'); # 日本を指定
// キャッシュディレクトリをセット
$amazon->setCache('file',array('cache_dir' => '*****/cached/'));
$amazon->setCacheExpire(86400); // 86400 seconds = 24 hours
$amazon->setVersion('2008-08-19');

$options = array();
// 検索ワードは、今回は無し
$options['Keywords'] = "";
// ★印のレイティングデータも得る
$options['ResponseGroup'] = 'Medium,Reviews';
$options['SearchIndex'] = "Books"; // 書籍に限定
$options['Sort'] = "salesrank"; // 整列順
$options['BrowseNode'] = 465610; // ブラウズノード
// ※ここがポイントだった。
//  これを指定することでランキングを取得できる

$options["ItemPage"]=1; // 1頁目のデータを取得
$result = $amazon->ItemSearch($options['SearchIndex'], $options);
if (PEAR::isError($result)) {
die('データの取得に失敗しました:' . $result->getMessage());
break; exit;
}else{
if($result['TotalPages'] > 0){ // データがとれれば
// このあたりは、今回は
// 使わないのだが・・・
$temp_maxcnt_viewpage = $result['TotalPages'];
$max_page = $result['TotalPages'];
$max_getitems = $result['TotalResults'];

$results=array();
array_push($results,$result);
}
}
 ・・・ ポイントはブラウズノードの指定

    【値取得】
     取得データの配列をループし
     1行ごとの表示を呼び出す
foreach ($results as $rt) {
foreach ($rt['Item'] as $item) {
if($temp_rank<=10){
displayOne($item,$temp_rank); // 一件分の表示
$temp_rank++;
}else{ break; }
}
}
 ・・・ XMLの配列構造は2段階。
     $rt['Item'] に含まれたデータを利用して
     表示する。


   ***************
   □Yahoo
   ***************
    ・Yahoo や 楽天は、ランキング情報の取得は
     比較的容易だ。
     Yahoo からは、
     ・Yahoo デベロッパーネットワーク で様々なAPIが提供されている。

   ★yahoo カテゴリランキング
    ※Yahoo!ショッピングの
     商品の売り上げランキング情報を取得する
     ことが可能な、APIだ。

   ・PHPを利用したサンプルが配布されている

    ※サンプルを改造利用させていただき・・・
    【値セット】
     PHPの 、simplexml_load_file を利用し
     次のように、RESR形式で。
$script_url = "http://shopping.yahooapis.jp/ShoppingWebService/V1/categoryRanking?appid=***&affiliate_id=***&affiliate_type=yid";
$hits = array();
$url = $script_url;
$xml = simplexml_load_file($url);
if ($xml["totalResultsReturned"] != 0) {//問い合わせ結果が0件でない場合,変数$ranking_dataに問い合わせ結果を格納します。
$ranking_data = $xml->Result->RankingData;
}
 ・・・ ポイントはブラウズノードの指定

      >> マニュアル「simplexml_load_file

    【値取得】
     取得データの配列をループし
     1行ごとの表示を呼び出す
foreach ($ranking_data as $ranking) {
if($temp_rank<=10){
displayOne($ranking,$temp_rank); // 一件分の表示
$temp_rank++;
}else{ break; }
}
 ・・・ 比較的、簡易な構造


   ***************
   □楽天
   ***************
    ・楽天から提供されている、
     ランキング情報取得用のAPIは
     この (version:2009-04-15) が最新更新日だ。

   ★楽天商品ランキングAPI
    ※こちらも、わかりやすい解説が用意され、
     RESTでの情報取得は簡単にできるようだ。

    【値セット】
     今度は、
     PHPの 、file_get_contents や
     xml_parse_into_struct を利用する。
$script_url = "http://api.rakuten.co.jp/rws/2.0/rest?&developerId=***&affiliateId=***";
$script_url .= "&operation=ItemRanking&version=2009-04-15";

#echo $script_url."<br>";

$contents = file_get_contents($script_url);
// XMLをパースして構造体(values)に入れる
$parser = xml_parser_create('UTF-8');
xml_parse_into_struct($parser,$contents,$values);
xml_parser_free($parser);
 ・・・ operation=ItemRankingの指定

    【値取得】
     取得データの配列をループし
     1行ごとの表示を呼び出す
foreach ($item_array as $item){
if($temp_rank<=10){
displayOne($item,$temp_rank); // 一件分の表示
$temp_rank++;
}else{ break; }
}



    いつものように
     ・動的にHTMLを書き込む形式で仕上げ
    将来的に「ブログパーツ」を想定する。

  なお、今回の制作において

  ・ランキング表示用の
   アイコンが必要になったが
   (1位~10位までのアイコン)

こちらで、配布されているものを
利用させていただいた。
王冠-画像-ランキング4 フリー素材
王冠-画像-ランキング4 フリー素材 ありがとうございました。



   さて、

 ■サイトを選択したときにクッキーに書き込み
  次回表示したときに再現するのは実装したが、

 ■別ウインドウ版のように自動的にスクロールさせるのは

   (例の)JavaScriptのセキュリティに配慮した
    制限によって実現できなかった。

     iframe を読み終えた後、
function sc(){
if(meta_search_rankings_cksc == 1){
clearTimeout(timerID);
timerID = setTimeout("sc()", 1 * 50);
if(noxY > 1000){ noxY = 0; }
iframe_rankings.document.body.scrollTop = noxY;
noxY++;
}else{
clearTimeout(timerID);
}
}
 ・・・ としているだけなのだが。

 いづれ、他の方法で実現する。

 ■公開

   □このブログ右サイドに用意
    (一番下)
    ※別ウインドウで開くものも用意
     した。
     こちらは、自動スクロール付き。
commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/865-9fdcf3ff
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。