Как получить ответ нескольких ценовых позиций на рынке

Я проверяю цену каждого предмета моего рюкзака cs: перейдите по этой ссылке:

http://steamcommunity.com/market/priceoverview/?country=FR&валюта = 3&AppID = 440&market_hash_name =

Но для 100 пунктов для примера я проверяю 100 ссылок, чтобы получить цену всех моих пунктов.

Можно ли запросить Steam со многими товарами и Steam только один JSON со всеми запрошенными ценами?

Я хочу, чтобы это была такая система: вы отправляете массив со всеми классами предметов, которые вы хотите знать, цену в Steam URL, и Steam отправляет вам один JSON со всей ценой вашего массива. Для Steam это не сложно и очень быстро, а для меня очень полезно для скорости запросов и проще.

-3

Решение

Можно ли запросить Steam со многими товарами и Steam только один JSON со всеми запрошенными ценами?

Нет, невозможно запросить Steam со многими элементами, которые приводят к одному ответу со всеми данными, однако можно использовать multiget cURL для отправки нескольких запросов, каждый из которых попадает в Steam API, возвращая несколько ответов в одном вызове cURL.

Пример использования curl multi 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&currency=3&appid=730&market_hash_name=Item1'
),
array(
'name' => 'Item2 Response',
'url'  => 'http://steamcommunity.com/market/priceoverview/?country=ZA&currency=3&appid=730&market_hash_name=Item2'
)
);

$curlyItemResponse = curl_get_contents($curlyUrls);

Этот метод определенно не рекомендуется для 100+ предметов. Я использую это не более чем для 10 вызовов — слишком частое нажатие на API Steam, скорее всего, приведет к некоторому ограничению вашего соединения, не говоря уже о том, что, если это вызывается слишком часто, ваш ежедневный порог API в 100 КБ будет израсходован довольно быстро.

Есть несколько обходных путей к этому, но лучший подход, который я могу порекомендовать, — это сохранить список ваших известных предметов в базе данных и создать cronjob, чтобы периодически обновлять цены на каждый предмет, избегая при этом массовых вызовов API — таким образом, вы кэшируете цена на каждый товар.

0

Другие решения

Я думаю

  1. заполнение данных в JSON
  2. затем передать его на определенную страницу
  3. Получить размещенный элемент в массиве
  4. Теперь используйте цикл как: foreach и запросите каждый идентификатор или что-то в базе данных, а затем снова сохраните его в массиве
  5. Теперь снова используйте цикл, если все сделано хорошо, шаг 4 будет последним, чтобы отобразить соответствующие цены
-2

По вопросам рекламы [email protected]