澳洲

將來自 ASX 的 JSON 數據解析為交易所交易產品的 Google 表格 - 而不是公司

  • February 16, 2021

我曾在 StackOverflow 網站上問過這個問題 - 但沒有運氣。

我正在嘗試開發一個基於 Google 表格的投資組合跟踪表,該表能夠檢索澳大利亞 (ASX) 和美國市場證券的每日價格。

對於美國市場證券,GoogleFinance 功能執行良好。然而,對於 ASX 來說,GoogleFinance 檢索資訊的能力有點偶然。

Ruben曾問過一個類似的問題Ian Finlay提供的解決方案適用於大多數情況,即上市公司,但不適用於 PMGOLD 等交易所交易產品。

Ian Finlay使用應用程序腳本解析 json 數據的解決方案是:

<code>
function AsxPrice(asx_stock) {
 var url = "https://www.asx.com.au/asx/1/share/" + asx_stock +"/";
 var response = UrlFetchApp.fetch(url);
 var content = response.getContentText();
 Logger.log(content);
 var json = JSON.parse(content);
 var last_price = json["last_price"]; 
 return last_price;
}

對於像 NAB = asx_stock 這樣的“正常”公司,腳本執行良好,但對於 PMGOLD 這樣的交易所交易產品,它就不行了。

通過一些基本的搜尋實驗,原因似乎是腳本中的 url 沒有指向所需的資訊。

對於 NAB = asx_stock,url 響應是

{"code":"NAB","isin_code":"AU000000NAB4","desc_full":"Ordinary Fully Paid","last_price":23.77,"open_price":24.11,"day_high_price":24.21,"day_low_price":23.74,"change_price":-0.15,"change_in_percent":"-0.627%","volume":1469971,"bid_price":23.75,"offer_price":23.77,"previous_close_price":23.92,"previous_day_percentage_change":"-1.239%","year_high_price":27.49,"last_trade_date":"2021-01-29T00:00:00+1100","year_high_date":"2020-02-20T00:00:00+1100","year_low_price":13.195,"year_low_date":"2020-03-23T00:00:00+1100","year_open_price":34.51,"year_open_date":"2014-02-25T11:00:00+1100","year_change_price":-10.74,"year_change_in_percentage":"-31.121%","pe":29.12,"eps":0.8214,"average_daily_volume":6578117,"annual_dividend_yield":2.51,"market_cap":-1,"number_of_shares":3297132657,"deprecated_market_cap":78636614000,"deprecated_number_of_shares":3297132657,"suspended":false}

但是,對於 PMGOLD = asx_stock,url 響應是:

{"code":"PMGOLD","isin_code":"AU000PMGOLD8","desc_full":"Perth Mint Gold","suspended":false}

進行一些相對“非程式碼合格人員”類型的研究,看起來交易所上市產品的實際網址應該是:

https://www.asx.com.au/asx/1/share/PMGOLD/prices?interval=daily&count=1

對此的 url 響應是:

{"data":[{"code":"PMGOLD","close_date":"2021-01-28T00:00:00+1100","close_price":24.12,"change_price":0.19,"volume":98132,"day_high_price":24.2,"day_low_price":23.9,"change_in_percent":"0.794%"}]}

當我將此 url 替換為Ian Finlay的程式碼並將 var 重命名為 ‘close_price’ 而不是 ’last_price’ 時,沒有檢索到任何內容。使用的程式碼是:

function AskPrice(asx) {
 var url = "https://www.asx.com.au/asx/1/share/"+ asx +"/prices?interval=daily&count=1";
 var response = UrlFetchApp.fetch(url);
 var content = response.getContentText();
 Logger.log(content);
 var json = JSON.parse(content);
 var  data = json["data"]; 
 return data;
}

我懷疑這是由於兩種不同 url 類型的 url 響應的格式不同。也許嵌套?- 我不知道。

有人可以幫忙指出我犯了什麼錯誤嗎?

謝謝

在 JSON 結構中,數據位於數組的元素中。改變’var data = json[“data”];’ 到’var data=json.data[0].close_price’。本質上,該語句的意思是讓我得到響應中名為 data 的數組的第 0 個元素的“close_price”屬性。

引用自:https://money.stackexchange.com/questions/136063