TP5结合聚合数据API查询天气
php根据城市查询天气情况
看到有人分享java的查询全国天气情况的代码,于是我想分享一个php版本的查询天气接口。免费查询天气的接口有很多,比如百度的apistore的天气api接口,我本来想采用这个接口的,可惜今天百度apistore死活打不开了。那就用聚合数据的天气api接口吧,也是免费的,不过聚合数据的接口申请相对繁琐。
申请地址:https://www.juhe.cn/docs/api/id/73
1、注册一个聚合数据的账号
2、实名认证你的账号
3、申请你需要的api接口
4、申请验证你的api接口
虽然是繁琐了很多,不过返回的信息确是非常的丰富。
好了,现在来分享一下,tp5中怎么整合进去。
config.php中,配置你的appkey:
//配置文件
return [ 'appkey' => '' //此处填入你的key
];
common.php中放入请求的方法:
<?php
/**
* 请求接口返回内容
* @param string $url [请求的URL地址]
* @param string $params [请求的参数]
* @param int $ipost [是否采用POST形式]
* @return string
*/
function juhecurl($url, $params=false, $ispost=0){ $httpInfo = [];
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
curl_setopt( $ch, CURLOPT_USERAGENT , 'JuheData' );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if( $ispost )
{
curl_setopt( $ch , CURLOPT_POST , true );
curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
curl_setopt( $ch , CURLOPT_URL , $url );
}
else
{
if($params){
curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
}else{
curl_setopt( $ch , CURLOPT_URL , $url);
}
}
$response = curl_exec( $ch );
if ($response === FALSE) {
//echo "cURL Error: " . curl_error($ch);
return false;
}
$httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
$httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
curl_close( $ch ); return $response;
}
控制器中,index.php的代码:
<?php
// +----------------------------------------------------------------------
// | 利用聚合数据查询天气
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 http://baiyf.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: NickBai <1902822973@qq.com>
// +----------------------------------------------------------------------
namespace app\weather\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return $this->fetch();
} /**
* 根据城市获取天气情况
*/
public function getWeatherByCity()
{
$cityName = input('param.cityname');
$url = "http://op.juhe.cn/onebox/weather/query";
$appkey = config('appkey'); $params = [
"cityname" => $cityName,//要查询的城市,如:温州、上海、北京
"key" => $appkey,//应用APPKEY(应用详细页查询)
"dtype" => "",//返回数据的格式,xml或json,默认json
];
$paramstring = http_build_query($params); $content = juhecurl($url, $paramstring);
$result = json_decode($content, true); if( empty( $result ) ){
return json( ['code' => -1, 'data' => '', 'msg' => '请求失败'] );
} if( '0' != $result['error_code'] ){
return json( ['code' => -2, 'data' => '', 'msg' => $result['error_code']." : ".$result['reason']] );
} return json( ['code' => 1, 'data' => $result, 'msg' => 'success'] );
}
}
view层中,index.html的代码如下:
<!doctype html>
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>天气查询</title>
<script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js" type="text/javascript"></script>
<script src="/static/layer/layer.js" type="text/javascript"></script>
<link href="/static/css/style.css" rel="stylesheet" type="text/css">
<body>
<!--nav是导航 结束-->
<div class="search center">
<input class="text-pc" id="searchbox" name="" type="text" placeholder="请输入城市名称"/>
<a class="button-pc" id="searchBtn" href="javascript:void(0);">
<span class="icon-search"></span>
<span class="search2 am-hide-sm-only">查询</span></a>
</div> <div class="check-Result center" style="display:block"> </div> <script type="text/javascript">
$(function(){
$("#searchBtn").click(function(){
var city = $("#searchbox").val();
if( '' == city ){
layer.alert('城市名称不能为空', { 'icon' : 2 });
return ;
}
var index = layer.load(0, {shade: false}); //0代表加载的风格,支持0-2
$.getJSON( "{:url('weather/index/getWeatherByCity')}", { 'cityname' : city }, function(res){
layer.close( index );
if( 1 == res.code ){ }else{
layer.alert( res.msg , { 'icon' : 2 });
}
});
})
});
</script> </body>
</html>
通过浏览器访问页面如下:
输入你要查询的城市,比如:南京,点击查询
json数据成功返回,这是你就可以根据你的需要渲染页面了。参数的讲解参照这里
https://www.juhe.cn/docs/api/id/73
TP5结合聚合数据API查询天气的更多相关文章
- 使用聚合数据API查询快递数据-短信验证码-企业核名
有位朋友让我给他新开的网站帮忙做几个小功能,如下: 输入快递公司.快递单号,查询出这个快件的所有动态(从哪里出发,到了哪里) 在注册.登录等场景下的手机验证码(要求有一定的防刷策略) 通过输入公司名的 ...
- 用聚合数据API(苏州实时公交API)快速写出小程序
利用聚合数据API快速写出小程序,过程简单. 1.申请小程序账号 2.进入开发 3.调用API.比如“苏州实时公交”小程序,选择的是苏州实时公交API. 苏州实时公交API文档:https://www ...
- Android通过聚合数据API实现天气预报
使用聚合数据的API 聚合数据地址:https://www.juhe.cn/ 在数据服务->生活常用->全国天气预报,申请天气预报的API使用的KEY 保存请求示例的地址,把您申请的KEY ...
- PHP 获取IP地址位置信息「聚合数据API」
聚合数据 提供了[查询IP所属区域]的服务接口,只需要以 GET 请求的方式向 API 传入 IP地址 和 APPKEY 即可获得查询结果. 这里的难点主要在于如何通过PHP获取客户端IP地址,以及如 ...
- TP5 调用快递鸟api 查询快递信息
1,去快递鸟,下载sdk https://www.kdniao.com/api-track 下载PHPsdk 2,下载下来的事PHP文件,不是以类的形式显示的,所以为了方便,我把他封装成了类,不需要封 ...
- 使用API查询天气
服务端代码 [HttpPost] public ActionResult GetWeather() { HttpWebRequest request = (HttpWebRequest)HttpWeb ...
- 利用AFNetworking框架去管理从聚合数据上面请求到的数据
数据从JSON文档中读取处理的过程称为“解码”过程,即解析和读取过程,来看一下如果利用AFNetworking框架去管理从聚合数据上面请求到的数据. 一.下载并导入AFNetworking框架 这部分 ...
- 聚合数据全国天气预报api接口
查询天气预报在APP中常用的一个常用功能,聚合数据全国天气预报api接口可以根据根据城市名/id查询天气.根据IP查询天气.据GPS坐标查询天气.查询城市天气三小时预报,并且支持全国不同城市天气预报查 ...
- 聚合数据 iOS 项目开发实战:条码查询器
记录下,聚合数据 iOS 项目开发实战:条码查询器:视频地址:http://www.jikexueyuan.com/course/324.html 条码查询API:https://www.juhe.c ...
随机推荐
- git 远程仓库回滚
git branch backup #创建备份分支 git push origin backup:backup #push到远程 git reset --hard commit_id #本地分支回滚 ...
- 传送带(bzoj 1857)
Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度 ...
- pat 团体天梯赛 L2-004. 这是二叉搜索树吗?
L2-004. 这是二叉搜索树吗? 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一棵二叉搜索树可被递归地定义为具有下列性质的 ...
- 遍历简单XML节点
原文发布时间为:2009-08-26 -- 来源于本人的百度文章 [由搬家工具导入] <?xml version="1.0" encoding="gb2312&qu ...
- java网络编程学习笔记(一)
1.进程之间的通信 进程是指运行中的程序,进程的任务就是执行程序中的代码. 存在计算机网络上的两个进程只需要关注它们通信的具体内容,而不需关注消息在网络上传输的具体细节. 2.计算机网络的概念 Int ...
- AtCoder Regular Contest 075 C D E (暂时)
C - Bugged 题意 给\(n\)个数,找其中的一个子集,使得其和最大,且不是\(10\)的整数倍. 思路 先对\(n\)个数求和, 如果本身即不被\(10\)整除,则即为答案. 否则,如果本身 ...
- 容易混淆的某些Math方法说明
1. Math.round 返回最接近的整数值,实际上就是我们说的对小数进行四舍五入. /** * 返回最接近参数的long */ static long round(double a) /** * ...
- 修正MYSQL错误数据的一个存储过程
-- 添加索引 CREATE INDEX idx_STRUCTURE_ID ON t_resource_info(STRUCTURE_ID); DROP PROCEDURE IF EXISTS `P_ ...
- ATOM入坑必备插件
Atom作为Javascript/CSS/HTML等前端编辑器利器,其强大功能依靠各种插件,以下是笔者在入坑阶段,精挑细选总结出的必不可少的插件,熟悉运用这些插件,一定成吨提高生产效率.安装这些插件只 ...
- weblogic优化参数
因部署应用多,内存是使用量较大以及系统需要放在后台运行,以下步骤在确认weblogic可以正常运行的情况下继续进行修改配置. 一.启动免输密码配置: 1.停止weblogic 在系统运行界面按ctrl ...