您的位置:首页 > 编程语言 > PHP开发

PHP 调用接口生成天气预报 三级联动城市列表 仿中国天气网界面

2013-11-17 20:35 513 查看
网上找了很多天气接口的文章,大都是只介绍,很难找到成品,用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';
}


使用时

<img src="images/d/<?php echo $lib_weather->get_img_index( $reports->img_title1); ?>.gif">


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

下载地址:http://www.1024i.com/product/8.html

演示网址:http://www.1024i.com/product/demo/weather/v1.0/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: