这里有新鲜出炉的 PHP 教程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
这篇文章主要为大家详细介绍了 PHP 微信开发之简单实现查询城市天气的相关资料,感兴趣的小伙伴们可以参考一下
PHP 微信查询城市天气,首先,你需要找到一个获取天气的 API,此处,我用的是百度的 apistore,申请和使用 API 的网址:http://apistore.baidu.com/apiworks/servicedetail/112.html
登录百度账号,并用手机发送请求获取 apikey。有了 apikey,可以按照它的示例来请求城市天气了。(可以按照城市中文名,拼音,城市编号等来查询)
你可以现在本地做测试,请求完成之后,再放到自己的域名空间的脚本里。
测试的脚本例如:(注意 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,那么应该能获取到所请求的天气了:
如果能返回正常的数据了,那么就可以放到你的域名空间里了。(公众平台里开发者中心填写的 url,该 url 有连接微信接口等功能)
如果你看不懂下面的代码或者第一次接触微信开发,可以参考我之前的文章:/article/17/0724/343452.html
下面的代码是 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),你的订阅号里,输入天气上海,那么应该能查到上海当天的天气了。
来源: http://www.phperz.com/article/17/0826/343450.html