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数组函数序列之array_splice() - 在数组任意位置插入元素
Nov 07 PHP
PHP 查找字符串常用函数介绍
Jun 07 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
php页面防重复提交方法总结
Nov 25 PHP
Linux中为php配置伪静态
Dec 17 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
Mar 12 PHP
php实现微信公众号无限群发
Oct 11 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
PHP使用HTML5 FormData对象提交表单操作示例
Jul 02 PHP
php tpl模板引擎定义与使用示例
Aug 09 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 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
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
php base64 编码与解码实例代码
2017/03/21 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python复制文件的方法实例详解
2015/05/22 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
详解pyinstaller selenium python3 chrome打包问题
2019/10/18 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
网络工程专业毕业生推荐信
2013/10/28 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
公安学专业求职信
2014/07/27 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
vue3不同环境下实现配置代理
2022/05/25 Vue.js