微信公众平台消息接口开发(3)
上面那篇讲了翻译宝宝,调用有道翻译的接口,现在开发天气宝宝,调用的接口是中国气象网的,这个返回给用户的信息是图文信息。
效果如下:
先了解下中国气象网的api,其实只是一条url,即http://m.weather.com.cn/data/城市代码.html,如http://m.weather.com.cn/data/101280101.html,其中的101280101是城市代码,可以在浏览器输入这条url,看看返回什么数据。
|
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
{ "weatherinfo": { "city": "广州", "city_en": "guangzhou", "date_y": "2013年2月27日", "date": "", "week": "星期三", "fchh": "11", "cityid": "101280101", <!-- 从今天开始到第六天的每天的天气情况,这里的温度是摄氏温度 --> "temp1": "25℃~19℃", "temp2": "24℃~19℃", "temp3": "25℃~13℃", "temp4": "22℃~11℃", "temp5": "16℃~9℃", "temp6": "20℃~11℃", <!-- 从今天开始到第六天的每天的天气情况,这里的温度是华氏温度 --> "tempF1": "77℉~66.2℉", "tempF2": "75.2℉~66.2℉", "tempF3": "77℉~55.4℉", "tempF4": "71.6℉~51.8℉", "tempF5": "60.8℉~48.2℉", "tempF6": "68℉~51.8℉", <!-- 天气描述 --> "weather1": "阴", "weather2": "阴", "weather3": "阴转小雨", "weather4": "小雨", "weather5": "阴转晴", "weather6": "晴", <!-- 天气描述图片序号 --> "img1": "2", "img2": "99", "img3": "2", "img4": "99", "img5": "2", "img6": "7", "img7": "7", "img8": "99", "img9": "2", "img10": "0", "img11": "0", "img12": "99", "img_single": "2", <!-- 图片名称 --> "img_title1": "阴", "img_title2": "阴", "img_title3": "阴", "img_title4": "阴", "img_title5": "阴", "img_title6": "小雨", "img_title7": "小雨", "img_title8": "小雨", "img_title9": "阴", "img_title10": "晴", "img_title11": "晴", "img_title12": "晴", "img_title_single": "阴", <!-- 风速描述 --> "wind1": "微风", "wind2": "微风", "wind3": "微风转北风4-5级", "wind4": "北风4-5级转3-4级", "wind5": "微风", "wind6": "微风", <!-- 风速级别描述 --> "fx1": "微风", "fx2": "微风", "fl1": "小于3级", "fl2": "小于3级", "fl3": "小于3级转4-5级", "fl4": "4-5级转3-4级", "fl5": "小于3级", "fl6": "小于3级", <!-- 今天穿衣指数 --> "index": "舒适", "index_d": "建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。", <!-- 48小时穿衣指数 --> "index48": "舒适", "index48_d": "建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。", <!-- 紫外线及48小时紫外线 --> "index_uv": "最弱", "index48_uv": "最弱", <!-- 洗车 --> "index_xc": "较适宜", <!-- 旅游 --> "index_tr": "适宜", <!-- 舒适指数 --> "index_co": "舒适", "st1": "26", "st2": "18", "st3": "25", "st4": "18", "st5": "26", "st6": "9", <!-- 晨练 --> "index_cl": "较适宜", <!-- 晾晒 --> "index_ls": "不太适宜", <!-- 过敏 --> "index_ag": "极不易发" } } |
返回的是json格式的数据,至少返回的数据是什么意思,我也已注明。
在根目录下建立一个weather_code.php文件,里面主要是存储各城市的城市名和对应的城市代码,是一个数组,下面只显示部分数据:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<!--?php $weather_code = array( '北京' =--> 101010100, '重庆' => 101040100, '上海' => 101020100, '天津' => 101030100, '澳门' => 101330101, '香港' => 101320101, '合肥' => 101220101, '蚌埠' => 101220201, '芜湖' => 101220301, '淮南' => 101220401, '马鞍山' => 101220501, '安庆' => 101220601, '宿州' => 101220701); |
在index.php文件里,新建一个获取天气信息的方法,如下:
|
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
28
29
30
31
32
33
34
35
36
37
38
39
40
|
/** * getWeather * @param $keyword * @return unknown */function getWeather($keyword) { include 'weather_code.php'; $code=$weather_code[$keyword]; $file=file_get_contents($url); $obj=json_decode($file); $weatherinfo = $obj -> weatherinfo; $city = $weatherinfo -> city; $temp1=$weatherinfo->temp1; $temp2=$weatherinfo->temp2; $temp3=$weatherinfo->temp3; $img1=$weatherinfo->img1; $img2=$weatherinfo->img3; $img3=$weatherinfo->img5; $weather1=$weatherinfo->weather1; $weather2=$weatherinfo->weather2; $weather3=$weatherinfo->weather3; $wind1=$weatherinfo->wind1; $wind2=$weatherinfo->wind2; $wind3=$weatherinfo->wind3; $index=$weatherinfo->index; $index_d=$weatherinfo->index_d; $date_y=$weatherinfo->date_y; $week=$weatherinfo->week; $array = array( array("title"=>$city." ".$week." ".$temp1." ".$weather1,"des"=>"testdes","pic"=>"http://api.itcreating.com/weather/image.jpg"), array("title"=>$index_d,"des"=>"testdes"), array("title"=>date("Y年m月d日")." ".$temp1." ".$weather1." ".$wind1,"des"=>"testdes","pic"=>"http://api.itcreating.com/weather/images/".$img1.".png"), array("title"=>date("Y年m月d日",strtotime("+1 day"))." ".$temp2." ".$weather2." ".$wind2,"des"=>"testdes","pic"=>"http://api.itcreating.com/weather/images/".$img2.".png"), array("title"=>date("Y年m月d日",strtotime("+2 day"))." ".$temp3." ".$weather3." ".$wind3,"des"=>"testdes","pic"=>"http://api.itcreating.com/weather/images/".$img3.".png"), ); return $array;} |
这方法很简单,通过传入城市名,然后获取该城市的城市代码,接着通过中国气象网api发送请求,再将中国气象网返回的数据通过PHP的JSON解析函数json_decode将JSON格式的数据解析为PHP的关联数组,最后将我们需要的信息取出来再封装成数组。
注释掉$wechatObj->responseMsg();
在$wechatObj->responseMsg()下面加入$wechatObj->responseImgMsg();并新建一个responseImgMsg方法,如下:
|
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
public function responseImgMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textHaderTpl = " <![CDATA[%s]]> <![CDATA[%s]]> %s <![CDATA[news]]> %d "; $textContentTpl = "<![CDATA[%s]]> <![CDATA[%s]]> <![CDATA[%s]]> <![CDATA[%s]]> "; $textFooterTpl = " 1 "; if(!empty( $keyword )) { $msgType = "news"; // 判断是否首次关注 if ( $keyword == "Hello2BizUser" ) { }else { $array = getWeather($keyword); $resultHaderStr = sprintf($textHaderTpl, $fromUsername, $toUsername, $time, count($array)); foreach ($array as $key => $value) { $resultContentStr .= sprintf($textContentTpl, $value['title'], $value['des'], $value['pic'], $value['url']); } $resultFooterStr = sprintf($textFooterTpl); echo $resultStr = $resultHaderStr,$resultContentStr,$resultFooterStr; } }else{ echo "Input something..."; } }else { echo ""; exit; } } |
要返回图文消息的,就要使用数组这种方式将将消息输出。
源码已在github上托管,可以上去下载,地址:https://github.com/hxxy2003/Weather-weixin
欢迎关注天气宝宝和翻译宝宝:![]()




浙公网安备 33010602011771号