Я проверяю цену каждого предмета моего рюкзака cs: перейдите по этой ссылке:
http://steamcommunity.com/market/priceoverview/?country=FR&валюта = 3&AppID = 440&market_hash_name =
Но для 100 пунктов для примера я проверяю 100 ссылок, чтобы получить цену всех моих пунктов.
Можно ли запросить Steam со многими товарами и Steam только один JSON со всеми запрошенными ценами?
Я хочу, чтобы это была такая система: вы отправляете массив со всеми классами предметов, которые вы хотите знать, цену в Steam URL, и Steam отправляет вам один JSON со всей ценой вашего массива. Для Steam это не сложно и очень быстро, а для меня очень полезно для скорости запросов и проще.
Можно ли запросить 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¤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 в 100 КБ будет израсходован довольно быстро.
Есть несколько обходных путей к этому, но лучший подход, который я могу порекомендовать, — это сохранить список ваших известных предметов в базе данных и создать cronjob, чтобы периодически обновлять цены на каждый предмет, избегая при этом массовых вызовов API — таким образом, вы кэшируете цена на каждый товар.
Я думаю