API 出力から配列を作成しようとしています。次に、itemID で指定された 1 つの項目に配列をフィルター処理します。以下は私の試みです。関数テストに jsonArray が存在しないというエラーが表示されます。私はそれをグローバル変数か何かにする必要があると思いますが、それは私が壁にぶつかったところです。
function onOpen() {
var myUrl = "http://www.gw2spidy.com/api/v0.9/json/all-items/all"
var jsonData = UrlFetchApp.fetch(myUrl);
var jsonArray = JSON.Parse(jsonData);
return jsonArray
}
function test(itemID) {
var jsonFilter = jsonArray.filter(function(itemID){return itemID.data_id==itemID});
var jsonObject = JSON.parse(jsonFilter).result;
var adjustedValue = (jsonObject.min_sale_unit_price / 100);
return adjustedValue;
}
私は以前、次のコード (他の誰かから盗んだもの) で動作させていましたが、その関数を使用するたびに呼び出しが行われました。シートの更新ごとに呼び出しの数を 1 回に減らしようとしています (これは Google ドキュメントのスクリプト マネージャーにあります)。
// function to return the current sell value for an item (designated by
// the item’s ID number) from GW2Spidy's API formatted with copper in
// the tens and hundreds places
function getItemSellValue(itemID) {
// base URL for the API that will return JSON for the itemID supplied
var myUrl = "http://www.gw2spidy.com/api/v0.9/json/item/" + escape(itemID);
// fetches the information from the URL in an HTTPResponse
var jsonData = UrlFetchApp.fetch(myUrl);
// now we convert that response into a string so that we can use it
var jsonString = jsonData.getContentText();
// now, we turn it into a Javascript object for easier handling
// *note: I also remove the "result" wrapper object so we can
// use direct calls on the objects parameters
var jsonObject = JSON.parse(jsonString).result;
// now I divide the value by 100 in order to format it more like
// currency. (ie. 126454, which equals 12 gold, 64 silver,
// and 54 copper will now be displayed as
// 1264.54)
var adjustedValue = (jsonObject.min_sale_unit_price / 100);
// finally we return the adjusted min sell value
return adjustedValue;
}
更新
onOpen() を削除してキャッシュ サービスに切り替えるコードを更新しました。現在、「エラー: 引数が大きすぎます: 値 (12 行目、ファイル "gwspidy api")」というエラーが表示されます。12行cache.put("gw2spidy-data", jsonData, 1500);
目は データのサイズだけですか?どこまでろ過できるかわかりません。完全なコードは以下のとおりです。
function test(itemID) {
var cache = CacheService.getPublicCache();
var cached = cache.get("gw2spidy-data");
// check if the data is cached and use it if it is
if (cached != null) {
var jsonData = cached
}
//otherwise fetch the data and cache it
else {
var myUrl = "http://www.gw2spidy.com/api/v0.9/json/all-items/all"
var jsonData = UrlFetchApp.fetch(myUrl);
cache.put("rss-feed-contents", jsonData, 1500);
}
//put data into an array and filter the result down to the given id, then return the function value
var jsonArray = JSON.Parse(jsonData);
var jsonFilter = jsonArray.filter(function(itemID){return itemID.data_id==itemID});
var jsonObject = JSON.parse(jsonFilter).result;
var adjustedValue = (jsonObject.min_sale_unit_price / 100);
return adjustedValue;
}