OpenWeatherMap API没有找到所有的城市。

问题描述 投票:0回答:1

我是按照这个教程(https:/www.youtube.comwatch?v=QMR6N6Vs_x0&feature=emb_err_woyt。),并使用了Apple Watch应用程序的代码。因此,一切工作几乎没有问题。

奇怪的是,并不是所有我输入的城市都被接受。它给出了错误(见代码)"错误的用户输入!"。但是,当我复制并粘贴生成的网址,由于代码不正确,它将在de浏览器工作。它将接受该输入。但我的应用程序不会。

我找过了,但找不到类似的东西。我认为这是一个非常小的事情来修复。

import Foundation

final class NetService: ObservableObject {

@Published var weather: WeatherData?
@Published var city = ""

let baseURL = URL(string: "https://api.openweathermap.org/data/2.5/weather")!
var query = ["q": "", "appid": "", "units": "metric"]

func loadWeatherInfo(by city: String) {

    guard baseURL.withQueries(query) != nil, city != "" else { print("URL isn't correct!"); return}

    query["appid"] = "HERE I PUT MY OWN API-KEY"
    query["q"] = city

    URLSession.shared.dataTask(with: baseURL.withQueries(query)!) { data, _, error in
        print(self.baseURL.withQueries(self.query)!)
        guard let data = data else { print(#line, #function, "\(error!.localizedDescription)"); return }

        if let weatherInfo = try? JSONDecoder().decode(WeatherData.self, from: data) {
            DispatchQueue.main.async { [weak self] in
                self?.weather = weatherInfo
            }
        } else {
            print(#line, #function, "incorrect user input!"); return
        }
    }.resume()
}
}

所以我的问题是,为什么我的代码不能接受所有的城市。我在 "Zeist"、"Woerden"、"Gent "等城市都出现了错误。如果我复制 "build url" (https://api.openweathermap.org/data/2.5/weather?q=Zeist&appid=HERE I PUT MY OWN API-KEY&units=metric) 从控制台,我得到一个返回,当我粘贴在Safari中。所以这个城市被识别了。

{"坐标":{"长":5.23, "纬":52.09}, "天气":[{"id":800, "main": "晴", "description": "晴空", "icon": "01d"}], "base": "站", "main":{"temp":11.84, "feels_like":10.18, "temp_min":11.11, "temp_max":12. 78,"气压":1020,"湿度":58},"风":{"速度":0.45,"度数":264,"阵风":2。 68}, "云":{"全":7}, "dt":1589534449, "sys":{"type":3, "id":2005313, "country": "NL", "sunrise":1589514260, "sunset":1589570804}, "timezone":7200, "id":2743977, "name": "Zeist", "cod":200}。

所以网址是正确建立的。

谢谢你的阅读,希望有解决的办法。

swift xcode11 openweathermap watchos-6
1个回答
0
投票

感谢这个帖子上面的评论,我已经找到了解决方案。在我的WeatherData 知名度 是我从OpenWeatherMap收集的东西。并非所有的城市都有 "可见性 "作为输出,所以我把它作为一个可选项,现在它的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.