本来是想自己直接从中国天气网获取信息并处理,后来发现处理起来太麻烦,而且要获取所有城市的城市编码,再有就是!不支持国外天气!!(我们学校有很多毕业生在国外上学,所以我考虑还是做出支持国外天气的版本)
因此考虑直接调用别人的API,一开始选用了方倍工作室已经做好的接口(无奈也没有国外)。直到有一天返回北京天气温度是零下的时候(当时天热到不敢出门)。。。换!换!换!
后来终于发现最靠谱的接口----百度的天气API。
废话少说,首先大家要上 百度地图API申请一个专用key(大概一分钟就搞定了,很方便)
代码如下:
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
|
//图文信息2 for 天气【这是微信的图文信息模板】
$tqTpl = "< xml >
< ToUserName > <![CDATA[%s]]> </ ToUserName >
< FromUserName > <![CDATA[%s]]> </ FromUserName >
< CreateTime >%s</ CreateTime >
< MsgType > <![CDATA[%s]]> </ MsgType >
< ArticleCount >5</ ArticleCount >
< Articles >
< item >
< Title > <![CDATA[%s]]> </ Title >
< Description > <![CDATA[%s]]> </ Description >
< PicUrl > <![CDATA[%s]]> </ PicUrl >
< Url > <![CDATA[%s]]> </ Url >
</ item >
< item >
< Title > <![CDATA[%s]]> </ Title >
< Description > <![CDATA[%s]]> </ Description >
< PicUrl > <![CDATA[%s]]> </ PicUrl >
< Url > <![CDATA[%s]]> </ Url >
</ item >
< item >
< Title > <![CDATA[%s]]> </ Title >
< Description > <![CDATA[%s]]> </ Description >
< PicUrl > <![CDATA[%s]]> </ PicUrl >
< Url > <![CDATA[%s]]> </ Url >
</ item >
< item >
< Title > <![CDATA[%s]]> </ Title >
< Description > <![CDATA[%s]]> </ Description >
< PicUrl > <![CDATA[%s]]> </ PicUrl >
< Url > <![CDATA[%s]]> </ Url >
</ item >
< item >
< Title > <![CDATA[%s]]> </ Title >
< Description > <![CDATA[%s]]> </ Description >
< PicUrl > <![CDATA[%s]]> </ PicUrl >
< Url > <![CDATA[%s]]> </ Url >
</ item >
< item >
< Title > <![CDATA[%s]]> </ Title >
< Description > <![CDATA[%s]]> </ Description >
< PicUrl > <![CDATA[%s]]> </ PicUrl >
< Url > <![CDATA[%s]]> </ Url >
</ item >
</ Articles >
</ xml > ";//最后发现最多只能看到五个item= =无语。。。
|
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
41
42
43
44
45
46
47
48
49
50
51
52
|
if (substr_count( $keyword , '天气' )!=0 && $keyword != '天气' )
{
$geshu = substr_count( $keyword , '天气' );
$t = explode ( "天气" , $keyword );
for ( $i =0; $i <= $geshu ; $i ++)
{
if ( $t [ $i ]!= '' )
{
$city = $t [ $i ];
break ;
}
}
$mykey = "【这里换成你的API key】" ;
$url = "http://api.map.baidu.com/telematics/v3/weather?location=" . $city . "&output=json&ak=" . $mykey ;
$output = file_get_contents ( $url );
$contentStr = json_decode( $output , true);
if ( $contentStr [ 'status' ]== 'success' )
{
$T [0][ 'Title' ]= $contentStr [ 'date' ]. " " . $contentStr [ 'results' ][0][ 'currentCity' ]. "天气" ;
//$T[0]['PicUrl']="http://zhengwairen-try2.stor.sinaapp.com/xytq.jpg";
//$T[0]['Url']="http://zhengwairen-try2.stor.sinaapp.com/xytq.jpg";
//上面两行可以设成你想要的顶部图片
if ( is_array ( $contentStr [ 'results' ][0][ 'index' ]))
{
$T [2][ 'Title' ]= "【pm2.5】" . $contentStr [ 'results' ][0][ 'pm25' ]. "\n" . "【" . $contentStr [ 'results' ][0][ 'index' ][0][ 'title' ]. "】" . "(" . $contentStr [ 'results' ][0][ 'index' ][0][ 'zs' ]. ") " . $contentStr [ 'results' ][0][ 'index' ][0][ 'des' ];
//下一行是洗车指数,感觉不对主题还是不要的好。。
//$T[2]['Title']=$T[2]['Title']."\n"."【".$contentStr['results'][0]['index'][1]['title']."】(".$contentStr['results'][0]['index'][1]['zs'].") ".$contentStr['results'][0]['index'][1]['des'];
$T [2][ 'Title' ]= $T [2][ 'Title' ]. "\n" . "【" . $contentStr [ 'results' ][0][ 'index' ][2][ 'title' ]. "】(" . $contentStr [ 'results' ][0][ 'index' ][2][ 'zs' ]. ") " . $contentStr [ 'results' ][0][ 'index' ][2][ 'des' ];
}
else
$guowai =1;
for ( $i =1, $aaa =0; $i <=5; $i ++)
{
if ( $i ==2 && $guowai !=1)
continue ;
if ( $guowai ==1 && $i ==5)
continue ;
$T [ $i ][ 'Title' ]= $contentStr [ 'results' ][0][ 'weather_data' ][ $aaa ][ 'date' ]. " " . $contentStr [ 'results' ][0][ 'weather_data' ][ $aaa ][ 'temperature' ]. " " . $contentStr [ 'results' ][0][ 'weather_data' ][ $aaa ][ 'weather' ]. " " . $contentStr [ 'results' ][0][ 'weather_data' ][ $aaa ][ 'wind' ];
$T [ $i ][ 'PicUrl' ]= $contentStr [ 'results' ][0][ 'weather_data' ][ $aaa ][ 'dayPictureUrl' ];
$T [ $i ][ 'Url' ]= $contentStr [ 'results' ][0][ 'weather_data' ][ $aaa ][ 'dayPictureUrl' ];
$aaa ++;
}
$tianqi = sprintf( $tqTpl , $fromUsername , $toUsername ,time(), "news" , $T [0][ 'Title' ], $T [0][ 'Description' ], $T [0][ 'PicUrl' ], $T [0][ 'Url' ], $T [1][ 'Title' ], $T [1][ 'Description' ], $T [1][ 'PicUrl' ], $T [1][ 'Url' ], $T [2][ 'Title' ], $T [2][ 'Description' ], $T [2][ 'PicUrl' ], $T [2][ 'Url' ], $T [3][ 'Title' ], $T [3][ 'Description' ], $T [3][ 'PicUrl' ], $T [3][ 'Url' ], $T [4][ 'Title' ], $T [4][ 'Description' ], $T [4][ 'PicUrl' ], $T [4][ 'Url' ], $T [5][ 'Title' ], $T [5][ 'Description' ], $T [5][ 'PicUrl' ], $T [5][ 'Url' ]);
echo $tianqi ;
}
}
|
效果图如下:
将其中的$mykey变量改成自己的APIkey就行了。另外有一点让我不解的是,我微信用的图文模板明明是6个item,为什么回复实际效果只有5个呢= = 求广大网友帮忙解释
最后附代码说明。用户发送“北京天气”和“天气北京”都是可以的,所以首先做了字符串处理,得到正确的城市名。利用百度地图API给的网址,发出GET请求(其实就是直接访问),获取一个json类型的数据包。将数据包信息转成数组格式,对应的回复微信用户即可。国外的天气没有当天天气的具体说明,所以最后做了一点小修改。