php微信开发之百度天气预报
程序员文章站
2024-04-01 23:37:10
本文实例为大家分享了php微信百度天气预报的开发代码,供大家参考,具体内容如下
1.登录百度ak申请:
2.实现天气信息功能
baiduweather.p...
本文实例为大家分享了php微信百度天气预报的开发代码,供大家参考,具体内容如下
1.登录百度ak申请:
2.实现天气信息功能
baiduweather.php
<?php /** * 使用百度天气预报接口获取城市天气信息案例实现 */ //获取城市天气信息 function getweatherinfo($cityname){ if($cityname == "" || (strstr($cityname,"+"))){ return "发送城市加天气,例如北京天气"; } //获取到的ak $ak = your ak; //获取到的sk $sk = your sk; //调用接口 $url = 'http://api.map.baidu.com/telematics/v3/weather?ak=%s&location=%s&output=%s&sk=%s'; $uri = '/telematics/v3/weather'; $location = $cityname; $output = 'json'; $querystring_arrays = array( 'ak' => $ak, 'location' => $location, 'output' => $output ); $querystring = http_build_query($querystring_arrays); //生成sn $sn = md5(urlencode($uri.'?'.$querystring.$sk)); $targeturl = sprintf($url,$ak,urlencode($location),$output,$sn); $ch = curl_init(); curl_setopt($ch,curlopt_url,$targeturl); curl_setopt($ch,curlopt_returntransfer,1); $result = curl_exec($ch); curl_close($ch); $result = json_decode($result,true); if($result["error"]!=0){ return $result["status"]; } $curhour = (int)date('h',time()); $weather = $result["results"][0]; $weatherarray[]=array("title"=>$weather['currentcity']."天气预报","description"=>"","picurl"=>"","url"=>""); for($i = 0;$i<count($weather["weather_data"]);$i++){ $weatherarray[] = array("title"=> $weather["weather_data"][$i]["data"]."\n". $weather["weather_data"][$i]["weather"]. $weather["weather_data"][$i]["wind"]. $weather["weather_data"][$i]["temperature"], "description"=>"", "picurl"=>(($curhour>=6)&&($curhour< 18))?$weather["weather_data"][$i]["daypictureurl"]:$weather["weather_data"][$i]["nightpictureurl"],"url"=>"" ); } return $weatherarray; }
3.实现天气消息事件
<?php /* copyright 2016 all rights reserved */ define("token", "weixin"); /** * 百度天气预报案例实现 * 实现思路: * 1.申请百度ak、sk * 2.使用百度天气预报接口 * 3.实现天气信息功能 * 4.实现事件响应功能 */ $wechatobj = new wechatcallbackapitest(); if (!isset($_get['echostr'])) { $wechatobj->responsemsg(); }else{ $wechatobj->valid(); } class wechatcallbackapitest { //验证签名 public function valid() { $echostr = $_get["echostr"]; if($this->checksignature()){ header('content-type:text'); echo $echostr; exit; } } public function checksignature(){ $signature = $_get["signature"]; $timestamp = $_get["timestamp"]; $nonce = $_get["nonce"]; $token = token; $tmparr = array($token, $timestamp, $nonce); sort($tmparr); $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)){ $this->logger("r ".$poststr); $postobj = simplexml_load_string($poststr, 'simplexmlelement', libxml_nocdata); $rx_type = trim($postobj->msgtype); //消息类型分离 switch ($rx_type) { case "event": $result = $this->receiveevent($postobj); break; case "text": $result = $this->receivetext($postobj); break; default: $result = "unknown msg type: ".$rx_type; break; } echo $result; }else { echo ""; exit; } } //接收事件消息 public function receiveevent($object) { $content = ""; switch ($object->event) { case "subscribe": $content = "欢迎关注nicky的公众号 "; $content .= (!empty($object->eventkey))?("\n来自二维码场景 ".str_replace("qrscene_","",$object->eventkey)):""; break; case "unsubscribe": $content = "取消关注"; break; } $result = $this->transmittext($object, $content); return $result; } //接收文本消息 public function receivetext($object) { $keyword = trim($object->content); //自动回复模式 if (strstr($keyword, "天气")){ $city = str_replace('天气','',$keyword); include("baiduweather.php"); $content = getweatherinfo($city); } $result = $this->transmitnews($object, $content); return $result; } //回复图文消息 public function transmitnews($object, $newsarray) { if(!is_array($newsarray)){ return; } $itemtpl = " <item> <title><![cdata[%s]]></title> <description><![cdata[%s]]></description> <picurl><![cdata[%s]]></picurl> <url><![cdata[%s]]></url> </item> "; $item_str = ""; foreach ($newsarray as $item){ $item_str .= sprintf($itemtpl, $item['title'], $item['description'], $item['picurl'], $item['url']); } $xmltpl = "<xml> <tousername><![cdata[%s]]></tousername> <fromusername><![cdata[%s]]></fromusername> <createtime>%s</createtime> <msgtype><![cdata[news]]></msgtype> <articlecount>%s</articlecount> <articles> $item_str</articles> </xml>"; $result = sprintf($xmltpl, $object->fromusername, $object->tousername, time(), count($newsarray)); return $result; } //日志记录 public function logger($log_content) { if(isset($_server['http_appname'])){ //sae sae_set_display_errors(false); sae_debug($log_content); sae_set_display_errors(true); }else if($_server['remote_addr'] != "127.0.0.1"){ //local $max_size = 10000; $log_filename = "log.xml"; if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);} file_put_contents($log_filename, date('h:i:s')." ".$log_content."\r\n", file_append); } } } ?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。