LoginSignup
2
2

More than 5 years have passed since last update.

Product Advertising APIで取得したXMLのElementを連想配列に追加する

Posted at

Qiita の使い方の勉強・練習含め、メモを投稿します。
提示情報不足な部分があるかもしれませんが、
どうぞご了承くださいませ。。
ブラッシュアップしていきます。

amazon APIを使ってXMLを取得した後、
データを整理したくてXMLから各要素を抽出することになりました。

Amazonは、一度に10個のデータを取得できます。
XMLの回答にはが複数あるので、その要素を連想配列で取得したいと思います。

function getDatafromXML(xmlData){
data = [];
var element = xmlData.getElement();
var item = element.getElement("Items").getElements("Item");
for(var i = 0; i <item.length;i++){
data[i] = item.getElement("ItemAttributes").getElement("ListPrice").getElement("Amount").getText();
}
return data;
}
function getPrice(){
var price = [];
price = getDatafromXML(xmlData);
Logger.log(price);
}

これで実行したところ、[nullの要素をgetElementできません」
とエラーが返ってきてしまいました。

どうやらAmazonのレスポンスの中には、存在したりしなかったりする要素があるので、getElementで取得する前に、その要素があるのかを判定する必要あります。

以下のようにif文で判定しようとしましたが、まだうまく行きません。
if(item.getElement("ItemAttributes").getElement("ListPrice").getElement("Amount"){
data[i] = item.getElement("ItemAttributes").getElement("ListPrice").getElement("Amount").getText();
}
function getPrice(){
var price = [];
price = getDatafromXML(xmlData);
Logger.log(price);
}

ifの条件文は、1要素ずつしかできないようなので、以下に修正
完成版
function getObjfromXML(xmlData){
var obj = {};
var element = xmlData.getElement();
var items = element.getElement("Items").getElements("Item");
for(var i = 0; i <item.length;i++){
if(items[i].getElement("ItemAttributes")){
if(items[i].getElement("ItemAttributes").getElement("ListPrice")){
if(items[i].getElement("ItemAttributes").getElement("ListPrice").getElement("Amount")){
obj["price"] = items[i].getElement("ItemAttributes").getElement("ListPrice").getElement("Amount").getText();}
}
}
}
return obj;
}
function getPrice(){
var price = [];
price = getDatafromXML(xmlData);
Logger.log(price);
}

実行結果

これでうまくXMLのElementを取得出来ました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2