我检查背包中每件物品的价格 cs:go 通过此链接:
http://steamcommunity.com/market/priceoverview/?country=FR¤cy=3&appid=440&market_hash_name=
但是对于 100个项目作为示例,我检查了 100 个链接以获取我所有项目的价格。
是否可以查询包含许多项目的 Steam,并且 steam 响应只有一个 json,并请求所有价格?
我想要这样的系统,你发送一个数组,其中包含你想要知道价格的项目的所有classid到一个蒸汽网址,蒸汽给你一个json,你的数组的所有价格。对于蒸汽来说,这并不困难,而且非常快,对我来说,它对查询速度和更容易非常有帮助。
不,不可能使用许多项目查询 Steam,从而导致包含所有数据的单个响应,但是可以使用 cURL是否可以查询包含许多项目的 Steam,并且 steam 响应只有一个 json,并请求所有价格?
的 multiget 发送多个请求,每个请求都命中 Steam API,在单个 cURL 调用中返回多个响应。
卷曲多可执行文件的示例:
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 次调用 - 过于频繁地点击 Steam API 可能会导致对您的连接进行某种限制,更不用说了,如果调用太频繁,您的每日 100K API 阈值将很快用完。
对此有一些解决方法,但我可以推荐的最佳方法是在数据库中存储已知项目的列表并创建一个 cronjob 以偶尔更新每个项目的价格,同时避免大量 API 调用 - 这样你就有了每个项目的缓存价格。
我认为
- 将数据填充到 JSON 中
- 然后将其传递到特定页面
- 获取数组中发布的项目
- 现在使用这样的循环:foreach并查询数据库中的每个id或其他内容,然后再次将其存储在数组中
- 现在再次使用循环,如果做得好,步骤4将是最后一个,以显示相关定价