人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

YahooショッピングAPIの値取得に関して。
javascript(jquery)でyahooショッピングAPIからデータを取得&表示するサンプルを作成しています。
データはjsonp形式で取得しhtmlに整形して出力するのですが、一部のデータだけ取得できずエラーになってしまいます。
■エラー内容
Uncaught TypeError: Cannot read property 'Medium' of undefined

■yahooショッピングAPIの仕様
http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html

■作成したソース
var url = yahooショッピングAPIへのリクエストURL
$.getJSON(url , function(data, status){
var item = data.ResultSet[0].Result;
for (var i in item) {
//↓breakpointを設定しこの時点の値を見るとちゃんと値は入っています。
var test = item[i].Image.Medium;
arr_ya_shop.push([
item[i].Name,
item[i].Url,
item[i].Price,
//↓ここで「Medium」がエラーになる。
item[i].Image.Medium
]);
}
〜arr_ya_shopに格納した値の処理〜
});

原因を教えていただけたら幸いです。

●質問者: 雨の日
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Lhankor_Mhy
●100ポイント
 for (var i in item) {

これが原因ですね。
for in はすべてのプロパティを拾うので想定していないことになってると思います。ループを追っていくと i には Result などの値も入っており、item['Result'].Image は undefined なのでエラーになっていると思います。


Lhankor_Mhyさんのコメント
参考 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for...in

雨の日さんのコメント
iの値を確認しました。おっしゃる通り、想定外の値が入っていました。 0から始まって19で終わると思っていたのですが、最後に"Request"や"Modules"という値が入りエラーになっていたようです。 ただこうなってきますと、for inではループの制御ができない(Lhankor_Mhyさんが書かれているようにfor inは全てのプロパティを拾ってしまう)ので別の方法を探すということになるのでしょうか?

Lhankor_Mhyさんのコメント
そういうことになると思います。 仕様を見ると、totalResultsAvailable:検索数HIT数 という値が返ってくるようなので、それを使ってループさせればいいかと思います。

Lhankor_Mhyさんのコメント
あ、違いますね。totalResultsReturned:返された値の個数 の方でした。

2 ● snow0214
●100ポイント

作成したソースの下の部分を変更してみてください。

var item = data.ResultSet[0].Result;

var item = data.ResultSet[0].Result.Hit;

雨の日さんのコメント
ご回答ありがとうございます。 下記に記載されているレスポンスフィールドをご確認頂きアドバイスをして頂けたかと思います。 > ■yahooショッピングAPIの仕様 > http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html 私も当初は.Hitを入れていたのですがデータが取得できず、実際のレスポンスフィールドを確認したところHitは不要でした。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ