如何获得市场上多个价格项目的回应

时间:2014-12-03 11:40:58

标签: php json steam steam-web-api

我检查背包cs的每件物品的价格:请点击此链接:

http://steamcommunity.com/market/priceoverview/?country=FR&currency=3&appid=440&market_hash_name=

但是对于100个例子来说,我检查了100个链接以获得我所有物品的价格。

是否可以使用多个项目查询蒸汽,并且只需要一个json,并且要求所有价格?

我希望它是一个这样的系统,你发送一个数组,其中包含你想知道价格的物品的所有classid到一个蒸汽网址和蒸汽发送给你一个json与你的阵列的所有价格。对于蒸汽而言,这并不困难,而且速度非常快,对我而言,这对查询速度非常有帮助,而且更容易。

2 个答案:

答案 0 :(得分:0)

  

是否可以使用多个项目查询蒸汽,并且只需要一个json,并且要求所有价格?

不,不可能向Steam查询导致所有数据的单个响应的多个项目,但是可以使用cURL的multiget发送多个请求,每个请求都会在单个cURL调用中返回Steam API返回多个响应

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次 - 过于频繁地点击Steam API可能会导致对你的连接的某种限制而不提及,如果过于频繁地调用,你的100K每日API阈值将会非常快地用完。 / p>

有一些解决方法,但我建议的最佳方法是将已知项目的列表存储在数据库中并创建一个cronjob,以便偶尔更新每个项目的价格,同时避免大量的API调用 - 这样你对每个项目都有缓存价格。

答案 1 :(得分:-2)

我认为

  1. 将数据填充到JSON
  2. 然后将其传递到特定页面
  3. 获取数组中的已发布项目
  4. 现在使用循环:foreach并查询数据库中的每个id或其他内容,然后再将其存储在数组中
  5. 现在再次使用循环,如果做得好,第4步将是最后一个,以显示相关定价