thinkphp使用url请求调用ThinkApi天气教程【图文详解】
作者:PHP太baby咯
前言
看了一年多的thinkphp手册,我才发现了这个国内比较便宜的(主要免费的接口和对应次数比较多)Api服务商,虽然在使用之后发现部分接口的返回值没有某合返回的数据要多以及类似内容审核的不够严谨,不过在我看来非常适合框架新手玩家去试一试调用接口的快乐~以下带来详细教程~
一、注册ThinkPHP服务市场账号
进入首页后点击右上角,注册、实名过程我就不说了。
二、拿到自己的AppCode(因为调用接口需要啦)
(1)点击我的服务
(2)点击安全信息
三、随便找个免费的接口试试~
偷懒~用大家喜闻乐见的天气接口吧~
(每天一百次,这不比前段时间每天10次的某合数据友好?足够让大家慢慢调试数据~)
(1)发起请求代码(放公共方法中,若不用框架,可与调用方法同层放置)
/** * 发送HTTP请求方法 * @param string $url 请求URL * @param array $params 请求参数 * @param string $method 请求方法GET/POST * @return array $data 响应数据 */ function http($url, $params, $method = 'GET', $header = array(), $multi = false){ $opts = array( CURLOPT_TIMEOUT => 30, CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_HTTPHEADER => $header ); /* 根据请求类型设置特定参数 */ switch(strtoupper($method)){ case 'GET': $opts[CURLOPT_URL] = $url . '?' . http_build_query($params); break; case 'POST': //判断是否传输文件 $params = $multi ? $params : http_build_query($params); $opts[CURLOPT_URL] = $url; $opts[CURLOPT_POST] = 1; $opts[CURLOPT_POSTFIELDS] = $params; break; default: throw new Exception('不支持的请求方式!'); } /* 初始化并执行curl请求 */ $ch = curl_init(); curl_setopt_array($ch, $opts); $data = curl_exec($ch); $error = curl_error($ch); curl_close($ch); if($error) throw new Exception('请求发生错误:' . $error); return $data; }
(2)调用Api代码
public function test() { $url = 'https://api.topthink.com/weather/query'; $param = [ 'appCode'=>'填之前(二)里面自己的Appcode', 'city'=>'重庆' ]; $header = array("Content-Type: application/x-www-form-urlencoded; charset=UTF-8"); //must have it ↑ $res = http($url,$param,'GET',$header); $res = json_decode($res,true); if($res['code']!=0) return \json('接口调用出错啦'); var_dump($res); }
(3)康康结果?
四、总结一下
除了数据库小子以外,面向接口开发也是一个phper必不可少的一项技能,如thinkApi返回的那个json数据格式,我的经验标准是:
code | 0 一般代表成功,其他的分别代表除成功以外的各种情况 |
msg | 用于描述接口返回的各种情况说明,如成功亦或捕获到抛出的错误 |
data | 用于装载前端需要的数据,里面的数据格式根据前端的需求来修改制定 |
那么这些标准从哪里来的呢?当然是每次调用接口的时候发现Tencent以及Alibaba那些大佬是这样返回的数据,久而久之就成了我们后者学习的标杆咯~
多嘴一句记录一下:(初学者可以不看啦~)
为什么要用Url请求,不用SDK?因为后者涉及使用composer的版本管理问题,在thinkphp5.0版本使用SDK会牵涉到php7.1+ - 8.0+版本警告问题以及thinkphp框架5.0.24- 5.1及以上版本的框架结构改变等问题,简而言之:在tp5.0版本使用composer安装thinkApi的SDK之后我们的 thinkphp目录下的start.php会消失,内部的一些框架方法会抛出警告,而composer又不能智能为你此时的5.0框架安装他能够接受的SDK,而不去改变他的结构,故在遇到某些情况(如调用此SDK的接口不多)的时候我们可以退而求之使用url请求来避免版本管理的问题。
此外,关于天气查询相关接口还有如下几种可供选择:
- 阿里云天气API:https://next.api.aliyun.com/document/AliGenie/ssp_1.0/GetWeather
- 和风天气API:https://dev.qweather.com/docs/configuration/api-config/
- 心知天气API:https://seniverse.yuque.com/hyper_data/datasets/start?
感兴趣的朋友可以进一步了解一下~
您可能感兴趣的文章:
- Thinkphp 在api开发中异常返回依然是html的解决方式
- thinkphp5框架API token身份验证功能示例
- ThinkPHP框架整合微信支付之JSAPI模式图文详解
- ThinkPHP实现微信支付(jsapi支付)流程教程详解
- thinkPHP5.0框架API优化后的友好性分析
- Thinkphp5框架ajax接口实现方法分析
- thinkPHP5框架接口写法简单示例
- ThinkPHP框架实现的微信支付接口开发完整示例
- thinkPHP框架实现的短信接口验证码功能示例
- thinkPHP微信分享接口JSSDK用法实例
- thinkPHP框架对接支付宝即时到账接口回调操作示例
- ThinkPHP和UCenter接口冲突的解决方法