我正在使用OpenWeather当前天气数据Api,并试图发出一个url请求,以便从Swift5中的api中获取json数据。我需要打印json的数据。这是一些我在互联网上发现的代码,我一直在尝试使用,但一直没有使用。
注意:我不想使用任何外部库。就像阿拉莫火一样。
let url = URL(string: "https://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid={APIKEY}")!
var request = URLRequest(url: url)
let session = URLSession.shared
let task = session.dataTask(with: request) { (data, response, error) in
if let error = error {
print(error)
} else if let data = data {
print(data)
} else {
print("nope")
}
}
task.resume()发布于 2022-03-03 13:58:14
Openweathermap文档有点误导,表达式{API key}表示没有大括号的API键。
插入带字符串插值的键
let url = URL(string: "https://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=\(APIKEY)")!不需要URLRequest,dataTask返回有效数据或错误。
let task = URLSession.shared.dataTask(with: url) { (data, _, error) in
if let error = error { print(error); return }
print(String(data: data!, encoding: .utf8)!)
}
task.resume()要显示数据,创建适当的模型并使用JSONDecoder对数据进行解码
发布于 2022-03-03 11:44:05
因此,首先您应该知道您已经注册并已经拥有自己的API密钥。此处不打开链接的主要原因是您正在使用免费订阅,并尝试请求其他订阅中可用的数据。将来,如果您只想做get请求,则不需要执行session.dataTask(with: request),session.dataTask(with: url)就可以了。
下面是您代码的更简单的方式。
guard let url = URL(string: "https://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid={APIKEY}") else {return}
let session = URLSession.shared
let task = session.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error)
} else if let data = data {
print(data)
} else {
print("nope")
}
}
task.resume()发布于 2022-10-19 12:59:27
并不是所有的API都只使用URL
因此,如果API请求中有一个标头,请尝试下面的代码。
注意:标题依赖于您的API。
let semaphore = DispatchSemaphore (value: 0)
let param = [
"language": "english",
"serviceRequestId": 1,
"location": ["latitude": "12.34","longitude": "12.34"]
] as [String : Any]
var request = URLRequest(url: URL(string: "UrlHere")!,timeoutInterval: Double.infinity)
request.addValue("tokenHere", forHTTPHeaderField: "Authorization")
do{
let i = try JSONSerialization.data(withJSONObject: param, options: .prettyPrinted)
// print("\(type(of: i))")
print(String(data: i,
encoding: .ascii) ?? "nil")
request.httpMethod = "POST"
request.httpBody = i
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
semaphore.signal()
return
}
semaphore.signal()
do{
let postData = try JSONDecoder().decode(ModelRootClassHere.self, from: data)
print(postData)
MyData = postData
completion()
}
catch{
print(error)
print("error............")
}
}
task.resume()
semaphore.wait()
}catch{
print(error)
}https://stackoverflow.com/questions/71334858
复制相似问题