如何与 Web XML/JSON API 交互?
Posted
技术标签:
【中文标题】如何与 Web XML/JSON API 交互?【英文标题】:How to interface with web XML/JSON APIs? 【发布时间】:2011-07-27 02:13:08 【问题描述】:我正在自己学习 php/xml/json 和其他所有内容,并且我正在通过 API 来处理某些事情。他们有文档,但我仍然不明白 API 是如何工作的。他们给你一个 GET 链接和 API 密钥,我知道你应该把 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 中包含的SimpleXMLElement
和json_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()
的错误。它将&
更改为%26
。不过,您希望将其应用于传递给$url
的所有用户提供的值。至于您的特定 API 请求,您使用的是哪一个?大多数 API 只返回文本。
当您说我必须将其应用于所有用户提供的值时,这意味着什么?另外,我正在使用sites.google.com/site/grouponapiv2/api-resources/deals 如何从响应中获取某些值?我的想法就像client_id?但是我如何获得喜欢的某些优惠呢?
哇!你很优秀!非常感谢!我希望我能投票!但我没有足够的积分。这很棒!我一直在寻找有关 API 和东西的示例。非常感谢。你为我澄清了很多。以上是关于如何与 Web XML/JSON API 交互?的主要内容,如果未能解决你的问题,请参考以下文章
c#,鉴于具有REST API的Web应用,并想添加每个REST API可以与之交互的Web套接字,在哪里定义ClientManager进行全局访问?