用PbootCms扩展定制一个访客当地天气

2022-04-19 0 149

前言

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,获取不到城市信息。

好了,收工吧。

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!88525903@qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

发表评论
暂无评论