【问题标题】:How to interface with web XML/JSON APIs?如何与 Web XML/JSON API 交互?
【发布时间】:2011-07-27 02:13:08
【问题描述】:

我正在自己学习 php/xml/json 和其他所有内容,并且我正在通过 API 来处理某些事情。他们有文档,但我仍然不明白 API 是如何工作的。他们给你一个 GET 链接和 API 密钥,我知道你应该把 API 密钥放在请求链接中

我如何称呼这个链接?当它给你一个示例响应时是什么意思?

如果您的请求正确,响应应该出来吗?

我有点笨?

谢谢

【问题讨论】:

    标签: php xml json api


    【解决方案1】:

    在 PHP 中你可能有这样的东西:

    // EDIT: only need to use urlencode() on user supplied variables
    //$url = urlencode("http://xyz.com/api?apikey=foo&v1=bar&v2=baz");
    $url = "http://xyz.com/api?apikey=foo&v1=bar&v2=baz";
    $response = file_get_contents($url);
    

    $response 将包含您访问 $url 时输出的任何 xyz.com 的字符串(如果您直接访问 $url,您会看到它)。

    您的下一个工作是根据 $response 的数据结构(例如 XML、JSON 等)解析它,以便您的其余代码可以使用它。

    有几个用于解析 XML 或 JSON 的 PHP 库。就个人而言,我更喜欢使用 PHP 5 >= 5.2.0 中包含的SimpleXMLElementjson_decode()

    根据 API,如果它不理解请求 $url,它可能会向您发送某种错误代码/响应结构,您可以在解析响应后检查该请求。

    如果 $response 返回 false,则通常与 $url 通信时出现错误。

    我发现考虑这些XHR 请求的一种直观方式是将参数(GET 参数)传递给函数(API URL)。 API URL 的响应就像函数的 return 语句。

    更新:

    在 cmets 中由 OP 建议的 Groupon 的 API 示例:

    $apikey = "client_id=abcd1234567890";
    $division = "division_id=chicago";
    $url = "http://api.groupon.com/v2/deals?" . implode("&", array($apikey, $division));
    $response = file_get_contents($url);
    $deals = json_decode($response, true);
    
    foreach($deals['deals'] as $deal){
        $format = 'Deal: <a href="%s">%s</a><br/>';
        echo sprintf( $format, $deal['dealURL'], $deal['announcementTitle']);
    }
    

    上面的代码将打印出芝加哥地区所有交易标题和网址的列表。如果您查看 Groupon API 页面上的 Sample JSON Response 部分,它将为您提供将映射到关联数组 $deals 的整个数据结构。

    如果 API 的任何 GET 参数是由用户提供的(例如,来自网络表单),您将需要执行类似 $division = "division_id=" . urlencode($user_input); 的操作。

    【讨论】:

    • 您可以将各种学习分解成不同的步骤。无需从 php 进行 api 调用(有两个错误来源),只需在浏览器中测试 api 调用(如果您不知道,GET 是指将变量附加到 url 时,如 dgilland 的示例中)所以您可以修补它,直到你开始得到响应,然后进入你用它做某事的 php
    • 我尝试使用 api 进行此操作,但 urlencode 不起作用。我把它拿掉了,现在我得到了字符串和东西,但没有图像或其他任何东西。只是来自网站的文字(我猜)。有什么建议吗?
    • urlencode() 的错误。它将&amp; 更改为%26。不过,您希望将其应用于传递给$url 的所有用户提供的值。至于您的特定 API 请求,您使用的是哪一个?大多数 API 只返回文本。
    • 当您说我必须将其应用于所有用户提供的值时,这意味着什么?另外,我正在使用sites.google.com/site/grouponapiv2/api-resources/deals 如何从响应中获取某些值?我的想法就像client_id?但是我如何获得喜欢的某些优惠呢?
    • 哇!你很优秀!非常感谢!我希望我能投票!但我没有足够的积分。这很棒!我一直在寻找有关 API 和东西的示例。非常感谢。你为我澄清了很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多