2010-07-22 21 views
0

Je veux analyser l'API de google météo en utilisant NSXML alors s'il vous plaît donnez-moi quelques conseils pour cela.Comment analyser l'API météo de Google à l'aide de NSXML?

C'est My url

et j'ai pris ce genre de mesures:

NSURL *url = [NSURL URLWithString:@"http://www.google.com/ig/api?weather=Ahemdabad"]; 

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
[theRequest setHTTPMethod:@"POST"]; 
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

if(theConnection){ 
    webData = [[NSMutableData data] retain]; 
    NSLog(@"connection established"); 
} 
else { 
    NSLog(@"theConnection is NULL"); 
} 
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
[webData setLength: 0]; 
} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
[webData appendData:data]; 
} 

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
NSLog(@"ERROR with theConenction"); 
[connection release]; 
[webData release]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connectio 
{  
    NSLog(@"DONE. Received Bytes: %d", [webData length]); 

NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]; 
NSLog(@"thexml=============>%@", theXML); 
[theXML release]; 


if(parser) 
{ 
    [parser release]; 
} 

parser = [[NSXMLParser alloc]initWithData:webData]; 
[parser setDelegate: self]; 
[parser setShouldResolveExternalEntities: YES]; 
[parser parse]; 

[connection release]; 
[webData release]; 

} 
+0

** L'API Google météo a été fermée en 2012 ** -> http://stackoverflow.com/questions/12145820/google-météo-api-gone/35943521 –

Répondre

0

hey ankit vous pouvez obtenir ce code si à vous tous ses utile pas nécessaire d'établir connexion

il suffit d'utiliser cette méthode

-(id)initWithURL:(NSURL*)url arrayRootObjectTags:(NSArray*)arrTags sel:(SEL)seletor andHandler:(NSObject*)handler{ 
    if(self = [super init]){ 
     self.mainArray=arrTags; 
     self.MainHandler=handler; 
     self.targetSelector=seletor; 
     NSLog(@"%@",[url description]); 
     NSURLRequest *req=[NSURLRequest requestWithURL:url cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:30];     
     con=[[NSURLConnection alloc] initWithRequest:req delegate:self]; 
     if(con){ 
      myWebData=[[NSMutableData data] retain]; 
     } else { 
      [MainHandler performSelector:@selector(targetSelector:) withObject:nil]; 
     } 
    } 
    return self; 
} 

également l'autre méthode de soutien

-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName attributes:(NSDictionary*)attributeDict { 
    if([elementName isEqualToString:@"html"] || [elementName isEqualToString:@"HTML"]){ 
     didGetHTML=YES; [self parserDidEndDocument:parser]; 
    } else if([[mainArray objectAtIndex:0] isEqualToString:elementName] && [[mainArray objectAtIndex:1] isEqualToString:elementName] && !didGetHTML) { 
     objectsArray=[[NSMutableArray alloc] init]; 
     tmpD=[[NSMutableDictionary alloc] init]; 
     if(tmpOther==nil) tmpOther=[[NSMutableDictionary alloc] init];  
    } else if([[mainArray objectAtIndex:0] isEqualToString:elementName] && !didGetHTML) { 
     objectsArray=[[NSMutableArray alloc] init]; 
     if(tmpOther==nil) tmpOther=[[NSMutableDictionary alloc] init];  
    } else if([[mainArray objectAtIndex:1] isEqualToString:elementName] && !didGetHTML) { 
     tmpD=[[NSMutableDictionary alloc] init]; 
    } else if([mainArray containsObject:elementName] && !didGetHTML){ 
     [tmpD setValue:[attributeDict valueForKey:@"data"] forKey:elementName]; 
    } 
} 

- (void) analyseur: (NSXMLParser *) analyseur foundCharacters: (NSString *) {string if (tmpString == nil & & didGetHTML!) { tmpString = [[NSString alloc] initWithString: chaîne]; } else if (! DidGetHTML) { NSString * t = [ChaîneNSString stringWithString: tmpString]; if ([tmpString retainCount]> 0) {[tmpString release]; tmpString = nil; } tmpString = [[NSString alloc] initWithFormat: @ "% @% @", t, chaîne de caractères]; } }

-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName { 
    if([[mainArray objectAtIndex:0] isEqualToString:elementName] && [[mainArray objectAtIndex:1] isEqualToString:elementName] && !didGetHTML){ 
     [objectsArray addObject:tmpD]; 
    } else if([elementName isEqualToString:[mainArray objectAtIndex:1]] && !didGetHTML){ 
     [objectsArray addObject:tmpD]; 
     [tmpD release]; tmpD=nil; 
    } else if([mainArray containsObject:elementName] && !didGetHTML) { 
     if(![tmpD valueForKey:elementName]){ 
      [tmpD setValue:tmpString forKey:elementName]; 
     } 
     [tmpString release]; tmpString=nil;  
    } else { 
     [tmpOther setValue:tmpString forKey:elementName]; 
     [tmpString release]; tmpString=nil; 
    } 
} 

et simplement appeler la méthode url initwith à partir de laquelle jamais classe que vous avez écrit cette méthode

que vous devez donner étiquette objet balise racine et balise d'élément d'une balise d'objet particulier et aussi donner sélecteur après que prendre la réponse dans le dictionnaire et ils le prennent en tableau et afficher le résultat en fonction de votre valeur pour la clé