thinkphp使用url请求调用ThinkApi天气教程【图文详解】

来自:网络
时间:2023-07-25
阅读:

前言

        看了一年多的thinkphp手册,我才发现了这个国内比较便宜的(主要免费的接口和对应次数比较多)Api服务商,虽然在使用之后发现部分接口的返回值没有某合返回的数据要多以及类似内容审核的不够严谨,不过在我看来非常适合框架新手玩家去试一试调用接口的快乐~以下带来详细教程~

一、注册ThinkPHP服务市场账号

服务市场首页链接

进入首页后点击右上角,注册、实名过程我就不说了。

二、拿到自己的AppCode(因为调用接口需要啦)

(1)点击我的服务

thinkphp使用url请求调用ThinkApi天气教程【图文详解】

 (2)点击安全信息

thinkphp使用url请求调用ThinkApi天气教程【图文详解】

 三、随便找个免费的接口试试~

偷懒~用大家喜闻乐见的天气接口吧~

(每天一百次,这不比前段时间每天10次的某合数据友好?足够让大家慢慢调试数据~)

thinkphp使用url请求调用ThinkApi天气教程【图文详解】

 (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)康康结果?

thinkphp使用url请求调用ThinkApi天气教程【图文详解】

四、总结一下

         除了数据库小子以外,面向接口开发也是一个phper必不可少的一项技能,如thinkApi返回的那个json数据格式,我的经验标准是:

code0 一般代表成功,其他的分别代表除成功以外的各种情况
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请求来避免版本管理的问题。

此外,关于天气查询相关接口还有如下几种可供选择:

  1. 阿里云天气API:https://next.api.aliyun.com/document/AliGenie/ssp_1.0/GetWeather
  2. 和风天气API:https://dev.qweather.com/docs/configuration/api-config/
  3. 心知天气API:https://seniverse.yuque.com/hyper_data/datasets/start?

感兴趣的朋友可以进一步了解一下~

返回顶部
顶部