將來自 ASX 的 JSON 數據解析為交易所交易產品的 Google 表格 - 而不是公司
我曾在 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”屬性。