Я понимаю, что вы хотите узнать цену акций на MarketWatch в Таблицах. К сожалению, вы не можете использовать =IMPORTXML("https://www.marketwatch.com/investing/stock/oln", "/")
, потому что вы получите ответ JavaScript, подобный этому:
(function(window) {
try {
if (typeof sessionStorage !== 'undefined') {
sessionStorage.setItem('distil_referrer', document.referrer);
}
} catch (e) {}
})(window);
#d__fFH {
position: absolute;top: -5000 px;left: -5000 px
}
#d__fF {
font - family: serif;
font - size: 200 px;
visibility: hidden
}
#fwqssyztxufxfzwwduebdqwxedwrzazqaaavux {
display: none!important
}
Это происходит потому, что IMPORTXML
ожидает XML страница в URL-адресе, и поскольку этот URL-адрес не относится к XML -совместимому файлу, он вернет загрузку страницы как наилучшее усилие. В этом случае сервер элегантно выдает ошибку, поскольку ему требуется определенное хранилище сеанса для определения протокола ie в браузере. Чтобы предотвратить эту несовместимость, вы можете использовать код Apps Script для получения цены акции, как показано ниже:
function listingPrice() {
return UrlFetchApp.fetch("https://www.marketwatch.com/investing/stock/mtsl")
.getContentText().match(/(<meta name="price" content=")(.*)(?=")/)[2];
}
В этом примере я использовал UrlFetchApp.fetch()
, чтобы получить страницу, HTTPResponse.getContentText()
, чтобы прочитать ее содержимое и String.match()
, чтобы зафиксировать цену с помощью regexp . Чтобы предотвратить внутридневные значения, вы можете создать условие, подобное этому примеру:
function listingPrice() {
var stock = UrlFetchApp.fetch(
"https://www.marketwatch.com/investing/stock/mtsl").getContentText();
if (stock.match(/(<div class="status">)(.*)(?=<\/div>)/)[2] == "Premarket") {
return stock.match(/(<meta name="price" content=")(.*)(?=">)/)[2];
} else {
return "NASDAQ:MTSL is trading at this time.";
}
}
Затем вы можете сохранить цену на листе с помощью:
function refreshSheet() {
SpreadsheetApp.getActiveSheet().getRange(1, 1).setValue(listingPrice());
}
SpreadsheetApp.getActiveSheet()
откроется активный лист, чтобы выбрать диапазон A1 с помощью Sheet.getRange()
и записать цену с помощью Range.setValue()
. Пожалуйста, не стесняйтесь задавать мне дополнительные вопросы.