首页 > 编程源码 > 用php写一个天气预报查询api

用php写一个天气预报查询api

楼主:wlkjyy [1级] · 2019-9-22 ·  浏览792 · 编程源码 · ID:

今天在看某娱乐网时候,发现一个源码,是"全国城市,天气查询html源码",啥?html?

于是我把源码下载下来,还真是html,还有js加载接口,于是我自己有了一个写天气预报查询接口,然后我找到他那个js文件里面的接口,是https://sapi.k780.com/?app=weather.future&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json&jsoncallback=getWeather&weaid=

然后就是传一个地点过去,然后就返回最近7日的天气,ok,完美于是我开写

这次难度有点大,要用到(正则表达式、CURL、json)

中途....

完成...

ok,完美,写好了

我的接口地址:http://api.weilaicloudy.com/cgi-bin/roots/weater.php?location=地点

请求方式:get

请求数据:location 地点

代码如下:

<?php
header("Content-type:application:json;charset=utf-8");
function get_curl($url,$post=0,$referer=0,$cookie=0,$header=0,$ua=0,$nobaody=0){
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL,$url);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	$httpheader[] = "Accept:*/*";
	$httpheader[] = "Accept-Encoding:gzip,deflate,sdch";
	$httpheader[] = "Accept-Language:zh-CN,zh;q=0.8";
	$httpheader[] = "Connection:close";
	curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
	curl_setopt($ch, CURLOPT_TIMEOUT, 30);
	if($post){
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
	}
	if($header){
		curl_setopt($ch, CURLOPT_HEADER, TRUE);
	}
	if($cookie){
		curl_setopt($ch, CURLOPT_COOKIE, $cookie);
	}
	if($referer){
		if($referer==1){
			curl_setopt($ch, CURLOPT_REFERER, 'http://m.qzone.com/infocenter?g_f=');
		}else{
			curl_setopt($ch, CURLOPT_REFERER, $referer);
		}
	}
	if($ua){
		curl_setopt($ch, CURLOPT_USERAGENT,$ua);
	}else{
		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Linux; U; Android 4.4.1; zh-cn; R815T Build/JOP40D) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/4.5 Mobile Safari/533.1');
	}
	if($nobaody){
		curl_setopt($ch, CURLOPT_NOBODY,1);
	}
	curl_setopt($ch, CURLOPT_ENCODING, "gzip");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	$ret = curl_exec($ch);
	curl_close($ch);
	return $ret;
} 
$l = $_GET['location'];
if(!$l)
{
exit('{"code":-1,"msg":"地点不能为空"}');
}
//第一步,取出json,去掉无用数据
$Data = get_curl('https://sapi.k780.com/?app=weather.future&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json&jsoncallback=getWeather&weaid='.$_GET["location"]);
preg_match_all('/getWeather(\(.*?)\)/is',$Data,$v);



//第二步,去掉第一个字符(
$Data = substr($v[1][0],1);


//第3步,解析json
$Data = json_decode($Data,true);

if(!$Data["success"])
{
exit('{"code":-1,"msg":"地点有误"}');
}

//第4步,遍历数据流 完成
echo '{"code":200,"msg":"ok","data":[';
foreach($Data["result"] as $key=>$v)
{
echo '{"days":"'.$v["days"].'","week":"'.$v["week"].'","temperature":"'.$v["temperature"].'","weather":"'.$v["weather"].'","wind":"'.$v["wind"].'"},';
}
echo '{"status":true,"location":"'.$l.'","time":"'.time().'"}]}';
exit;
?>

image.pngimage.png

- 版权声明 - 1、本帖所有言论和图片等纯属网友个人意见,与流星社区立场无关;
2、其他单位或个人使用、转载或引用本帖时必须同时征得该帖子作者wlkjyy流星社区的同意;
3、备注原文地址:https://bbs.liuxingw.com/t/14302.html,可忽略第2条;
4、帖子作者需承担一切因本文发表而直接或间接导致的相关责任;
5、如本帖内容或部分内容转载自其它媒体,这并不代表本站赞同其观点和对其真实性负责;
6、如本帖若为资源类,将仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您安装或使用的设备中彻底删除上述内容;
7、如果您喜欢该程序,请支持正版软件,购买注册,可以得到更好的正版服务;
8、如本帖侵犯到任何版权或违法问题,请立即邮件告知我们,我们将及时予以处理。
5条回复 |  最后回复于2020-3-16

wlkjyy [1级]

教程应该不错,看更多api、正则表达式写法去我博客看下
发布于2019-9-22

回复列表

  • 内容加载中...

说点什么...

[]

发布于2019-9-22

回复列表

  • 内容加载中...

说点什么...

量子力学教~兮 [1级]

可以教一下防红接口的吗?
发布于2019-9-22

回复列表

  • 内容加载中...

说点什么...

[]

学习一个看看先

发布于2019-11-25

回复列表

  • 内容加载中...

说点什么...

[]

谢谢
发布于2020-3-16

回复列表

  • 内容加载中...

说点什么...
登录注册 后才可进行评论
签到
38人签到
已签0天
  • 48675帖子
  • 1966834热点量
  • 198170火热值