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