你所在的位置:微信群>公众号运营>正文

源代码的开发(以新浪SAE为例),位置与天气编写

原创
发布时间: 2023-05-31 10:22:05 热度: 390 作者: 李斯特 来源: 微信加 本文共 5154 字 阅读需要 18 分钟
1.地理位置在微信公众服务号开发需求中经常有获取用户位置信息的功能,通过用户的位置信息,可以做一些地图导航,以及基于LBS的营销活动。

1.地理位置

在微信公众服务号开发需求中经常有获取用户位置信息的功能,通过用户的位置信息,可以做一些地图导航,以及基于 LBS 的营销活动。地理位置获取流程如图 9-16 所示。

图 9-16 位置信息获取流程

开通了上报地理位置接口的公众号,用户在关注后进入公众号会话时,会弹框让用户确认是否允许公众号使用其地理位置。弹框只在关注后出现一次,用户以后可以在公众号详情页面进行操作。第三方在收到地理位置上报信息之后,只需要回复 success 表明收到即可,不允许回复粉丝消息。

用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,上报地理位置以推送 XML 数据包到开发者填写的 URL 来实现。

推送 XML 数据包示例:

<xml>

< ToUserName ><![CDATA[toUser]]></ ToUserName >

< FromUserName ><![CDATA[fromUser]]></ FromUserName >

< CreateTime >123456789</ CreateTime >

<MsgType><![CDATA[event]]></MsgType>

<Event><![CDATA[LOCATION]]></Event>

<Latitude>23.137466</Latitude>

<Longitude>113.352425</Longitude>

<Precision>119.385040</Precision>

</xml>

Event 为事件类型,即 LOCATION;Latitude 为地理位置纬度; Longitude 为地理位置经度; Precision 为地理位置精度。

2.天气

推送天气情况需要先行获得用户的地理位置信息,才能为用户提供相应地区的天气预报。同时需要通过中国天气网提供的开放 API 进行相关地区天气查询。

用户发送过来查询天气的消息的格式是固定好的,即 “地区 + 天气”,所以,首先截取后两个字,判断是否为“天气”关键词。

使用 php 函数 mb_substr()截取,关于该函数的用法如图 9-17 所示。

图 9-17 函数用法

$str=mb_ substr($keyword,- 2,2,”UTF-8”);

从消息的结尾数第二个字符开始截取,截取两个字符,然后加以判断是否为“天气”关键词。下面进行地区提取,还是使用 mb_substr()函数。从消息的开头开始,截掉末尾的两个字符(天气),即得地区关键词。然后进行判断,继而调用函数查询天气数据。

if($str==' 天气 ' && !empty($str _key))

{

//调用函数查询天气数据

}

weather()函数查询返回信息比较全面,也是以 json 格式提供,格式如下。

{ "weatherinfo": {

//基本信息;

"city":"北京","city_ en":"suzhou",

"date_y":"2013 年 7 月 9 日 ","date":"","week":" 星期二 ","fchh":" 18 ","cityid":" 101190401",

//摄氏温度

"temp1":"30℃~37℃",

"temp2":"30℃~37℃",

"temp3":"29℃~35℃",

"temp4":"27℃~33℃",

"temp5":"27℃~31℃",

"temp6":"27℃~35℃",

//华氏温度;

"tempF1":"86℉~98.6℉",

"tempF2":"86℉~98.6℉",

"tempF3":"84.2℉~95℉",

"tempF4":"80.6℉~91.4℉",

"tempF5":"80.6℉~87.8℉",

"tempF6":"80.6℉~95℉",

//天气描述;

"weather1":"晴转多云",

"weather2":"晴转多云",

"weather3":"晴转多云",

"weather4":"多云",

"weather5":"雷阵雨转中雨",

"weather6":"雷阵雨转多云",

//天气描述图片序号

"img1":"0",

"img2":"1",

"img3":"0",

"img4":"1",

"img5":"0",

"img6":"1",

"img7":"1",

"img8":"99",

"img9":"4",

"img10":"8",

"img11":"4",

"img12":"1",

//图片名称;

"img_single":"1",

"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":"西南风 3-4 级",

"wind2":"西南风 3-4 级",

"wind3":"东南风 3-4 级",

"wind4":"东南风 3-4 级转 4-5 级",

"wind5":"东南风 4-5 级转西南风 3-4 级",

"wind6":"西南风 3-4 级转 4-5 级",

//风速级别描述

"fx1":"西南风",

"fx2":"西南风",

"fl1":"3-4 级",

"fl2":"3-4 级",

"fl3":"3-4 级",

"fl4":"3-4 级转 4-5 级",

"fl5":"4-5 级转 3-4 级",

"fl6":"3-4 级转 4-5 级",

//今日穿衣指数;

"index":"炎热",

"index_d":"天气炎热,建议着短衫、短裙、短裤、薄型 T 恤衫等清凉夏季服装。",

//48 小时穿衣指数

"index48":"炎热",

"index48_d":"天气炎热,建议着短衫、短裙、短裤、薄型 T 恤衫等清凉夏季服装。",

//紫外线及 48 小时紫外线

"index_uv":"中等",

"index48_uv":"中等",

//洗车指数

"index_xc":"适宜",

//旅游指数

"index_tr":"较不宜",

//舒适指数

"index_co":"很不舒适",

"st1":"36",

"st2":"28",

"st3":"36",

"st4":"28",

"st5":"34",

"st6":"27",

//晨练指数

"index_cl":"较适宜",

//晾晒指数

"index_ls":"适宜",

//过敏指数

"index_ag":"不易发"}}

我们可以通过解析 JSON,获取相应城市的天气数据。

weather()函数如下。

private function weather($n) {

include("weather _ cityId.php");

$c_ name=$weather _cityId[$n];

if(!empty($c _name)){

$json=file _get_ contents("http: // m.weather.com.cn /data/".$c_ name.".html");

return json _ decode($json);

} else {

return null;

}

}

这里 include 了一个城市对应关系文件 weather_ cityId.php ,格式如下。

<?php

$weather_ cityId=array(" 北京"=>"101010100","上海"=>"101020100","苏州"=>"101190401");

?>

根据传入的城市名,得到城市代码,如果不为空,则调用中国天气网的 API 进行查询,返回 json 格式的数据,然后进行解析并返回数据,如果为空,则返回 null 值。

判断返回数据是否为空,若为空,则 $contentStr=“ 抱歉,没有查到\”“.$str_key."\"的天气信息!”;若返回数据不为空,会返回相关的信息,如下所示。

$contentStr=" 【".$data-> weatherinfo- >city."天气预报】\n".$data-> weatherinfo- >date_ y." ".$data- > weatherinfo- >fchh."时发布"."\n\n 实时天气\n".$data-> weatherinfo- >weather1 ." ".$data- > weatherinfo- >temp1 ." ".$data- > weatherinfo- >wind1."\n\n 温馨提示:".$data-> weatherinfo- >index_d."\n\n 明天\n".$data-> weatherinfo- >weather2 ." ".$data- > weatherinfo- >temp2 ." ".$data- > weatherinfo- >wind2."\n\n 后天\n".$data-> weatherinfo- >weather3 ." ".$data- > weatherinfo- >temp3 ." ".$data- > weatherinfo- >wind3;

版权保护: 本文由 李斯特 原创,转载请保留链接: https://www.wechatadd.com/artdet/8398