1. 程式人生 > >APP開發中獲取當前天氣

APP開發中獲取當前天氣

根據抓取的天氣狀況api獲取當前位置的當前天氣狀況,一個重要前提就是先地圖定位當前城市,定位的方法這裡就不說了,畢竟此貼主要是針對天氣

#pragma mark - 天氣

- (void)setWeather{
    NSString *httpUrl = @"http://api.map.baidu.com/telematics/v3/weather";
        NSString *lng = [Util userDefaultsDataForKey:@"longitude"];
        NSString *lat = [Util userDefaultsDataForKey:@"latitude"];
    if ([lng isEqualToString:@""]&&[lat isEqualToString:@""]) {
        lng = @"121.505856";
        lat = @"31.216019";
    }
    NSString *location = [NSString stringWithFormat:@"%@,%@",lng,lat];
    NSString *ak = @"6tYzTvGZSOpYB5Oc2YGGOKt8";
    NSString *httpArg = [NSString stringWithFormat:@"location=%@&output=json&ak=%@",location,ak];
    [self request: httpUrl withHttpArg: httpArg];
    

}

//資料的請求

//傳遞經緯度引數

-(void)request: (NSString*)httpUrl withHttpArg: (NSString*)HttpArg  {
    NSString *urlStr = [[NSString alloc]initWithFormat: @"%@?%@", httpUrl, HttpArg];
    NSURL *url = [NSURL URLWithString: urlStr];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 10];
    [request setHTTPMethod: @"GET"];
    [request addValue: @"" forHTTPHeaderField: @"apikey"];
    
    [NSURLConnection sendAsynchronousRequest: request
                                       queue: [NSOperationQueue mainQueue]
                           completionHandler: ^(NSURLResponse *response, NSData *data, NSError *error){
                               if (error) {
                                   NSLog(@"Httperror: %@%ld", error.localizedDescription, (long)error.code);
                               } else {
                                   NSInteger responseCode = [(NSHTTPURLResponse *)response statusCode];
                                   NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                                   SBJson4Parser *jsonParser = [SBJson4Parser parserWithBlock:^(id item, BOOL *stop) {
                                       NSObject *itemObject = item;

                                       if ([item isKindOfClass:[NSDictionary class]]) {

                                           //接收穫取下來的資料,然後獲取資料進行相對應的賦值

                                           NSDictionary *dict = (NSDictionary *)itemObject;
                                           NSArray *dicArr = dict[@"results"];
                                           NSDictionary *weartherDic = nil;
                                           for (NSDictionary *dict in dicArr) {
                                               NSArray *weatherArr = dict[@"weather_data"];
                                               weartherDic = [weatherArr objectAtIndex:0];
                                           }
                                           
                                           NSString *temperature = weartherDic[@"temperature"];
                                           NSString *weatherName = weartherDic[@"weather"];
                                           NSArray *strArr = [temperature componentsSeparatedByString:@" ~ "];
                                           NSLog(@"+++++++=%@",strArr);
                                           //去掉攝氏度
                                           NSString *lowtem = nil;
                                           NSString *highttem = nil;
                                           NSArray *subStr = [strArr[1] componentsSeparatedByString:@"℃"];
                                           lowtem = subStr[0];
                                           highttem = strArr[0];
                                           [Util setUserDefaultsData:lowtem forKey:@"lowTmp"];
                                           [Util setUserDefaultsData:highttem forKey:@"hightTmp"];
                                           NSLog(@"subStr++++++=%@",lowtem);
                                           [Util setUserDefaultsData:temperature forKey:@"weather"];
                                           [Util setUserDefaultsData:[NSString stringWithFormat:@"%@",weatherName] forKey:@"weatherName"];
                                           //代理傳遞資訊
                                           [self.delegates addWeatherView:self];
                                           
                                       }
                                   } allowMultiRoot:NO unwrapRootArray:NO errorHandler:^(NSError *error) {
                                       NSLog(@"%@",error);
                                   }];
                                   [jsonParser parse:data];
                                   NSLog(@"HttpResponseCode:%ld", (long)responseCode);
                                   
                                   NSLog(@"HttpResponseBody %@",responseString);
                               }
                           }];
    
    
}