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 相关文章推荐
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
测试php连接mysql是否成功的代码分享
Jan 24 PHP
php求一个网段开始与结束IP地址的方法
Jul 09 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
php类的自动加载操作实例详解
Sep 28 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
Jan 29 PHP
PHP实现动态压缩js与css文件的方法
May 02 PHP
Laravel推荐使用的十个辅助函数
May 10 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
缅甸的咖啡简史
2021/03/04 咖啡文化
php木马攻击防御之道
2008/03/24 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
php中JSON的使用与转换
2015/01/14 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
利用python修改json文件的value方法
2018/12/31 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
python 如何实现遗传算法
2020/09/22 Python
python制作抽奖程序代码详解
2021/01/15 Python
Numpy ndarray 多维数组对象的使用
2021/02/10 Python
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
为什么要做架构设计
2015/07/08 面试题
中专毕业生自我鉴定
2013/11/21 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
中学校庆方案
2014/03/17 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
2014年招生工作总结
2014/11/26 职场文书
车间统计员岗位职责
2015/04/14 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
详解python网络进程
2021/06/15 Python