こんにちは。
楽天の商品検索結果一覧をHTMLファイルにロードして表示したいと思います。
楽天商品検索APIを利用します。
http://webservice.rakuten.co.jp/api/itemsearch/
ThinkIT
http://thinkit.co.jp/article/1103/1
こちらのサイトで紹介されている、
http://www.h-fj.com/thinkit/rest/jquery.html
このサンプルを利用すればできそうなのですが、楽天APIは一度に表示できる商品が30個までという制限があるため(hitsパラメータの上限が30)、pageパラメータを、page=1、page=2と切り替えていかなければすべての検索結果を表示できません。
そのpageパラメータの指定を簡単に切り替えて表示していく方法がよくわからず、皆様にアドバイスいただきたいです。
理想は、HTMLページをロードした時点で1ページ目の30商品を表示し、「次へ」ボタンまたは数個配置したページボタンを押すことで次のページの商品に切り替えていくというシンプルなものです。使っているサーバーではPHPは使えずJavascriptとCSSのみです。
当方Javascriptは勉強中で、まだ初歩的な文字列操作やサンプルの改変ぐらいしかできません。恐れ入りますが、もし可能でしたらサンプルコードなど教えていただけると助かります。
何卒よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#1です。
idがないのでこちらではテストしていませんが…
>ロード時には1ページ目を表示できるようにはできました。
>search('検索キーワード','ページ番号');
…で、ページ指定して取得できるのであれば、最初に検索を実行したときにヒット総数も取得できるはずですので、それを表示個数で割ればページ総数が計算できるはずです。
そのページ数に対してリンクを作成すればよいことになりますが、ヒット数が多いと(例えば1万とか)、一度にそれだけのリンクを表示するとものすごいことになってしまうので、現在表示中のページの前後で10ページ分だけをメニュー表示するなどのような工夫が必要かと思われます。
総数の取得は、例えば参考サイトのcallbackのようにdata(変数)で結果を受け取っているとすれば、data.Body.ItemSearch.countで取得できると思われます。
><body onload="search('検索キーワード','ページ番号')">
>では実行されません。
同じことなので実行できるはずですが、データを正しくセットしているでしょうか?
(キーワードやページ番号などが正しくセットされていますか?)
>さらに2ページ目、3ページ目と切り替えていく機能の実装方法で行き詰っている次第です。
serch()の部分が別途できてるとして、インデックスの表示と制御のごく簡単なサンプルを…
*単純な例なので、ページ数が多いときの表示制御はしていません。
*大きな総数を指定すると、多くのページインデックスが表示されますのでご注意。
みちのりが少々長そうな気はしますが、部分々々に分割して作成してゆけば可能かと思いますので、頑張ってください。
(全角空白は半角に)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>test</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
<!--
#index span{display:inline-block; width:2em; text-align:center; text-decoration:underline; cursor:pointer; }
#index span.active{background-color:#ddf; text-decoration:none; cursor:auto; }
//-->
</style>
<script type="text/javascript" src="js/jquery-1.5.2.min.js"></script>
<script type="text/javascript">
<!--
function setIndex(maxCount, numOfItems){ //count総数, Itme表示数
var pages = Math.ceil(maxCount/numOfItems)+1;
var index = "", i;
for(i=0; ++i<pages;)
index += "\u003Cspan\u003E" + i + "\u003C/span\u003E";
$("#index").html(index)
.click(function(evt){
var t = $(evt.target);
if(t.hasClass("active")) return;
t.parent().children("span").removeClass("active");
t.addClass("active");
alert("page No = " + t.text()); //←ここで再読込みするなど
})
.children("span:first-child").addClass("active");
}
//テスト用のスクリプト(総数300、表示数30)
$(function(){
setIndex(300, 30);
});
//-->
</script>
</head>
<body>
<div id="index"></div>
</body>
</html>
No.1
- 回答日時:
単純に、リクエストのパラメータに「&page=ページ番号」を加えて番号を指定するのではできないのでしょうか?
方法的には他のパラメータの指定と同じですが、ページ番号が変数になるでしょうから
"~~&page" + page_num + "~~"
のように文字列連結をしてあげる必要があります。
この回答への補足
ご回答ありがとうございます。
すみません、質問が分かりにくかったと思います。どうやらイベントについての理解が浅いことが原因のようでして、恐れ入りますが、引き続きアドバイス頂けないでしょうか。
>「&page=ページ番号」を加えて番号を指定するのではできないのでしょうか?
ページ番号は指定できます。ページ数を指定するような関数を作り、下記のようにHTMLロード時には1ページ目を表示できるようにはできました。
$(document).ready(function(){
search('検索キーワード','ページ番号');
});
ここからが問題で、さらに2ページ目、3ページ目と切り替えていく機能の実装方法で行き詰っている次第です。
「 1 | 2 | 3 | 4 | 5 | 6 | 」
↑こんな感じのページ番号の切り替えリンクが作りたいと思います。まず、手動でHTMLでこのように記述したのですが、onclickイベントが発生していないのか、関数が実行されませんでした。
<div id="result">
<a href="javascript:void(0)" onclick="search('ケーキ', 1)"> 1 </a> |
<a href="javascript:void(0)" onclick="search('ケーキ', 2)"> 2 </a> |
<a href="javascript:void(0)" onclick="search('ケーキ', 3)"> 3 </a> |
・
・
・
</div>
↓最終的には検索キーワードを引き継いで、このように関数内にコードを記述したいのですが、現状やはりダメでした。
//ページ切り替えリンクを作る
var result ='<p>ページ</p>'
for (var i = 1; i <= page_count; i++) {
result +='<a href="javascript:void(0)" onclick="search(' + keyword + ',' + i + ')" value="' + i + '" />' + i + '</a> | ';
}
// ID「result」の要素に流し込む
$('#result').html(result);
ちなみに一番最初に表示するときも、
$(document).ready(function(){
search('ケーキ','ページ番号');
});
や
<form method="get" action="">
<input type="text" name="keyword" value="ケーキ" />
<input type="button" onclick="search(this.form.keyword.value,ページ番号);" value="検索" />
</form>
ではsearch()関数が実行されているのに、
<body onload="search('検索キーワード','ページ番号')">
では実行されません。
すみませんが、正しい書き方をアドバイス頂けると助かります。
なにとぞよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) パイソンでのプログラミングについて 3 2022/08/11 20:31
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- インターネット広告・アフィリエイト Googleによる楽天のエロ広告の表示を止めたい 2 2023/05/13 10:27
- メルカリ <メルカリShops>消費者庁による販売許可の出ている機能性表示食品?の調べ方から 1 2022/11/24 17:46
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- PHP PHP MySql ページング 2 2022/09/20 06:38
- ZOZOTOWN 楽天に出店しているサプリメント会社が怪しいです 4 2022/06/03 00:10
- 楽天市場 ゆうちょデビット 2 2023/01/18 13:10
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- PHP PHP ページング データベース 1 2022/06/16 10:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のページから移動してきた...
-
onLoadをbodyタグ以外で使用する
-
macでjavascriptを記述するには...
-
javascriptでalertの文字列をコ...
-
指定日まで画像カウントダウン...
-
<head>と<body>どっちに入れる...
-
<a href="#" …>の意味を教えて...
-
プルダウンメニューを別ファイ...
-
インラインフレームで表示され...
-
bodyにidをつける理由は何ですか?
-
ユーザーが更新ボタンを押さな...
-
乱数を一定時間毎に表示させた...
-
ランダムにページにアクセスしたい
-
pythonのWebスクレイピングでfi...
-
外部ファイルを読み込ませるた...
-
javascriptでbgmを自動再生する...
-
onbeforeunload時のwindow.open...
-
新しいウィンドゥを最大化で立...
-
ページの読み込みが完了してか...
-
VBscriptでVisualBasicのような...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでalertの文字列をコ...
-
onLoadをbodyタグ以外で使用する
-
変数の代入値を外部の.txtファ...
-
【javascript クロスブラウザ...
-
1 ~ Nまでの整数の総和(1+2+3....
-
javascriptにてonclickを無効
-
特定のページから移動してきた...
-
JavaScript で指定した月日に別...
-
楽天商品検索APIをjavascriptで...
-
指定の年月日時にcssを自動で切...
-
「jQuery」アニメーションをル...
-
セキュリティ保護の警告が出な...
-
macでjavascriptを記述するには...
-
type="text/javascript"
-
htmlソースの取得方法
-
ウィンドを開いたとき位置を指...
-
javascriptでページ内の一部分...
-
Refreshの回数
-
ホームページ上で残り日数をカ...
-
画像ファイルのアドレスに今日...
おすすめ情報