高德关于获取天气接口

本文介绍了如何利用高德地图的免费天气接口进行天气信息获取,包括申请API Key、拼接请求URL和解析返回的JSON数据。建议将天气现象转换为人类可读的数组,并考虑缓存策略以提高效率。
部署运行你感兴趣的模型镜像

最近在做天气这块,在网上一搜有各种天气接口,但是大多数都是收费的。偶然发现,高德也提供天气接口,一天可以免费调用100000次,就试了一下,还是蛮好用的,就拿出来分享一波。

高德API接口地址 https://lbs.amap.com/api/webservice/guide/api/weatherinfo/

第一步,申请”web服务 API”密钥(Key);

第二步,拼接HTTP请求URL,第一步申请的Key需作为必填参数一同发送;

第三步,接收HTTP请求返回的数据(JSON或XML格式),解析数据。

如无特殊声明,接口的输入参数和输出数据编码全部统一为UTF-8。

天气API的服务地址:https://restapi.amap.com/v3/weather/weatherInfo?parameters

因为高德地图接口里面返回的数据:天气现象,是数字表示的,所以我们需要首先定义一个天气现象的数组,并且天气数据在短时间内不会太大的变化,可以做个缓存,利用框架自带的缓存、写到文件里,或者写到redis等其他缓存中都是可以的。

    public function getWeather()
    {

        // 定义天气状态数组
        $weatherArray = ['晴', '多云', '阴', '阵雨', '雷阵雨', '雷阵雨并伴有冰雹', '雨夹雪', '小雨', '中雨', '大雨', '暴雨', '大暴雨', '特大暴雨', '阵雪', '小雪', '中雪', '大雪', '暴雪', '雾', '冻雨', '沙尘暴', '小雨-中雨', '中雨-大雨', '大雨-暴雨', '暴雨-大暴雨', '大暴雨-特大暴雨', '小雪-中雪', '中雪-大雪', '大雪-暴雪', '浮沉', '扬沙', '强沙尘暴', '飑', '龙卷风', '弱高吹雪', '轻雾', '霾'];
		
        S(['type' => 'file', 'expire' => 3600, 'prefix' => 'think_']);
        $cTime = date('YmdH');
        
        //删除上一天的缓存
        for ($i = 0; $i < 24; $i ++) {
            $yTime = $i < 10 ? date('Ymd', time() - 86400) . '0' . $i : date('Ymd', time() - 86400) . $i;
            if (S($yTime) !== false) {
                S($yTime, null);
            }
        }
        
        //判断当天前一时间段的缓存是否存在
        if (S($cTime) !== false) {
            //输出缓存中的天气数据:

        } else {
            // 获取天气数据
            //$url = 'http://restapi.amap.com/v3/weather/weatherInfo';
            $url = 'http://106.11.249.75/v3/weather/weatherInfo';
            $key = '';
            $city = '110101';   // 城市编码,北京东城区
            $cDayParams = 'key=' . $key . '&city=' . $city . '&extensions=all&output=JSON';
            $cHourParams = 'key=' . $key . '&city=' . $city . '&extensions=base&output=JSON';

            // 判断链接是否可用
            $retDay = get_headers($url . '?' . $cDayParams);
            $retHour = get_headers($url . '?' . $cHourParams);
            if ($retDay !== false && $retHour !== false) {
                $cDayWeatherArr = json_decode(getContentByCurl($url, $cDayParams), true);
                $cHourWeatherArr = json_decode(getContentByCurl($url, $cHourParams), true);
                if (preg_match('/200/', $retDay[0]) && preg_match('/200/', $retHour[0])) {	   
                    $ret['min_tem'] = $cDayWeatherArr['forecasts'][0]['casts'][0]['nighttemp'];
		    $ret['max_tem'] = $cDayWeatherArr['forecasts'][0]['casts'][0]['daytemp'];
		    $ret['wea_style'] = $cHourWeatherArr['lives'][0]['weather'];
		    $ret['temperature'] = $cHourWeatherArr['lives'][0]['temperature'];
		    $ret['wea_pic'] = WEB_PATH . 'weather/d' . array_search($ret['wea_style'], $weatherArray) . '.png';
					
                    // 将天气存入缓存
                    S($cTime, json_encode($ret));
                   //输出
                } else {
                    //操作失败
                }
            } else {
               //操作失败
            }
        }
    }
	

function getContentByCurl($url, $params = false, $ispost = 0)
{
    $httpInfo = array();
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    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);
    curl_close($ch);
    return $response;
}

 

关于城市编码,网上都是可以搜到的;关于天气现象数组,高德API中也有详细的介绍,大概就是这样了。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

要**直接请求高德地图的天气接口(非 SDK,直接调用 HTTP 接口)**,你可以使用高德开放平台提供的 **天气查询 HTTP API**,它允许你通过城市名或经纬度来获取实时天气信息。 --- ## ✅ 高德天气 HTTP 接口文档地址 [高德天气查询 API 文档](https://lbs.amap.com/api/webservice/guide/api/weatherinfo/) --- ## ✅ 接口说明 ### 🔗 接口地址: ``` https://restapi.amap.com/v3/weather/weatherInfo ``` ### 📥 请求参数: | 参数名 | 必填 | 说明 | |--------------|------|--------------------------------| | key | 是 | 你申请的高德 API Key | | city | 是 | 城市编码(如 110101)或城市名 | | extensions | 否 | 天气数据类型,`base`或`all` | | output | 否 | 输出格式,默认 `json` | --- ## ✅ Java 示例代码(使用 OkHttp 请求) 以下是一个使用 **OkHttp** 请求高德天气接口的 Java 示例: ### 🔧 添加依赖(`build.gradle`): ```gradle dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.3' } ``` ### 🧩 Java 代码: ```java import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.json.JSONObject; import java.io.IOException; public class WeatherApiExample { private static final String API_KEY = "你的高德API_KEY"; private static final String CITY = "北京"; // 可以是城市名或城市编码 private static final String URL = "https://restapi.amap.com/v3/weather/weatherInfo?city=" + CITY + "&key=" + API_KEY + "&extensions=base"; public static void main(String[] args) { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(URL) .build(); try (Response response = client.newCall(request).execute()) { if (response.isSuccessful() && response.body() != null) { String jsonData = response.body().string(); JSONObject jsonObject = new JSONObject(jsonData); System.out.println("返回数据: " + jsonObject.toString()); if (jsonObject.getInt("status") == 1) { JSONObject info = jsonObject.getJSONArray("lives").getJSONObject(0); System.out.println("城市: " + info.getString("city")); System.out.println("天气: " + info.getString("weather")); System.out.println("温度: " + info.getString("temperature") + "℃"); System.out.println("风力: " + info.getString("winddirection") + " " + info.getString("windpower")); } else { System.out.println("请求失败: " + jsonObject.getString("info")); } } } catch (IOException | JSONException e) { e.printStackTrace(); } } } ``` --- ## ✅ 示例返回数据结构(JSON): ```json { "status": "1", "count": "1", "info": "OK", "infocode": "10000", "lives": [ { "province": "北京", "city": "北京", "adcode": "110101", "weather": "多云", "temperature": "22", "winddirection": "西北", "windpower": "≤3", "humidity": "62", "reporttime": "2025-04-05 14:20:00" } ] } ``` --- ## ✅ 获取城市编码(adcode) 你可以通过以下接口获取城市编码: 🔗 [城市信息查询 API](https://lbs.amap.com/api/webservice/guide/api/district) 示例请求: ``` https://restapi.amap.com/v3/config/district?keywords=北京&key=你的KEY ``` --- ## ✅ 注意事项 - 你需要注册高德开放平台账号并创建应用,获取 `API Key`。 - 免费调用有一定频率限制,生产环境建议购买商用套餐。 - 高德 API 返回数据为 JSON 格式,使用 `org.json` 或 `Gson` 解析即可。 - Android 中请求网络必须在子线程中进行,不能在主线程中执行。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值