失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > php天气城市切换怎么实现 PHP 调用接口生成天气预报 三级联动城市列表 仿中国天气

php天气城市切换怎么实现 PHP 调用接口生成天气预报 三级联动城市列表 仿中国天气

时间:2018-10-21 20:31:40

相关推荐

php天气城市切换怎么实现 PHP 调用接口生成天气预报 三级联动城市列表 仿中国天气

网上找了很多天气接口的文章,大都是只介绍,很难找到成品,用PHP开发了一个,效果如下,共享一下!

程序使用 PHP 实现,通过调用中国国家气象局网站提供的天气接口,生成未来六天的天气预报和当前的实时天气信息。为了减轻服务器负载,程序加入了缓存功能,1小时内访问同一个城市的天气情况,都将会从缓存中读取,使得重复查看同一个城市天气时的速度大大提高。

程序集成有城市三级联动选择功能。在 "city_codes" 文件夹里附带有生成三级城市数组的 php 程序。

天气接口封装成了类( weather.php ),调用时很简单:

include 'weather.php';

$lib_weather = new weather();

$reports = $lib_weather->get_reports( $city_code );

$real_reports = $lib_weather->get_real_reports( $city_code );

$city_code为指定城市的代码(例: 101010100),返回值中 $reports 包含未来六天的天气情况,$real_reports 为实时天气信息。

底层使用 PHP CURL 模拟浏览器 http 访问 天气网接口,请注意栓查服务器是否启用了 CURL, 因为该接口比较简单,只用了 GET 方式:

天气接口类使用 txt 格式作为缓存文件。每个城市将会产生两个缓存文件,分别代表近期和实时两种天气数据,使用时注意设置缓存文件夹可写。

city_codes/convert.php 是将普通的城市代码(本例中 city_codes.txt, 从网上搜索得到), 转换成三维数组,保存在 city_codes.php 文件中。

城市代码规则:

河南省,许昌市,鄢陵县的城市代码为:101180402

拆分为四段 101 18 04 02

所有城市的前三位都相同,前两段会并考虑为省;

其中前五位 "101"+"18" 代表省 = 河南省

第七八位 "04" 代表市 = 许昌市

最后两位 "02" 代表县 = 鄢陵县

跟据省市信息可以将所有城市划分成三维数组。北京/天津/上海/重庆 四个直辖市要特殊处理。转换后大部分城市在数组中的位置正确,只有部分城市需要手工改动一下(海南的几个市)。

代码中包含了一个 lunar.php, 用于转换公历到农历日期。 另外因为天气接口中返回的天气图标索引有的不正常( 如常出现 "99"),本程序中跟据天气情况做了一下转化:

public function get_img_index( $name )

{

$img_indexs = array(

'晴'=>0,

'多云'=>1,

'阴'=>2,

'阵雨'=>3,

'雷阵雨'=>4,

'雷阵雨伴有冰雹'=>5,

'雨夹雪'=>6,

'小雨'=>7,

'中雨'=>8,

'大雨'=>9,

'暴雨'=>10,

'大暴雨'=>11,

'特大暴雨'=>12,

'阵雪'=>13,

'小雪'=>14,

'中雪'=>15,

'大雪'=>16,

'暴雪'=>17,

'雾'=>18,

'冻雨'=>19,

'沙尘暴'=>20,

'小雨-中雨'=>21,

'中雨-大雨'=>22,

'大雨-暴雨'=>23,

'暴雨-大暴雨'=>24,

'大暴雨-特大暴雨'=>25,

'小雪-中雪'=>26,

'中雪-大雪'=>27,

'大雪-暴雪'=>29,

'浮尘'=>29,

'扬沙'=>30,

'强沙尘暴'=>31,

'霾'=>53

);

if(array_key_exists($name, $img_indexs))

{

return $img_indexs[$name];

}

return 'x';

}

使用时

相关天气图标从中国天气网采集,已提供下载,d文件夹表示白天(day),n文件夹表示晚上(night).

演示网址:

/product/demo/weather/v1.0/

php天气城市切换怎么实现 PHP 调用接口生成天气预报 三级联动城市列表 仿中国天气网界面...

如果觉得《php天气城市切换怎么实现 PHP 调用接口生成天气预报 三级联动城市列表 仿中国天气》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。