Можно ли запросить пар с множеством элементов и отклик на пар только один json со всеми запрошенными ценами?
Нет, это не возможно запросить стим большое количество элементов, которые в результате одной реакции со всеми данными, однако можно использовать MultiGet CURL для отправки нескольких запросов, которые каждый удар парового API, возвращающих несколько отклик в один вызов cURL.
Пример скручивание нескольких Exec:
function curl_get_contents($data) {
$curly = array();
$mh = curl_multi_init();
foreach ($data as $urlArray) {
$curly[$urlArray['name']] = curl_init();
curl_setopt($curly[$urlArray['name']], CURLOPT_URL, $urlArray['url']);
curl_setopt($curly[$urlArray['name']], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curly[$urlArray['name']], CURLOPT_HEADER, false);
curl_setopt($curly[$urlArray['name']], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $curly[$urlArray['name']]);
}
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running > 0);
foreach ($curly as $id => $c) {
curl_multi_remove_handle($mh, $c);
}
curl_multi_close($mh);
}
Я написал функцию так же, как этот (удалить дополнительный код, потому что я не хочу, чтобы вы просто скопировать/макароны - узнать, а) принять массив массивов, где каждый внутренний массив содержит имя и URL, и возвращает массив данных, соответственно, - к примеру:
$curlyUrls = array(
array(
'name' => 'Item1 Response',
'url' => 'http://steamcommunity.com/market/priceoverview/?country=ZA¤cy=3&appid=730&market_hash_name=Item1'
),
array(
'name' => 'Item2 Response',
'url' => 'http://steamcommunity.com/market/priceoverview/?country=ZA¤cy=3&appid=730&market_hash_name=Item2'
)
);
$curlyItemResponse = curl_get_contents($curlyUrls);
Этот метод определенно не рекомендуется для 100+ пунктов. Я использую это не более 10 вызовов - слишком часто нажимаю на API Steam, что может привести к некоторому дросселированию к вашему соединению, если не упоминаться, если это вызвано слишком часто, ваш порог API 100K ежедневно будет довольно быстро истощаться.
Существует несколько обходных путей для этого, но лучший подход, который я могу порекомендовать, - это хранить список ваших известных элементов в базе данных и создавать cronjob, чтобы иногда обновлять цены на каждый элемент, избегая массовых вызовов API - таким образом у вас есть кешированная цена для каждого элемента.
Вы должны проверить их документацию. Лучше всего было бы сделать PHP Forloop, а затем объединить все json вместе. – DarthCaniac
В их документе нет ничего, что говорит о рынке ... На данный момент это то, что я сделал, но каждый цикл открывает новый URL-адрес для получения цены. Так что это делает невероятно долгое время –
Вы можете использовать CURL, чтобы открыть URL-адреса и проанализировать их. Вы должны отключить ограничения времени выполнения PHP. За потраченное время это не может помочь, но, может быть, вы можете сделать хороший загрузочный бар? :) – DarthCaniac