![](/uploads/image/0593.jpg)
Swift-使⽤OpenWeatherMap 获取天⽓的实时数据、预测数据我们做⼀些Web 应⽤或者是⼿机应⽤,有时会需要展⽰出实时的天⽓数据或者天⽓预报数据。这⾥推荐⼀个好⽤的天⽓API 服务: OpenWeatherMap 。1,OpenWeatherMap 介绍 (1) OpenWeatherMap 提供⼴泛的⽓象数据,如包含当前天⽓的地图,⼀周预报,降⽔,风,云,来⾃⽓象站的其他数据。
(2)数据结果提供 JSON 、 XML ,、以及 HTML 等多种格式。
(3)免费⽤户可以使⽤绝⼤部分功能。同收费⽤户⽐起来,只是对每分钟查询次数有限制(60次/分钟)。但这个也⾜够我们使⽤了。 2,OpenWeatherMap 注册 要使⽤ OpenWeatherMap 的服务,⾸先我们要到它的官⽹上注册⼀个帐号,地址:
然后再登录帐号,注册个 apikey 。这个在后⾯获取⽓候信息时参数中需要带上。(注册这些都是免费的。)
3,API 提供的功能介绍
(1)实时天⽓数据
(2)最近5天的天⽓预报数据(时间精度:每3⼩时⼀条数据)
(3)最近16天的天⽓预报数据(时间精度:每天⼀条数据)
(4)历史数据查询
(5)紫外线指数查询
(6)提供天⽓图层(Weather map layers )
(7)⽓象站数据提供
(8)批量数据下载
(9)空⽓污染查询
官⽅API 说明地址: 。下⾯我通过两个简单的样例,演⽰使⽤⽅法。
4,实时天⽓查询
API ⽀持根据城市名称、城市ID 、城市邮编、经纬度坐标这4种⽅式查询对应城市的天⽓信息。
下⾯样例使⽤城市名称来查询,查询出北京当前的实时天⽓,效果图如下:
(注意:这⾥对返回的 JSON 数据我使⽤ SwiftyJSON 来解析,具体⽤法可以参考我原来写的这篇⽂章: )
5,未来天⽓预测
下⾯样例查询出未来5天内,北京的天⽓预报数据。效果图如下:1
2
华沙条约组织3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
芜湖属于哪个省份23
24
25
26
27
28
29
30
31
江西十大垃圾专科学院32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
黑龙江旅游景点大全景点排名51
52
53
54
55
56
57
58
59
60
61
62
63
64
65import UIKit class ViewController : UIViewController { let apiId = "12b2817fbec86915a6e9b4dbbd3d9036" override func viewDidLoad() { super .viewDidLoad() getCurrentWeatherData(); } //获取当前天⽓数据(北京) func getCurrentWeatherData(){ let urlStr = "\(apiId)" let url = NSURL (string: urlStr)! guard let weatherData = NSData (contentsOfURL: url) else { return } //将获取到的数据转为json 对象 let jsonData = JSON (data: weatherData) //⽇期格式化输出 let dformatter = NSDateFormatter () dformatter.dateFormat = "yyyy 年MM ⽉dd ⽇ HH:mm:ss" print ( "城市:\(jsonData[" name "].string!)" ) let weather = jsonData[ "weather" ][0][ "main" ].string! print ( "天⽓:\(weather)" ) let weatherDes = jsonData[ "weather" ][0][ "description" ].string! print ( "详细天⽓:\(weatherDes)" ) let temp = jsonData[ "main" ][ "temp" ].number! print ( "温度:\(temp)°C" ) let humidity = jsonData[ "main" ][ "humidity" ].number! print ( "湿度:\(humidity)%" ) let pressure = jsonData[ "main" ][ "pressure" ].number! print ( "⽓压:\(pressure)hpa" ) let windSpeed = jsonData[ "wind" ][ "speed" ].number! print ( "风速:\(windSpeed)m/s" ) let lon = jsonData[ "coord" ][ "lon" ].number! let lat = jsonData[ "coord" ][ "lat" ].number! print ( "坐标:[\(lon),\(l
at)]" ) let timeInterval1 = NSTimeInterval (jsonData[ "sys" ][ "sunrise" ].number!) let date1 = NSDate (timeIntervalSince1970: timeInterval1) print ( "⽇出时间:\(dformatter.stringFromDate(date1))" ) let timeInterval2 = NSTimeInterval (jsonData[ "sys" ][ "sunset" ].number!) let date2 = NSDate (timeIntervalSince1970: timeInterval2) print ( "⽇落时间:\(dformatter.stringFromDate(date2))" ) let timeInterval3 = NSTimeInterval (jsonData[ "dt" ].number!) let date3 = NSDate (timeIntervalSince1970: timeInterval3) print ( "数据时间:\(dformatter.stringFromDate(date3))" ) } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() }}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60import UIKit
class ViewController : UIViewController {
let apiId = "12b2817fbec86915a6e9b4dbbd3d9036"
override func viewDidLoad() {
super .viewDidLoad()
getForcastWeatherData();
}
//获取未来天⽓数据(北京)仙华山景区旅游介绍
func getForcastWeatherData(){
let urlStr = "\(apiId)"
let url = NSURL (string: urlStr)!
guard let weatherData = NSData (contentsOfURL: url) else { return } //将获取到的数据转为json对象
let weatherJson = JSON (data: weatherData)
print ( "城市:\(weatherJson[" city "][" name "].string!)" )
let lon = weatherJson[ "city" ][ "coord" ][ "lon" ].number!
let lat = weatherJson[ "city" ][ "coord" ][ "lat" ].number!
print ( "坐标:[\(lon),\(lat)]" )
//⽇期格式化输出
let dformatter = NSDateFormatter ()
dformatter.dateFormat = "yyyy年MM⽉dd⽇ HH:mm:ss"
//遍历数据
for (_,jsonData):( String , JSON ) in weatherJson[ "list" ] {
let timeInterval = NSTimeInterval (jsonData[ "dt" ].number!)
let date = NSDate (timeIntervalSince1970: timeInterval)
print ( "--- 时间:\(dformatter.stringFromDate(date)) ---" )
let weather = jsonData[ "weather" ][0][ "main" ].string!
print ( "天⽓:\(weather)" )
let weatherDes = jsonData[ "weather" ][0][ "description" ].string!
print ( "详细天⽓:\(weatherDes)" )
let temp = jsonData[ "main" ][ "temp" ].number!
print ( "温度:\(temp)°C" )
let humidity = jsonData[ "main" ][ "humidity" ].number!
print ( "湿度:\(humidity)%" )
let pressure = jsonData[ "main" ][ "pressure" ].number!
print ( "⽓压:\(pressure)hpa" )
let windSpeed = jsonData[ "wind" ][ "speed" ].number!
print ( "风速:\(windSpeed)m/s" )
沈阳世博园地图}
}
override func didReceiveMemoryWarning() {
super .didReceiveMemoryWarning()
}
}
原⽂出⾃:转载请保留原⽂链接: