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


Posted in PHP onJune 23, 2016

PHP微信查询城市天气,首先,你需要找到一个获取天气的API,此处,我用的是百度的apistore,申请和使用API的网址:http://apistore.baidu.com/apiworks/servicedetail/112.html 

登录百度账号,并用手机发送请求获取apikey。有了apikey,可以按照它的示例来请求城市天气了。(可以按照城市中文名,拼音,城市编号等来查询) 

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

你可以现在本地做测试,请求完成之后,再放到自己的域名空间的脚本里。
 测试的脚本例如:(注意apikey填写自己申请的) 

header('Content-type:text/html;charset=UTF-8');

$ch = curl_init();
$url = 'http://apis.baidu.com/apistore/weatherservice/cityname?cityname=上海';
$header = array(
 'apikey: ',//你的apikey
);
// 添加apikey到header
curl_setopt($ch, CURLOPT_HTTPHEADER , $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 执行HTTP请求
curl_setopt($ch , CURLOPT_URL , $url);
$res = curl_exec($ch);

$res = json_decode($res, true);
echo "<pre>";
print_r($res);
echo "</pre>";

$contentStr = "";

foreach($res as $k=>$v){
 if($k == "retData"){
 $contentStr = "城市:" . $v['city'] . "\n";
 $contentStr .= "日期:" . $v['date'] . "\n";
 $contentStr .= "天气:" . $v['weather'] ."\n";
 $contentStr .= "平均气温:" . $v['temp'] . "℃\n";
 $contentStr .= "最低气温:" . $v['l_tmp'] ."℃\n";
 $contentStr .= "最高气温:" . $v['h_tmp'] . "℃\n";
 $contentStr .= "风力:" . $v['WS'] . "\n";
 $contentStr .= "风向:" . $v['WD'] . "\n";
 $contentStr .= "日出时间:" . $v['sunrise'] . "\n";
 $contentStr .= "日落时间:" . $v['sunset'] . "\n";
 $contentStr .= "经度:" . $v['longitude'] . "\n";
 $contentStr .= "纬度:" . $v['latitude'];
 }
}

echo $contentStr;

如果你填写了自己的apikey,那么应该能获取到所请求的天气了: 

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

如果能返回正常的数据了,那么就可以放到你的域名空间里了。(公众平台里开发者中心填写的url,该url有连接微信接口等功能)
如果你看不懂下面的代码或者第一次接触微信开发,可以参考我之前的文章:https://3water.com/article/87252.htm

下面的代码是responseMsg的一部分:   

public function responseMsg(){
 
<span style="white-space:pre"> </span>//get post data, May be due to the different environments
 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接收微信发来的XML数据

 //extract post data
 if(!empty($postStr)){
  
  //解析post来的XML为一个对象$postObj
  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
 
  $fromUsername = $postObj->FromUserName; //请求消息的用户
  $toUsername = $postObj->ToUserName; //"我"的公众号id
  $keyword = trim($postObj->Content); //用户发送的消息内容
  $time = time(); //时间戳
  $msgtype = 'text'; //消息类型:文本
  $textTpl = "<xml>
 <ToUserName><![CDATA[%s]]></ToUserName>
 <FromUserName><![CDATA[%s]]></FromUserName>
 <CreateTime>%s</CreateTime>
 <MsgType><![CDATA[%s]]></MsgType>
 <Content><![CDATA[%s]]></Content>
 </xml>";

  if($postObj->MsgType == 'event'){ //如果XML信息里消息类型为event
  if($postObj->Event == 'subscribe'){ //如果是订阅事件
   $contentStr = "欢迎订阅misaka去年夏天!\n更多精彩内容:http://blog.csdn.net/misakaqunianxiatian";
   $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
   echo $resultStr;
   exit();
  }
  }

  $which = mb_substr($keyword, 0, 2, 'UTF-8');//获取要返回什么样的信息

  if($which== "翻译"){ //如果要进行翻译
  //调用有道翻译API进行翻译

  }elseif($which == "天气"){
  $wea = $which;
  $city = str_replace($wea, "", $keyword);

  $ch = curl_init();
  $url = 'http://apis.baidu.com/apistore/weatherservice/cityname?cityname=' . $city;
  $header = array('apikey: '); //此处的apikey使用自己申请的apikey,填在冒号之后

  // 添加apikey到header
  curl_setopt($ch, CURLOPT_HTTPHEADER , $header);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  // 执行HTTP请求
  curl_setopt($ch , CURLOPT_URL , $url);
  $res = curl_exec($ch);
  $res = json_decode($res, true);
  $contentStr = "";
  foreach($res as $k=>$v){

   if($k == "retData"){
   $contentStr = "城市:" . $v['city'] . "\n";
   $contentStr .= "日期:" . $v['date'] . "\n";
   $contentStr .= "天气:" . $v['weather'] ."\n";
   $contentStr .= "平均气温:" . $v['temp'] . "℃\n";
   $contentStr .= "最低气温:" . $v['l_tmp'] ."℃\n";
   $contentStr .= "最高气温:" . $v['h_tmp'] . "℃\n";
   $contentStr .= "风力:" . $v['WS'] . "\n";
   $contentStr .= "风向:" . $v['WD'] . "\n";
   $contentStr .= "日出时间:" . $v['sunrise'] . "\n";
   $contentStr .= "日落时间:" . $v['sunset'] . "\n";
   $contentStr .= "经度:" . $v['longitude'] . "\n";
   $contentStr .= "纬度:" . $v['latitude'];
   }
  }
  $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
  echo $resultStr;
  exit();

  }else{
  $contentStr = "输入翻译XXX可以进行翻译(=・ω・=)\n\n输入天气XX可以查询城市天气";
  $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
  echo $resultStr;
  exit();
  }


 

 

完成之后(别忘了填写apikey),你的订阅号里,输入天气上海,那么应该能查到上海当天的天气了。

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

PHP 相关文章推荐
php fsockopen中多线程问题的解决办法[翻译]
Nov 09 PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
php共享内存段示例分享
Jan 20 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
Apr 20 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
PHP微信开发之有道翻译
Jun 23 #PHP
PHP微信开发之文本自动回复
Jun 23 #PHP
php微信高级接口群发 多客服
Jun 23 #PHP
php英文单词统计器
Jun 23 #PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 #PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 #PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 #PHP
You might like
PHP之变量、常量学习笔记
2008/03/27 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
php精度计算的问题解析
2019/06/21 PHP
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Python实现字典依据value排序
2016/02/24 Python
对python中return和print的一些理解
2017/08/18 Python
python 判断网络连通的实现方法
2018/04/22 Python
django的settings中设置中文支持的实现
2019/04/28 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
python实现滑雪者小游戏
2020/02/22 Python
python如何停止递归
2020/09/09 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
大学新学期计划书
2014/04/28 职场文书
数据保密承诺书
2014/06/03 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
教学督导岗位职责
2015/04/10 职场文书
公司财务部岗位职责
2015/04/14 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
电影复兴之路观后感
2015/06/02 职场文书
Python基础详解之描述符
2021/04/28 Python