Итак, я пытаюсь получить данные о рынке сообщества steam. И это работает для небольшого количества предметов, но когда я пытаюсь сделать CS: GO (в среднем 13400 предметов), это не так. Я использую Steam JSON, который позволяет мне получать 100 предметов одновременно. Код выполняет следующее: внутри цикла он получает случайную паузу (я знаю, какой это уродливый способ сделать паузу, но другой способ заморозил мой цикл), затем я отправляю первый запрос. Я проверяю, получил ли я ответ, и если мой код ответа был 200 (= успех), тогда я получаю каждый элемент из массива json и проверяю, есть ли он уже в моем массиве или нет, если нет, я добавляю его.
Но здесь кроется проблема. Кажется, что он выполняет все циклы запроса, а затем, в конце, он, кажется, выполняет все элементы, добавляемые в массив. Вместо выполнения запроса добавьте элемент, а затем начните новый запрос и продолжайте.
const colors = require('colors/safe');
const request = require('request');
const random = require('random');
var fs = require('fs');
var itemNames = new Array();
console.log(colors.green(time() + 'Starting Steam Market Monitor...'));
request('https://steamcommunity.com/market/search/render/?search_descriptions=0&sort_column=default&sort_dir=desc&appid=730&norender=1&start=0&count=100', function(err, res, body) {
if (res.statusCode == 200 && res.statusCode != undefined) {
var itemsObj = JSON.parse(body);
var totalItems = itemsObj['total_count'];
console.log(colors.green(time() + 'Total of items found: ' + totalItems));
getItems(totalItems);
} else {
console.log(colors.red(time() + 'Response code: ' + res.statusCode));
}
});
function getItems(totalItems) {
var status = 200; //default success message
console.log(colors.green(time() + "Started item grabbing."));
for (var i = 0; i < totalItems; i+= 100) {
var options = {
url: 'https://steamcommunity.com/market/search/render/?search_descriptions=0&sort_column=default&sort_dir=desc&appid=730&norender=1&start='+ i +'&count=100'
};
var dt = new Date();
var randomSeconds = random.int(115, 125);
dt.setSeconds( dt.getSeconds() + randomSeconds );
while(dt > new Date()) {}
console.log(colors.green(time() + "Getting items " + i + " out of " + totalItems + " items"));
var dt = new Date();
var randomSeconds = random.int(55, 65);
dt.setSeconds( dt.getSeconds() + randomSeconds );
while(dt > new Date()) {}
request(options, function(err, res, body) {
if(res) {
if (res.statusCode == 200 && res.statusCode != undefined) {
var itemsObj = JSON.parse(body);
var itemsArr = itemsObj['results'];
for (var j = 0; j < 100; j++) {
var item = itemsArr[j]['hash_name'];
if (itemNames.indexOf(item) > -1) {
if (j == 99) {
}
} else {
console.log(item);
itemNames.push(item);
if (j == 99) {
}
}
}
} else {
console.log(colors.red(time() + 'Response code: ' + res.statusCode));
}
} else {
console.log(colors.red(time() + 'Undefined response...'));
}
});
}
}