微信公众号用百度车联网API回复天气预报
2016-11-04 10:11
176 查看
1.申请百度地图开发平台访问应用(AK);
点创建应用
然后提交,AK就申请好了;
2.然后我们看下百度的车联网API中的天气查询,这是链接车联网API
这是API上面的接口实例http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=E4805d16520de693a3fe707cdc962045
点看链接我们可以看到返回结果;返回结果可以是xml,也可以是json,
默认的是xml,这里返回的是json格式;
【提示:在代码中城市名是需要urlencode(城市名)转换的
这里 北京 =>%E5%8C%97%E4%BA%AC 】
3.然后我们可以编写代码了0.0
回复文本的消息
回复图文消息
然后贴出我的代码
点创建应用
然后提交,AK就申请好了;
2.然后我们看下百度的车联网API中的天气查询,这是链接车联网API
这是API上面的接口实例http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=E4805d16520de693a3fe707cdc962045
点看链接我们可以看到返回结果;返回结果可以是xml,也可以是json,
默认的是xml,这里返回的是json格式;
【提示:在代码中城市名是需要urlencode(城市名)转换的
这里 北京 =>%E5%8C%97%E4%BA%AC 】
3.然后我们可以编写代码了0.0
回复文本的消息
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[你好]]></Content> </xml>
回复图文消息
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>2</ArticleCount> <Articles> <item> <Title><![CDATA[title1]]></Title> <Description><![CDATA[description1]]></Description> <PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url> </item> <item> <Title><![CDATA[title]]></Title> <Description><![CDATA[description]]></Description> <PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url> </item> </Articles> </xml>
然后贴出我的代码
<?php define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); if (isset($_GET['echostr'])) { $wechatObj->valid(); }else{ $wechatObj->responseMsg(); } class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ header('content-type:text'); echo $echoStr; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } public function responseMsg(){ $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $city = trim($postObj->Content); $report_arr = $this->receiveWeather($city); if($report_arr['status'] != "success"){ $content = "请输入正确的城市名"; $resultStr = $this->transmitText($postObj,$content); } else{ $itemTpl = "<item> <Title><![CDATA[【%s】%s %s %s %s]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[http://m.hao123.com/a/tianqi]]></Url> </item>"; $item_str = ""; foreach ($report_arr['weather_data'] as $item) $item_str .= sprintf($itemTpl, $city, $item['date'], $item['weather'], $item['wind'], $item['temperature'], $item['dayPictureUrl']); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>%s</ArticleCount> <Articles> $item_str </Articles> </xml>"; $resultStr = sprintf($textTpl, $postObj->FromUserName, $postObj->ToUserName, time(), count($report_arr['weather_data'])); } echo $resultStr; } } private function receiveWeather($cityName){ $ak = "输入你自己申请的AK"; $url = "http://api.map.baidu.com/telematics/v3/weather?location=".urlencode($cityName)."&output=json&ak=$ak"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // 设置你需要抓取的URL curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 $output = curl_exec($ch); // 运行cURL,请求网页 curl_close($ch); $result = json_decode($output, true); $weather_report = array('weather_data' => $result['results'][0]['weather_data'], 'index' => $result['results'][0]['index'], 'status' => $result['status']); return $weather_report; } //发送文本信息 private function transmitText($object,$content){ if (!isset($content) || empty($content)){ return ""; } $xmlTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content); return $result; } } ?>
相关文章推荐
- 微信公众号开发2自动回复
- 使用jQuery、Yahoo API和HTML5的geolocation来开发一个天气预报web应用
- flask+新浪sae+图灵机器人实现超简单微信公众号智能回复功能
- Android天气预报各种天气API
- 天气预报API
- 微信公众号添加关注后自动回复图文信息
- 微信公众号回复被动消息超时解决办法
- Google API 获取天气预报信息
- 微信公众号接受文本消息与自动回复消息
- 天气预报api
- intellij下使用springboot实现微信公众号回复功能
- 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复
- 百度 天气预报API
- 新浪sae配置微信公众号实现自动回复(一)
- 微信公众号开发教程[010]-消息管理-获取公众号的自动回复规则
- 微信公众号开发-接收与回复消息
- 微信公众号开发API
- 微信公众号开发关键词自动回复-微信开发教程9
- 极端气候频现 五款开发天气预报应用的API
- Android使用XmlPullParser解析XML以及天气预报信息api使用