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


Posted in PHP onNovember 18, 2016

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

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

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

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微信开发之百度天气预报

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

PHP 相关文章推荐
Smarty+QUICKFORM小小演示
Feb 25 PHP
PHP foreach循环使用详解与实例代码
May 08 PHP
php session_start()出错原因分析及解决方法
Oct 28 PHP
PHP实现变色验证码实例
Jan 06 PHP
php 判断服务器操作系统的类型
Feb 17 PHP
php合并数组中相同元素的方法
Nov 13 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
May 09 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 #PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 #PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 #PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 #PHP
PHP二维数组去重实例分析
Nov 18 #PHP
浅谈php fopen下载远程文件的函数
Nov 18 #PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 #PHP
You might like
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
Python常用列表数据结构小结
2014/08/06 Python
Python新手实现2048小游戏
2015/03/31 Python
Python 文件管理实例详解
2015/11/10 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
工作建议书范文
2014/05/13 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
python使用glob检索文件的操作
2021/05/20 Python
MySQL分区以及建索引的方法总结
2022/04/13 MySQL
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL