鑒于柴靜版《天穹之下》的火爆,也許更多的人會關心環境,空氣質量等環保因素,參考某學院的Swift版本的PM2.5的獲得,本人自己寫個Objective-C版本的。
從服務器獲得當前的空氣質量數據,氣象中心開放接口, 亞洲空氣質量實時監控, 參照人家的教程使用亞洲空氣質量監控。
本地解析數據,獲得PM2.5數值,進行顯示。
NSNumber *str;
-(void) loadData{
self.msgText.text = @"loading....";
NSURL *url = [NSURL URLWithString:@"http://aqicn.org/publishingdata/json"];
NSString *post=@"postData";
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];
[request setTimeoutInterval:10.0];
//GCD實現異步接口通訊與UI更新的同步
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:request
queue:queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
if (error) {
NSLog(@"Httperror:%@%d", error.localizedDescription,error.code);
}else{
NSInteger responseCode = [(NSHTTPURLResponse *)response statusCode];
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"HttpResponseCode:%d", responseCode);
NSLog(@"HttpResponseBody %@",responseString);
NSData *resData = [[NSData alloc] initWithData:[responseString dataUsingEncoding:NSUTF8StringEncoding]];
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:resData options:NSJSONReadingMutableLeaves error:nil];
NSLog(@"resultDic=%@", resultDic);
arr = [[resultDic valueForKey:@"pollutants"] valueForKey:@"value"];
str = [[arr objectAtIndex:0] objectAtIndex:0];
NSLog(@"PM2.5=%@", [[arr objectAtIndex:0] objectAtIndex:0]);
}
}];
dispatch_async(dispatch_get_main_queue(),^{
self.msgText.text = str.stringValue;
});
});
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self loadData];
// start reloadData
}
- (IBAction)reloadData:(id)sender {
NSLog(@"Button Clicked");
[self loadData];
NSLog(@"Button Clicked");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
詳情請參考以下鏈接:
源碼地址