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 相关文章推荐
PHP4和PHP5共存于一系统
Nov 17 PHP
php相当简单的分页类
Oct 02 PHP
php cookis创建实现代码
Mar 16 PHP
数据库查询记录php 多行多列显示
Aug 15 PHP
php 分库分表hash算法
Nov 12 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
解析PHP可变函数的经典用法
Jun 20 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
PHP按行读取文件时删除换行符的3种方法
May 04 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
Feb 14 PHP
Yii编程开发常见调用技巧集锦
Jul 15 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
77A一级收信机修理记
2021/03/02 无线电
PHP取整数函数常用的四种方法小结
2012/07/05 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
在Python中使用HTML模版的教程
2015/04/29 Python
python实现kMeans算法
2017/12/21 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
什么是Rollback Segment
2013/04/22 面试题
学生周末回家住宿长期请假条
2014/02/15 职场文书
美容院店长岗位职责
2014/04/08 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
2014年实习生工作总结
2014/11/27 职场文书
成事在人观后感
2015/06/16 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
2019秋季运动会口号
2019/06/25 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
php修改word的实例方法
2021/11/17 PHP