OpenWeather API 响应意外结果

Posted

技术标签:

【中文标题】OpenWeather API 响应意外结果【英文标题】:OpenWeather API responds with unexpected results 【发布时间】:2016-02-16 21:02:48 【问题描述】:

由于某种原因,Api 会以不同的坐标来响应我发送的坐标。我已经调试了应用程序,调用 api 的结果与 JSON 文件中返回的结果不同。例如 发送者:

    http://api.openweathermap.org/data/2.5/weather?q=lat=51.89689166666667&lon=-8.486315

返回的人

    "coord":"lon":24.76,"lat":60.15,"weather":....... 这是我目前使用的代码:

    私有静态最终字符串 OPEN_WEATHER_MAP_API = "http://api.openweathermap.org/data/2.5/weather?q=";

       URL url = new URL(String.format(OPEN_WEATHER_MAP_API + "lat="+lat+"&"+"lon="+lon));
            HttpURLConnection connection =
                    (HttpURLConnection)url.openConnection();
    
            connection.addRequestProperty("x-api-key",
                    context.getString(R.string.open_weather_maps_app_id));
    
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream()));
    
            StringBuffer json = new StringBuffer(1024);
            String tmp="";
            while((tmp=reader.readLine())!=null)
                json.append(tmp).append("\n");
            reader.close();
    
            JSONObject data = new JSONObject(json.toString());
    

【问题讨论】:

【参考方案1】:

android 或该服务一无所知,但我只是查看了他们的 API,因为我认为您的 URL 看起来很可疑,然后发现了这个:

api.openweathermap.org/data/2.5/weather?lat=35&lon=139

请注意,在您的示例中没有 ?q=,在您的变量中没有 private static final String OPEN_WEATHER_MAP_API = "http://api.openweathermap.org/data/2.5/weather?q=";

当我删除 q=(并从他们的网站示例中添加演示 API 密钥)时,我们会得到一个工作 URL返回指定纬度/经度的数据:@987654322 @

【讨论】:

以上是关于OpenWeather API 响应意外结果的主要内容,如果未能解决你的问题,请参考以下文章

解析 API 响应时遇到意外字符

api.openweather

Graphql API 响应返回意外数据

OpenWeather API - 提取 JSON 数据

从 Watson Assistant 调用 OpenWeather API:“直接 CloudFunctions 调用不成功”

C# 无法从 API 调用读取 json 响应