top


総投稿数 本 
no_

スポンサーサイト

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

Amazon Webサービス その3:頁の遷移だ ・・・ 【AmazonECS4】

 2008-09-14
 続けて・・・「創る(創ってる)」ネタ。 ・・・ 挽回、挽回。
 「創るmetaboy」 です!

 さて、先日作成した、オリジナルサイトにての
 「Amazon WebService」を
 利用したテストスクリプト・・・ その3です。

Amazon Web Service TEST の改造 ( Services_AmazonECS4 )

お待ちかね(?)、
◆頁の遷移
 ※Amazon Web Service をただ利用するだけでは
  最初の10件しか検索結果を返しません。
 ※これは、Googleや他のAPIでもよくあることですね。

 ■件数
  さて、どうするか・・・

  件数のみ取得するオプションはないようだが、
  ItemSearch のオプションの中の
  ・ItemPage が使えそうだ。

   >(0916:あるじゃないか! よく調べろ!)
     ということで・・
     こちら で修正報告
     以下は、まぬけな経過記録としてそのままにしておきます。



  ※本当はもっと違う方法があるのだろうが
   次のような考え方・構成で実現する(ち、力まかせ!)

  ※もっと、きれいな他の方法ご存知の方、ぜひ
   お教えください!!

  ****************************************
  1:まず「取得する最大件数」を決める
   ・利用する用途や条件にもよるだろうが、
    まずこうすることで
    少しでも負荷を軽くする ことに決定

   :ただし、利用者に選択権は必要だ。
    いくつか選択肢を用意し、プルダウンで
    「最大取得件数」を設定できること にする

  ****************************************
  2:検索において
   ・最大取得件数から、「最大取得頁数」を計算
    ※基本的に 10で割るわけですが・・・

     [ ちょとTIPS ] ここで得たこと披露。
     ・ItemSearch を行ったとき
      カテゴリ(ストア)に、何かを指定したときは
      最大10件 だが
      「全て(Blended)を指定すると そうならない
      > 最初のテストサンプル で試してみてください

   :で、1頁10件として進めやすくするために
   (今回は)「全て(Blended)」 を プルダウン選択肢からはずす

  ****************************************
  3:実際の検索では
   ・「最大取得頁数」をループさせ、
    結果を配列変数に格納してゆく
、のですが・・・

     少しでも負荷を減らすため

     ・一番最初の頁のときだけ 配列変数へ格納
     ・後は、
       検索結果から頁ごとの「検索結果アイテム数」を出し、
       累積するのみ

   :(それにより) 総アイテム件数を取得
    ※当然、設定している「取得する最大件数」内で break

   :(この最初の検索で取得した)
    ・総頁数
    ・総アイテム数
    などを、htmlのhiddenタグで管理

   :頁遷移のナビゲーションを表示させる

  ****************************************
  4:頁遷移のナビゲーションを使うときは、
    頁を指定するわけですから、

    ループさせるのではなく

   :指定した値を $options["ItemPage"]=(指定頁);
    と、指定するだけ

  ****************************************
  5:また、
    ・カテゴリ(ストア)の選択肢
    ・検索キーワード
    ・最大取得頁数
     などを、利用者が変更した場合は
   :htmlのhiddenタグで管理された値を初期化する

 一応、中心になるソースを載せておきます。
 お役にたてれば・・・
 (間違いや、もっといい方法、など ぜひお知らせください)

//メイン部分
if($str_keywords==''){ $str_keywords = "php"; }
if($searchIndex==''){ $searchIndex = "Books"; }
if($max_setitems==''){ $max_setitems = 50; }

define('MAXNUM_GETITEM', 200);
if($flg_gosearch==1){
define('ACCESS_KEY_ID', '*************');
define('ASSOC_ID', '*************');
define('DIR_PEAR_PHP', '/(pear 格納ディレクトリ)/php/');
define('NUMITEM_ONEPAGE', 10);
ini_set("include_path",DIR_PEAR_PHP . ini_get("include_path"));

require_once '/(pear 格納ディレクトリ)/php/Services/AmazonECS4.php';
require_once '/(pear 格納ディレクトリ)/php/Cache.php';

$maxcnt_viewpage = number_format(($max_setitems/10),0);

$amazon = new Services_AmazonECS4(ACCESS_KEY_ID, ASSOC_ID);
$amazon->setLocale('JP'); # 日本を指定
$amazon->setCache('file',array('cache_dir' => '/(pear 格納ディレクトリ)/php/cached/'));
$amazon->setCacheExpire(86400); // 86400 seconds = 24 hours
$amazon->setVersion('2008-08-19');

$options = array();
// 検索ワードと取得情報の細かさの指定
$options['Keywords'] = $str_keywords;
$options['ResponseGroup'] = 'Medium';
$options['SearchIndex'] = $searchIndex;

$results=array();
if(!($num_page>0)){ $num_page=1;
$cnt_page=1; $get_page=0; $max_getitems = 0;
while($cnt_page <= $maxcnt_viewpage){
$options["ItemPage"]=$cnt_page;
$result = $amazon->ItemSearch($options['SearchIndex'], $options);
if (PEAR::isError($result)) {
break;
}else{
if (!isset($result['Item'][0])){ break;
}else{
$get_page++;
if($get_page ==1){
array_push($results,$result);
}
$max_getitems += sizeof($result['Item']);
if($max_getitems > $max_setitems){ break; }
}
$cnt_page++;
}
}
$max_page = $get_page;
}else{
$options["ItemPage"]=$num_page;
$result = $amazon->ItemSearch($options['SearchIndex'], $options);
if (PEAR::isError($result)) {
break;
}else{
}
if (!isset($result['Item'][0])){
}else{ array_push($results,$result);
$get_page=1;
}
}
}

その上で、

HTMLには
<form method='post' action='<? echo $_SERVER['PHP_SELF']; ?>' name='mainform'>
<input type="hidden" name="flg_gosearch" value="">
<input type="hidden" name="num_page" value="<? echo $num_page; ?>">
<input type="hidden" name="max_page" value="<? echo $max_page; ?>">
<input type="hidden" name="max_getitems" value="<? echo $max_getitems; ?>">

があり、これらが2頁以降あった場合に
保持され、表示を行います。

また
私が、hiddenタグの制御によく使う
JavaScriptの関数として
function SetHiddenVal(strobj,toVal,op){
var form = this.document.forms[0];
form.elements[strobj].value = toVal;
if(op == 1){ form.submit(); }
}

などを用意しておき

・最初の検索ボタンでは、
onclick="javascript:SetHiddenVal('flg_gosearch',1,1);

として実行

・カテゴリ(ストア)の選択肢、検索キーワード、最大取得頁数
 が変更された時は
onChange="javascript:SetHiddenVal('num_page','',0)"

として、初期化し、

・頁遷移の 頁番号をクリックした場合は
SetHiddenVal('num_page','".$p."',0); SetHiddenVal('flg_gosearch',1,1);

で、頁を移動させるわけです。

・・・まぁ、HTMLやJavaScript はソース見ればお分かりですね。


◎これで動いてる新しいテスト版利用サンプル◎

from 創ったmetaboy

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


commentsコメント
comment_post












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

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

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

 

リンク集

 

最近の記事

 

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

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

 

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