【问题标题】:How get a response of multiple price items on the market如何获得市场上多个价格项目的响应
【发布时间】:2015-01-31 23:11:41
【问题描述】:

我查看背包cs中每件商品的价格:点击此链接:

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

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

是否可以查询包含许多项目的 Steam,而 Steam 仅响应一个包含所有请求价格的 json?

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

【问题讨论】:

  • 您应该查看他们的文档。不过,最好的选择是制作一个 PHP Forloop,然后将所有 json 组合在一起。
  • 他们的文档中没有任何关于市场的内容......目前这就是我所做的,但每个循环都会打开一个新的 URL 来获取价格。所以它需要非常长的时间
  • 您可以使用 CURL 打开 URL 并解析它们。您应该确保禁用 PHP 执行时间限制。对于所花费的时间,这真的无济于事,但也许您可以制作一个不错的加载栏? :)
  • 我实际上使用 cURL,但我想要的是这样的系统,你发送一个数组,其中包含你想要知道价格的项目的所有 classid 到 Steam url,然后 Steam 向你发送一个包含所有价格的 json你的数组。对于steam来说,这并不难,而且速度很快,对我来说,这对请求的速度很有帮助,而且更容易。

标签: php json steam steam-web-api


【解决方案1】:

是否可以查询包含许多项目的 Steam,而 Steam 仅响应一个包含所有请求价格的 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 调用 - 这样您每件商品都有一个缓存价格。

【讨论】:

    【解决方案2】:

    我觉得

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

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多