微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

微信开发-天气预报功能

这篇文章主要为大家详细介绍了PHP微信开发之百度天气预报的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

1.登录百度ak申请:http://www.jb51.cc/


2.实现天气信息功能

Weather.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(weather.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); 
  } 
 } 
 
} 
?>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。