楽天APIを利用して、全商品を取得していくようにする方法を教えてください。


楽天API
https://webservice.rakuten.co.jp/api/ichibaitemsearch/


※可能であればですが、アフィリエイト料率が高い順や、人気順に出来れば幸いです。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2016/06/26 18:36:36
  • 終了:2016/06/28 17:35:17

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4324ベストアンサー獲得回数17732016/06/28 17:26:52

ポイント500pt

https://webservice.rakuten.co.jp/api/ichibaitemsearch/
上記に書いてある通り、幾つかの制限があるために全商品を取得することはできません。

  • 必須パラメータ
    • 検索キーワード、ジャンルID、商品コード、ショップコードのいずれかが指定されていることが必須です。
  • 件数
    • 1ページあたりの取得件数:1から30までの整数、取得ページ:1から100までの整数という制限があるので、3000件までしか取得できません。

また、「※短い時間の間に大量に、同一のリクエストURLへアクセスすると、一定時間利用できなくなる場合がございます。テストの際にはご注意ください。」という制限も書かれています。


その範囲内でよければ、HTML + javascript だとこんな感じのコードで取得できます。
キーワードを「円」にして、アフィリエイト利用利率の大きい順で 150件を取得し、店名、商品コード、商品名を表示します。

<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="//raw.github.com/padolsey/jQuery-Plugins/master/cross-domain-ajax/jquery.xdomainajax.js"></script>

<script>
(function() {

    var APPID = '9999999999999999999';      // ★ここには楽天のアプリID を設定する
    var MAX_PAGE = 5;
    var n = 1;

    function put_item(item) {
        $("#output tbody").append(
`
<tr>
<td>${n}</td>
<td>${item.shopName}</td>
<td>${item.itemCode}</td>
<td>${item.itemName}</td>
<td>${item.affiliateRate}</td>
</tr>
`
        );
        n += 1;
    }

    function search_rakuten(page) {
        var keyword = encodeURIComponent("円");
        $.ajax({
            url: 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20140222?applicationId=' + APPID +
                '&keyword=' + keyword +
                '&sort=%2DaffiliateRate' +
                '&page=' + page,
            type: 'GET',
            dataType: 'html',
            timeout: 30000,
            success: function(resp){
                var work = document.createElement("DIV");
                work.innerHTML = resp.responseText;
                var data = JSON.parse(work.firstChild.nodeValue);
                for (var i in data.Items) {
                    put_item(data.Items[i].Item);
                }
                if (page < MAX_PAGE) {
                    search_rakuten(page + 1);
                }
            },
            error: function(xhr, status, error){
                alert("ERROR !");
                console.log("ERROR: ", status, error);
                console.log(xhr);
            }
        });
    }

    search_rakuten(1);

})();

</script>
</head>

<body>
<table id="output" border="1">
    <tbody></tbody>
</table>
</body>

</html>

こんな感じで取得できます。
f:id:a-kuma3:20160628172033p:image

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません