PHP 调用接口生成天气预报 三级联动城市列表 仿中国天气网界面
2013-11-17 20:35
513 查看
网上找了很多天气接口的文章,大都是只介绍,很难找到成品,用PHP开发了一个,效果如下,共享一下!
程序使用 PHP 实现,通过调用中国国家气象局网站提供的天气接口,生成未来六天的天气预报和当前的实时天气信息。为了减轻服务器负载,程序加入了缓存功能,1小时内访问同一个城市的天气情况,都将会从缓存中读取,使得重复查看同一个城市天气时的速度大大提高。
程序集成有城市三级联动选择功能。在 "city_codes" 文件夹里附带有生成三级城市数组的 php 程序。
天气接口封装成了类( weather.php ),调用时很简单:
$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"),本程序中跟据天气情况做了一下转化:
使用时
相关天气图标从中国天气网采集,已提供下载,d文件夹表示白天(day),n文件夹表示晚上(night).
下载地址:http://www.1024i.com/product/8.html
演示网址:http://www.1024i.com/product/demo/weather/v1.0/
程序使用 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/
相关文章推荐
- 全国天气预报数据接口调用PHP示例
- 调用“中国天气网”官网数据接口显示天气预报
- php中 如何生成jsonp数据接口及如何调用?
- 天气预报接口(中国天气网)
- 调用天气预报接口
- Android 通过WebService调用天气预报接口
- 国家气象局免费天气预报接口,城市代码(JSON格式)
- 天气预报接口(中国天气网)
- 天气预报接口(中国天气网)
- 中国天气网天气预报接口
- 中国天气网天气预报接口
- php中 如何生成jsonp数据接口及如何调用?
- webservice通信调用天气预报接口实例
- php 调用天气接口
- webservice通信调用天气预报接口实例
- 全国天气预报接口JAVA调用示例
- 编写的Webserivce调用天气预报 (及接口比较)
- 城市天气三小时预报,天气预报接口实现
- php调用百度天气接口,微信实时查看天气
- PHP调用百度天气接口API