-3

我检查了我背包 cs:go 中每件物品的价格,点击此链接:

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

但是例如 100 件商品,我检查 100 个链接以获取我所有商品的价格。

是否可以查询带有许多项目的蒸汽,而蒸汽只响应一个请求所有价格的 json?

我希望它是一个这样的系统,你发送一个数组,其中包含你想知道价格的项目的所有 classid 到一个 Steam url,然后 Steam 向你发送一个包含你数组所有价格的 json。对于steam来说并不难,而且速度非常快,对我来说,它对查询速度非常有帮助,而且更容易。

4

2 回答 2

0

是否可以查询带有许多项目的蒸汽,而蒸汽只响应一个请求所有价格的 json?

不,不可能使用许多项目查询 Steam,这会导致包含所有数据的单个响应,但是可以使用 cURL 的 multiget 发送多个请求,每个请求都命中 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 次 - 过于频繁地访问 Steam API 可能会导致您的连接受到某种限制,更不用说,如果调用过于频繁,您的 100K 每日 API 阈值将很快用完。

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

于 2014-12-24T19:55:30.787 回答
-3

我认为

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