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

}
?> 

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

(0)

相关推荐

  • PHP调用API接口实现天气查询功能的示例

    天气预报查询接口API,在这里我使用的是国家气象局天气预报接口 使用较多的还有:新浪天气预报接口.百度天气预报接口.google天气接口.Yahoo天气接口等等. 1.查询方式 根据地名查询各城市天气情况 2.请求URL地址 http://route.showapi.com/9-2 3.接口参数说明: 一.系统级参数(所有接入点都需要的参数): 二.应用级参数(每个接入点有自己的参数): 4.返回参数 以JSON格式返回结果 1)系统级参数(所有接入点都会返回的参数) 2)应用级参数(系统级输出

  • php使用百度天气接口示例

    注意地区要转码的百度ak申请地址:http://lbsyun.baidu.com/apiconsole/key 复制代码 代码如下: <?php $city="嘉兴";$content = file_get_contents("http://api.map.baidu.com/telematics/v3/weather?location=%E5%98%89%E5%85%B4&output=json&ak=5slgyqGDENN7Sy7pw29IUvrZ&

  • 利用中国天气预报接口实现简单天气预报

    复制代码 代码如下: <?phpheader("content-type:text/html;charset=utf-8");$weather = file_get_contents("http://www.weather.com.cn/data/sk/101280601.html");echo $weather;?> 复制代码 代码如下: <html><head><meta http-equiv="Content

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

    本文实例为大家分享了php微信百度天气预报的开发代码,供大家参考,具体内容如下 1.登录百度ak申请:http://lbsyun.baidu.com/apiconsole/key 2.实现天气信息功能 baiduWeather.php <?php /** * 使用百度天气预报接口获取城市天气信息案例实现 */ //获取城市天气信息 function getWeatherInfo($cityName){ if($cityName == "" || (strstr($cityName

  • asp.net微信开发(开发者接入)

    先上图,看一看需要进行哪些项目的操作: 在项目的根目录或者特定的文件夹内,创建一个ashx文件(一般处理程序文件),如图 public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string postString = string.Empty; if (HttpContext.Current.Request.HttpMethod.ToUpper() ==

  • 微信开发 网页授权获取用户基本信息

    微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章. 一.什么是OAuth2.0 官方网站:http://oauth.net/   http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method

  • java微信开发第二步 获取消息和回复消息

    接着上一篇java微信开发API第一步 服务器接入进行学习,下面介绍java微信开发第二步:获取消息和回复消息,具体内容如下 * 本示例根据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM )进行开发演示. * 编辑平台:myeclipse10.7+win32+jdk1.7+tomcat7.0  * 服务器:阿里云 windows server 2008 64bits * 平台要求:servlet

  • java微信开发API第一步 服务器接入

    微信开发API如何接入服务器,下面就为大家进行介绍 一.说明 * 本示例根据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM )进行开发演示. * 编辑平台:myeclipse10.7+win32+jdk1.7+tomcat7.0  * 服务器:阿里云 windows server 2008 64bits * 平台要求:servlet使用注解方式,平台要求:j2ee6.0+.jdk6.0+.tom

  • PHP微信开发之查询城市天气

    PHP微信查询城市天气,首先,你需要找到一个获取天气的API,此处,我用的是百度的apistore,申请和使用API的网址:http://apistore.baidu.com/apiworks/servicedetail/112.html 登录百度账号,并用手机发送请求获取apikey.有了apikey,可以按照它的示例来请求城市天气了.(可以按照城市中文名,拼音,城市编号等来查询) 你可以现在本地做测试,请求完成之后,再放到自己的域名空间的脚本里.  测试的脚本例如:(注意apikey填写自己

  • 微信 开发生成带参数的二维码的实例

    微信开发生成带参数的二维码的讲解 在微信公众号平台开发者那里,在"账号管理"那里,有一项功能是"生成带参数的二维码",通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上 用微信扫一扫推送到开发者网址那儿的数据如下: <xml><ToUserName><![CDATA[gh_452****b0f2]]></ToUserName> <FromUserName><![CDATA[o

  • asp.net微信开发(消息应答)

    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上. 请注意: 1.关于重试的消息排重,推荐使用msgid排重. 2.微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次.假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试.详情请见"发送消息-被动回复消息". 3.为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密.开启加密后,用户发来的消息会被加密

  • php微信开发接入

    微信,想必大家都不陌生,像支付宝一样在悄悄的改变大家的生活方式.伴随着这种新的生活方式,越来越多的微服务也开始进入我们的生活,我们可以使用微信查询信用卡帐单.还款.支付,在最近的一次微信合作伙伴大会上,腾讯向公众服务号开放支付功能与九大高级接口,透过这些接口,开发者可以实现使用利用微信摇控电视.冰箱.洗衣机甚至电饭煲,使用微信的微支付功能,还能方便地在线购买电影票.手机充值.收看互联网电视付费节目等. 下面,就我个人的了解,简单讲述一下微信开发的第一步,如何与微信服务器对接. 想要涉足微信开发,

  • java微信开发API第二步 获取和回复消息

    微信开发API如何获取和回复消息,下面就为大家进行介绍 一.说明 * 本示例根据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM )进行开发演示. * 编辑平台:myeclipse10.7+win32+jdk1.7+tomcat7.0  * 服务器:阿里云 windows server 2008 64bits * 平台要求:servlet使用注解方式,平台要求:j2ee6.0+.jdk6.0+.t

随机推荐