Web API学习

最近想把各大团购网站的信息整合一下,结果发现早就有做的不错的团购导航网站了。研究了下是怎么获得各网站的信息的,因为对web懂得很少,开始还以为是通过爬虫爬到的页面信息,结果发现都是通过各个网站自己提供的api来获取信息的。


对api这东西不熟,现在正在了解中。wikiopedia上的定义如下:


Web API (Application Programming Interface) is typically a defined set of HTTP request messages along with a definition of the structure of response messages, typically expressed in JSON or XML. While "Web API" is sometimes considered a synonym for web service, the Web 2.0 applications typically have moved away from SOAPbased web services towards more direct REST style communications[1]. Web APIs allow the combination of multiple services into new applications known as mashups [2].


美团的api格式大致是这样的:http://www.meituan.com/api/v1/beijing/deals


估计是从类似这样的页面中得到链接、文字等信息,然后整合到自己站点的页面上去。


查了一下午信息,终于找到介绍怎么使用api的了,是使用php的xml parser函数来处理的。php我以前用过一两次,不过都忘了,借此机会重温下吧。


首先假设有一个提交api地址的form:


<form action="readApi.php" method="post" οnsubmit="return check()">
API地址:<input type="text" id="api" name="url"  οnclick="cl()" />
<input type="submit" value="读取API"  />
</form>


然后在readApi.php里面写怎么处理:

 

<?php
$file = $_POST["url"]; //$file使用$_POST变量得到api文件的地址
  $g_urlset = array(); //定义数组来保存每一个团购物品的链接
  $g_elem = null;
 
  function startElement( $parser, $name, $attrs ){
      global $g_urlset, $g_elem;
     if ( $name == 'url' ) $g_urlset []= array(); //对每一个url标签,建立一个数组,使得$g_urlset成为二维数组
   $g_elem = $name; 
  }

  function endElement( $parser, $name ){
     global $g_elem;
     $g_elem = null; 
   }

  function textData( $parser, $text ){
    global $g_urlset, $g_elem;
    if ( $g_elem == 'title' || $g_elem == 'website' || $g_elem == 'image' || $g_elem == 'starttime' || $g_elem == 'loc' || $g_elem == 'price'  )
     {
       $g_urlset[ count( $g_urlset ) - 1 ][ $g_elem ] = $text; //保存每一个对应标签的值
      } //标签名字不一定是正确的,依照不同网站api使用的DTD规则而不同
 }

  $parser = xml_parser_create();   //创建 XML 解析器,返回句柄
  xml_set_element_handler( $parser, "startElement", "endElement" );  //建立起始和终止元素处理器,调用startElement和endElement函数
  xml_set_character_data_handler( $parser, "textData" ); //建立字符数据处理器,调用textData函数
 
  if   (!($f   =   fopen($file,   "r ")))      //打开xml文件
    {  die( "不能正常打开该文件……,请检查api地址是否正确~");}
 
  while( $data = fread( $f, 4096 ) )  //每次读取4096个字节的数据
   {
    xml_parse( $parser, $data ); //解析数据
   }
  
  xml_parser_free( $parser );  //释放 XML 解析器
  foreach( $g_urlset as $item )
  {
   echo "<table border='1'>";
   echo "<tr><td class='title'>团购题目</td>";echo "<td>".$item['title']."</td></tr>";
   echo "<tr><td class='title'>网站名称</td>";echo "<td>".$item['website']."</td></tr>";
   echo "<tr><td class='title'>图片地址</td>";echo "<td>".$item['image']."</td></tr>";
   echo "<tr><td class='title'>团购网址</td>";echo "<td>".$item['loc']."</td></tr>";
   echo "<tr><td class='title'>开始时间</td>";echo "<td>".$item['starttime']."</td></tr>";
   echo "<tr><td class='title'>团购价格</td>";echo "<td>".$item['price']."</td></tr>";
   echo "</table>";
  }
?>

 

使用上面的方法,就解析到api里面的数据并可以显示在页面上了。

上面的代码来源是:

http://blog.163.com/zhihui20080313@126/blog/static/1012819832010117101942567/

注释段是我按照自己的理解写的,可能会有错误。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值