前言
PbootCms交流群里有同学提出给PbootCms加一个天气。安排。
实现思路
首先我们要获取访客IP,pb有写好的方法,get_user_ip(),这个就不用重复去写了。
有了IP地址就要去查IP归属城市,
查询好归属地之后再用归属地去查询当地天气。
根据IP查询城市
百度地图有我需要的接口,首先你需要有一个AK:可以到百度地图开放平台去申请,当然你也可以直接用我的,我不介意。
image.png
我们先测试下,看看百度地图API返回的信息:
image.png
这个city是我想要的值。
根据city查询天气
我这里用的今日头条的API,如果你需要用其他的API可以自行对照修改。
我们来看看头条的API返回内容:
image.png
这个接口返回的内容还是很多的,不要慌,红框里是我想要的内容,提取出来就行了。
好了,万事是具备,只欠代码。
上代码
修改文件:apps/home/controller/ExtLabelController.php
首先在run方法中,加入自定义标签$this->diylabel();方法
/*必备启动函数*/
public function run($content)
{
//接收数据
$this->content=$content;
//执行个人自定义标签函数
$this->diylabel();
//返回数据
return$this->content;
}
紧接着,给出自定义标签的方法
//扩展单个标签
private function diylabel()
{
$this->content=str_replace('{pboot:weather}',$this->getWeather(),$this->content);
}
接下来就是要返回标签替换的内容,接着写
//获取当地天气
private function getWeather(){
$city=$this->get_ip_city();
$url="https://www.toutiao.com/stream/widget/local_weather/data/?city={$city}";
$result=get_url($url);
$result=json_decode($result,true);
//这里可以按照你需要自行组合
return$city.'今天'.$result['data']['weather']['day_condition'].'当前气温'.$result['data']['weather']['current_temperature'];
}
//获取城市
private function get_ip_city(){
$ip=get_user_ip();
$url='http://api.map.baidu.com/location/ip?ip='.$ip.'&ak=x7sOPlIYZkFO9eXZHwEj4bc06IhqhdoF';
$html=file_get_contents($url);
$res=json_decode($html);
$city=$res->content->address_detail->city;//城市
return$city;
}
使用方法
在模板中使用{pboot:weather}即可。
上效果图:
image.png
呐,你们要的自定义天气标签,也可以根据你的实际需求把天气用图片来显示,更美观,这个就请自行尝试吧。
提示:该代码需要正式环境生效,本地环境IP可能是127.0.0.*或者localhost,获取不到城市信息。
好了,收工吧。