微信公众平台消息接口开发(3)

原文链接

上面那篇讲了翻译宝宝,调用有道翻译的接口,现在开发天气宝宝,调用的接口是中国气象网的,这个返回给用户的信息是图文信息。

效果如下:

豌豆荚截图20130319003400 微信公众平台消息接口开发(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 ];
    $url = "http://m.weather.com.cn/data/" . $code . ".html" ;
    $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

 欢迎关注天气宝宝和翻译宝宝:
qrcode for gh 64423d947dbe 430 微信公众平台消息接口开发(3) qrcode for gh 9bf953886ba5 430 微信公众平台消息接口开发(3)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值