@lamer322

Как правильно парсить цены на предметы Steam в Google Sheets при помощи Google Apps Script?

Начнем с того, что я не программист, но сильно нужно сделать парсер цен на кейсы в гугл таблице.
Переискав и перепробовав все возможные варианты понял, что нужно делать через Apps Scrip.
Вот пример кейса, цену продажи которого нужно занести в гугл таблицу:
https://steamcommunity.com/market/listings/730/Fra...

Вот собрав по кусочкам с интернета получился такой код, он как бы работает, но очень часто вылазила ошибка:
Exception: Request failed for https://steamcommunity.com returned code 429. Truncated server response: null (use muteHttpExceptions option to examine full response) (строка 18).

Её я смог исправить просто заглушив ее при помощи "options". Но тогда вылазит друга ошибка:
TypeError: Cannot read properties of null (reading 'highest_buy_order') (строка 21).

Подскажите знающие люди как решить данную проблему.(саму ошибку либо предложите другие варианты решения моей главной задачи(парсинга цены кейса в гугл таблицу))

/**
* Returns highest buy order.
*
* @param {string} urls - Input url(s)
* @return {number} the price.
* @customfunction
*/
function STREAMCOMMUNITYPACKAGE(urls) {

  if (!Array.isArray(urls)) {
    urls = [urls];
  }

  return urls.flat().map(url => {
    const html = UrlFetchApp.fetch(url, {'muteHttpExceptions': true}).getContentText();
    const id = /Market_LoadOrderSpread\((.*?)\)/gms.exec(html)[1].trim();
    options = {muteHttpExceptions: true};
    var data= JSON.parse(UrlFetchApp.fetch(
      `https://steamcommunity.com/market/itemordershistogram?country=RU&language=russian&currency=5&item_nameid=${id}&two_factor=0`, options).getContentText());
    
    return data.highest_buy_order /100;
    
    
  });
  
}
  • Вопрос задан
  • 792 просмотра
Решения вопроса 1
ProgrammerForever
@ProgrammerForever Куратор тега Google Apps Script
Учитель, автоэлектрик, программист, музыкант
1) Если есть массив url, то лучшим вариантом будет использование fetchAll
2) Если получилась ошибка - можно подождать 2**i секунд и повторить запрос. i - номер итерации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы