Yahoo Financen HTML on näköjään taas elänyt. Ainakin hintatieto näyttää siirtyneen value
-attribuutista data-value
-attribuuttiin.
Fiksattu yahoofinance
-skripti:
function yahoofinance(symbol, mode="price") {
symbol = symbol.toUpperCase();
mode = mode.toLowerCase();
const content = UrlFetchApp.fetch("https://finance.yahoo.com/quote/" + symbol).getContentText();
const $ = Cheerio.load(content);
if (mode === "price") return Number($('fin-streamer[data-symbol="' + symbol + '"][data-field="regularMarketPrice"]').attr('data-value')) || 0;
else if (mode === "name") return $("div#quote-header-info h1").first().text().split("(" + symbol + ")")[0] || "N/A";
else if (mode === "change") return Number($('fin-streamer[data-symbol="' + symbol + '"][data-field="regularMarketChange"]').attr('data-value')) || 0;
else if (mode === "changepct") return Number($('fin-streamer[data-symbol="' + symbol + '"][data-field="regularMarketChangePercent"]').attr('data-value')) || 0;
var summaryArr = $("div#quote-summary").children().children().children().children().toArray().map((element) => { return $(element).text() });
if (mode === "high") return Number(summaryArr[4].split(" ")[3].replace(/\,/g, "")) || "N/A";
else if (mode === "low") return Number(summaryArr[4].split("e")[1].split(" ")[0].replace(/\,/g, "")) || "N/A";
else if (mode === "high52") return Number(summaryArr[5].split(" ")[4].replace(/\,/g, "")) || "N/A";
else if (mode === "low52") return Number(summaryArr[5].split("ge")[1].split(" ")[0].replace(/\,/g, "")) || "N/A";
else if (mode === "open") return Number(summaryArr[1].split("n")[1].replace(/\,/g, "")) || "N/A";
else if (mode === "volume") return Number(summaryArr[6].split("e")[1].replace(/\,/g, "")) || "N/A";
else if (mode === "volumeavg") return Number(summaryArr[7].split("e")[1].replace(/\,/g, "")) || "N/A";
else if (mode === "beta") return Number(summaryArr[9].split(")")[1]) || "N/A";
else if (mode === "pe") return Number(summaryArr[10].split(")")[1].replace(/\,/g, "")) || "N/A";
else if (mode === "eps") return Number(summaryArr[11].split(")")[1].replace(/\,/g, "")) || "N/A";
else if (mode === "edate") return summaryArr[12].split("Date")[1] || "N/A";
else if (mode === "divdate") return summaryArr[14].split("Date")[1] || "N/A";
else if (mode === "target") return Number(summaryArr[15].split("st")[1].replace(/\,/g, "")) || "N/A";
else if (mode === "div") return Number(summaryArr[13].split("ld")[1].split(" ")[0].replace(/\,/g, "")) || "N/A";
else if (mode === "yield") return Number(summaryArr[13].split("(")[1].split("%")[0]) || "N/A";
else throw new Error("Unknown mode");
}
Edit:
Haen itse tuolta vain “pricen”, joten en tiedä onko prosenteissa tapahtunut jotain muutosta. Jos käytössä on Google Sheets:n päässä “prosenttiformatointi” kannattaa yrittää jakamista 100:lla.
Esim.
=yahoofinance("NDA-FI.HE";"changepct")/100