php微信开发之百度天气预报

5年以前  |  阅读数:361 次  |  编程语言:PHP 

本文实例为大家分享了php微信百度天气预报的开发代码,供大家参考,具体内容如下

1.登录百度ak申请:http://lbsyun.baidu.com/apiconsole/key

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); 
      } 
     } 

    } 
    ?> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例