узелJS | Анализатор рынка Steam

Люди, имеющие дело со Steam, наверняка слышали о таких сайтах: http://csgo.steamlytics.xyz/.

Для обучения я попытаюсь сделать что-то вроде того же API, что и у них, но у меня есть один вопрос. Я добрался до той части, где он получает имя каждого элемента и делает запрос к URL-адресу истории рынка Steam, берет оттуда данные и помещает их в БД. Существует 6844 элемента, и я установил тайм-аут для каждого запроса в 2 секунды, поэтому, если я правильно рассчитал, для передачи всех данных элементов в базу данных потребуется около 6 часов. Вопрос вот в чем, есть ли возможность ускорить процесс? Что касается сайта steamlytics, они обновляют данные каждые 12 часов, поэтому я не верю, что они обновляют цены каждые 6 часов. Вот мой код:

for (var i = 0; i < names.items.length; i++) {
    setTimeout(function(i) {
        var name = names.items[i].market_hash_name;
        scrapeItems(names.items[i].market_hash_name, function(data) {
            var total = 0;
            var price = 0;
            var average = 0;
            var count = 0;
            var data = JSON.parse(data);
            for (var i = 0; i < data.prices.length; i++) {
                var dataa = {
                    name: name,
                    date: data.prices[i][0],
                    price: data.prices[i][1],
                    sales: data.prices[i][2]
                };
                connection.query('INSERT INTO item_histories SET ?', dataa, function(err) {
                    if (err) {
                        console.log(err);
                    } else{
                    }
                });
            }
        });
        console.log("Inserted data to DB " + name);
    }, i * 2000, i);
}

person Philip Scroth    schedule 22.01.2017    source источник


Ответы (1)


Проблема с выполнением этих запросов заключается в том, что вы очень быстро ограничиваете скорость, если выполняете то количество запросов, которое делаете. Лимит запросов указан для каждого IP-адреса, и у вас есть решение. Вам нужно больше IP. В любом случае есть API для серверов для изменения IP-адресов, но прокси тоже работают.

Создатель steamlytics создал пакет для чередования ваших прокси при выполнении запросов. Пакет называется node-rotating-proxy-manager.

В противном случае я знаю, что steamlytics получает рыночные цены по-разному. Он использует этот URL, который содержит все последние совершенные транзакции на рынке. Я считаю, что вам нужно сканировать это 3 раза в секунду, чтобы получить все цены в среднем. Для предметов, превышающих рыночный лимит (~ 400 $), вам нужно использовать другие источники, такие как OPSkins, чтобы получить хорошие цены на предметы.

person Kevin Peters    schedule 24.01.2017
comment
Спасибо за ответ, но я не могу понять, как он может получить среднее значение для всех элементов, он показывает только недавно завершенные, требуется намного больше времени, чтобы пройти все элементы через это + в этом JSON я не могу найти цену (ы) )? - person Philip Scroth; 26.01.2017
comment
Да, он проверяет эту конечную точку каждую секунду 3 раза. Так что он проверяет это все время 24/7. Через какое-то время (думаю, больше месяца) он собрал столько данных, что смог назвать точные цены. См. документацию по API. После того, как все эти данные собраны, он запускает алгоритмы над набором данных, чтобы получить точную цену. - person Kevin Peters; 26.01.2017
comment
Эй, а чем мой URL не лучше? У него цены 2015-2017 (я не верю, что он начал получать все предметы с самого начала), потому что они тоже есть. - person Philip Scroth; 26.01.2017
comment
Ваш наверное лучше. Мы не знаем. От случая к случаю он разный (для некоторых элементов ваш более точен, для некоторых лучше API). Steam не показывает все транзакции в истории рынка — это самая большая проблема. Так что это вопрос доверия пару. Что я делаю прямо сейчас, так это объединяю разные API в один, чтобы получить точные цены. Есть api.csgofast.com/sih/all, steamapi.io также для получения цен (будьте осторожны с ними, все они могут быть неточными). - person Kevin Peters; 26.01.2017
comment
Да, вы правы в этом. Я уже нашел один элемент, которого по какой-то причине нет в этом API, и вы не можете быть забанены, если вы рассылаете спам по этому API. Отказано, а затем вы можете продолжить, поэтому, вероятно, вам придется выполнить проверку метода на сбой. - person Philip Scroth; 26.01.2017
comment
Я был бы осторожен с этим, потому что вы не знаете, как Steam отреагирует на запрет IP-адресов или что-то подобное. Кстати. Я настоятельно рекомендую вам присоединиться к дискорду r/steambot discord.gg/CytHBca. Там есть создатели API, и вы можете задавать им вопросы, если хотите ^^ - person Kevin Peters; 26.01.2017