博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信公众平台消息接口开发(3)
阅读量:6923 次
发布时间:2019-06-27

本文共 6251 字,大约阅读时间需要 20 分钟。

转自:

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

效果如下:

先了解下中国气象网的api,其实只是一条url,即http://m.weather.com.cn/data/城市代码.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
=
""
.
$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"
=>
""
),
            
array
(
"title"
=>
$index_d
,
"des"
=>
"testdes"
),
            
array
(
"title"
=>
date
(
"Y年m月d日"
).
"  "
.
$temp1
.
"  "
.
$weather1
.
"  "
.
$wind1
,
"des"
=>
"testdes"
,
"pic"
=>
""
.
$img1
.
".png"
),
            
array
(
"title"
=>
date
(
"Y年m月d日"
,
strtotime
(
"+1 day"
)).
"  "
.
$temp2
.
"  "
.
$weather2
.
"  "
.
$wind2
,
"des"
=>
"testdes"
,
"pic"
=>
""
.
$img2
.
".png"
),
            
array
(
"title"
=>
date
(
"Y年m月d日"
,
strtotime
(
"+2 day"
)).
"  "
.
$temp3
.
"  "
.
$weather3
.
"  "
.
$wind3
,
"des"
=>
"testdes"
,
"pic"
=>
""
.
$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://www.cnblogs.com/hxxy2003/archive/2013/03/20/2970535.html

你可能感兴趣的文章
IIS6 配置WCF REST服务注意事项
查看>>
【Android OpenGL ES】阅读hello-gl2代码(二)Java代码
查看>>
Fedora 7系统安装配置心得(转)(有图哦)
查看>>
Linux硬件信息查看(转)
查看>>
Android如何导入已有的外部数据库(在raw下自己导入db文件)
查看>>
MYSQL批处理
查看>>
证明hibernate一级缓存的存在
查看>>
Bean的作用域
查看>>
20172304 《程序设计与数据结构》实验三总结报告
查看>>
pgAdmin下如何将表数据导出成sql文件
查看>>
80后公务员辞职自述:7年收入没涨 能力是听话
查看>>
静态全局对象 构造函数
查看>>
POJ 1236 tarjan+缩点
查看>>
浏览器字体渲染
查看>>
程序员,我们需要顶层架构设计
查看>>
第17章 泛型
查看>>
三栏布局的左右固定中间自适应
查看>>
分部类
查看>>
水平居中/垂直居中/水平垂直居中总结
查看>>
XML学习总结(1)——XML入门
查看>>