Heim  >  Artikel  >  php教程  >  php读取百度天气API Json数据

php读取百度天气API Json数据

WBOY
WBOYOriginal
2016-06-06 19:55:271584Durchsuche

本文简单介绍如何利用百度的车联网API读到JSON数据 官方手册 http://developer.baidu.com/map/wiki/index.php?title=car/api/weather#.E8.BF.94.E5.9B.9E.E7.BB.93.E6.9E.9C 今天折腾了好几个小时才把百度API里的天气接口搞明白,说句实在的,百度也够坑的,

本文简单介绍如何利用百度的车联网API读到JSON数据

官方手册

http://developer.baidu.com/map/wiki/index.php?title=car/api/weather#.E8.BF.94.E5.9B.9E.E7.BB.93.E6.9E.9C

今天折腾了好几个小时才把百度API里的天气接口搞明白,说句实在的,百度也够坑的,我第一次试因为选的应用类型是服务器,怎么都验证不了,而且我选了sn验证白名单

第二次我直接用浏览器试了,结果成功读取到json数据,剩下再来解析....


直接上代码吧

<span style="font-size:18px;">

<title> 天气 </title>


<?php require("sn_caculation.php");

//获得查询城市
if ($_POST[&#39;city&#39;])
	echo $_POST[&#39;city&#39;];

$location = $_POST[&#39;city&#39;];
//经过urlcode编码
$location = urlencode($location);

$output = "json";

//设置查询模式
//@param $mode
//默认流浏览器模式
$mode = 0;
switch ($mode){
	case 0:
	$result = browser($output,$location);
	break;
	case 1:
	$result = server($output,$location);
	break;
}

function server($output,$location) {
//服务端(server)测试
	$ak = "xxxxxxx";
	$sk = "xxxxxxx;
	$url = "http://api.map.baidu.com/telematics/v3/weather?ak=%s&location=%s&output=%s&sn=%s";
	$querystring_arrays = array("ak" => $ak, "location" => $location, "output" => $output);</span>
//百度sn算法
	$sn = caculateAKSN($ak, $sk, $url, $querystring_arrays);
	return sprintf($url, $ak, $location, $output, $sn);
}


function browser($output,$location){
//浏览器测试-----
	$ak = "xxxxxxxx";
	$url = "http://api.map.baidu.com/telematics/v3/weather?ak=%s&location=%s&output=%s";
	return sprintf($url, $ak, $location, $output);
}


//$template = http://api.map.baidu.com/telematics/v3/weather?location=%s&output=%s&ak=%s

$weather_contents = file_get_contents($result);
print_r(json_decode($weather_contents));
?>




我从另一处提交的城市,进来之后的操作就像上面这样,这里解释几个地方,ak就是百度应用里的app key,如果是服务器类型的,secret key,浏览器类型的没有,利用百度提供的sn算法进行加密,代码如下:

<?php /**
* @brief 计算SN签名算法
* @param string $ak access key
* @param string $sk secret key
* @param string $url url值,例如: /geosearch/nearby 不能带hostname和querstring,也不能带?
* @param array  $querystring_arrays 参数数组,key=>value形式。在计算签名后不能重新排序,也不能添加或者删除数据元素
* @param string $method 只能为'POST'或者'GET'
*/
function caculateAKSN($ak, $sk, $url, $querystring_arrays, $method = 'GET'){
    if ($method === 'POST'){
        ksort($querystring_arrays);
    }
    $querystring = http_build_query($querystring_arrays);
    return md5(urlencode($url.'?'.$querystring.$sk));
}
?>
这里看半天没看懂,url没有格式啊,啥意思啊,后来才反应过来,因为看了它...为啥会有两个不同的页面....

http://developer.baidu.com/map/index.php?title=lbscloud/api/appendix

请原谅我的智商。

location可以利用urlencode进行转码,免得出错,最后拿到完整的result,利用file_get_contents就可以得到数据了,这里已数组的格式输出的。。。

初学就是蛋精姐虑....哎,就到这了,希望能帮到大家



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn