TP5结合聚合数据天气预报API查询天气

前端之家收集整理的这篇文章主要介绍了TP5结合聚合数据天气预报API查询天气前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

分享一个PHP版本的查询天气接口。免费查询天气的接口有很多,比如百度的apistore的天气api接口,我本来想采用这个接口的,可惜今天百度apistore死活打不开了。那就用聚合数据的天气api接口吧,也是免费的,不过聚合数据的接口申请相对繁琐。
1、注册一个聚合数据的账号
2、实名认证你的账号
3、申请你需要的api接口
4、申请验证你的api接口
申请地址:https://www.juhe.cn/docs/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,$url.'?'.$params );
        }else{
            curl_setopt( $ch,$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,'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/...

猜你在找的设计模式相关文章