百度API市场提供了大量免费同时又非常好用的第三方API。关于其API的调用等问题都有相应的示例非常的方便。
关于其返回的JSON数据的解析,笔者遇到了这样的一个问题。
例:天气预报API返回数据形式为:
JSON返回示例 :
{
errNum: 0,
errMsg: "success",
retData: {
city: "北京", //城市
pinyin: "beijing", //城市拼音
citycode: "101010100", //城市编码
date: "15-02-11", //日期
time: "11:00", //发布时间
postCode: "100000", //邮编
longitude: 116.391, //经度
latitude: 39.904, //维度
altitude: "33", //海拔
weather: "晴", //天气情况
temp: "10", //气温
l_tmp: "-4", //最低气温
h_tmp: "10", //最高气温
WD: "无持续风向", //风向
WS: "微风(<10m/h)", //风力
sunrise: "07:12", //日出时间
sunset: "17:44" //日落时间
}
}
备注 :
请将apikey作为参数添加到header中;
当返回{"errNum":300003,"errMsg":"url is not parse"} 时,请校验是否传入apikey;
为了取到其中的各条信息需要用到JSON数据的解析。
例:获取城市名称
$cityname = urlencode($_POST['cityname']);
//设置天气API的url地址,初始化cURL 根据城市名称查询
$url = 'http://apis.baidu.com/apistore/weatherservice/cityname?cityname='.$cityname; //天气API
//$this->display();
$ch = curl_init();
$header = array(
'apikey: e858d877f6febd23d6623e14a3dbf220',
);
//设置cURL的相关参数,执行HTTP请求
curl_setopt($ch,CURLOPT_URL,$url);
// 添加apikey到header
curl_setopt($ch, CURLOPT_HTTPHEADER , $header);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
//采集数据
$output = curl_exec($ch);
//关闭
curl_close($ch);
$res = json_decode($output,true); //将生成的结果转化为json数据
$this->assign('city',$res["retData"]['city']);
$this->assign('date',$res["retData"]['date']);
$this->assign('time',$res["retData"]['time']);
$this->assign('temp',$res["retData"]['temp']);
$this->assign('l_tmp',$res["retData"]['l_tmp']);
$this->assign('h_tmp',$res["retData"]['h_tmp']);
$this->assign('weather',$res["retData"]['weather']);
$this->assign('WS',$res["retData"]['WS']);
$this->display();
上面为一组关于利用天气预报API获取相关信息的PHP代码。其中利用到ThinkPHP模板技术。
笔者想说的是其中解析JSON数据部分,利用的是
$city = $res["resData"]["city"];
通过这种方式就可以获取其中的每条信息。这种方式基本可以处理所有API返回数据。