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控制网页过期时间的代码
Sep 28 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
Jul 12 PHP
浅析is_writable的php实现
Jun 18 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
php实现按文件名搜索文件的远程文件查找器
May 10 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
详解js异步文件加载器
Jan 24 PHP
PHP获取当前执行php文件名的代码
Mar 02 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
Yii2压缩PHP中模板代码的输出问题
Aug 28 PHP
Yii框架布局文件的动态切换操作示例
Nov 11 PHP
YII2框架使用控制台命令的方法分析
Mar 18 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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
php 保留小数点
2009/04/21 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
农历与西历对照
2006/09/06 Javascript
一个对于js this关键字的问题
2007/01/09 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
Python中用format函数格式化字符串的用法
2015/04/08 Python
python简单分割文件的方法
2015/07/30 Python
Python异常处理操作实例详解
2018/08/28 Python
由面试题加深对Django的认识理解
2019/07/19 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
某个公司的Java笔面试题
2016/03/11 面试题
教师实习的自我鉴定
2013/10/26 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
感恩节寄语2015
2015/03/24 职场文书
大学生社会服务心得体会
2016/01/22 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
SpringBoot 集成Redis 过程
2021/06/02 Redis