Assuntos relacionados à programação, pedaços de códigos, pequenas dicas, pequenos tutoriais, alguns vídeos, algumas fotos e etc.

Pegando o conteúdo de uma url com Objective-C

Posted: fevereiro 4th, 2009 | Author: Carlan Calazans | Tags: , , , , | No Comments »

Desde ontem estava tentando pegar o conteúdo de uma url qualquer e imprimir no console. Até que não é tão complicado comparando com Ruby ou Python. Minha maior dificuldade foi converter de NSMutableData para NSString. Também não sei por que cargas d’águas não está funcionando para todas as urls, a do google, por exemplo.

Estou gostando de Objective-C, mas sinto falta das facilidades de  Ruby e Python, provavelmente por estar mais acostumado a elas. E é muito fácil se perder na chamada a métodos utilizando a sintaxe dos colchetes, pior se eles estiverem aninhados. Como estou programando utilizando o ubuntu a “dot-syntax” não está disponível, acredito que somente no Mac Os. É nessa hora que um bom editor de textos faz toda a diferença.

Pra quem se interessar, segue o código.

#import <Foundation/Foundation.h>

// 03-02-2009
// Carlan Calazans (carlancalazans at gmail.com)

//connection.h
@interface Connection: NSObject
{
  NSString                 *strUrl;
  NSMutableData        *myReceivedData;
}
  -(void) initialize;
@end

//connection.m
@implementation Connection
  -(void) initialize
  {
  NSLog(@"Started...");
  strUrl = [NSString stringWithFormat:@"http://carlancalazans.com"];

  NSLog(@"URL: %@", strUrl);
  myReceivedData = [[NSMutableData dataWithContentsOfURL:[NSURL URLWithString:strUrl]] autorelease];

  NSLog(@"Received %d bytes of data.", [myReceivedData length]);
  NSString *content = [[NSString alloc] initWithData:myReceivedData encoding:NSUTF8StringEncoding];

  NSLog(@"Content received: %@", content);
  NSLog(@"Finished...");

  [content release];
  }
@end

//main.m
int main(int argc, const char *argv[])
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  Connection *con = [[Connection alloc] init];
  [con initialize];

  [con release];
  [pool release];

  return 0;
}


Leave a Reply