Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

[iOS] Récupérer le code source d'une page web


Sujet :

Objective-C

  1. #1
    Membre à l'essai
    [iOS] Récupérer le code source d'une page web
    Bonjour,

    Je me suis mis il y a quelques temps a l'Objective C car je dois pour les cours développer une application pour iphone.
    Pour l'instant elle avance bien mais j'ai un problème, il faut que je récupère le code source d'une page web pour pouvoir ensuite la parser et stocker dans un fichier les parties du code qui m'intéressent.

    Mon seul problème est que je n'arrive pas a récuperer le code source d'une page web ? Je ne vois pas quelles fonctions utiliser ?

    Merci de votre aide

  2. #2
    Futur Membre du Club
    Probablement pas en passant par un UIWebView...
    Salut,
    Je m'étais posé la même question que toi concernant les récupération des données HTML d'une page web...et a ce que j'ai pu trouvé sur les différents forums que j'ai visité était que la navigation via ne UIWebView ne permettait pas d'accéder au code source...
    J'ai rien vu dans les l'implémentation de la class, ni de l'UIwebView delegate...
    On m'a conseillé de recoder un navigateur!!!!...j'ai laissé tombé!
    Si kkun a des pistes je suis preneur !
    bye

  3. #3
    Membre à l'essai
    J'avais trouvé comme début de piste ce code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    NSURL *url = [[NSURL alloc] initWithString:@"une adresse"];
    NSData *donnees = [[NSData alloc] initWithContentsOfURL:url];
    NSString *page = [[NSString alloc] initWithData:donnees encoding:NSASCIIStringEncoding];


    Mais je n'arrive pas à afficher le résultat dans un label ou autre ?

  4. #4
    Futur Membre du Club
    Pour Mac...ça peut eventuellement (pas testé) tourner sur iphone
    J'avais fait ya quelque temps une petite appli qui devait se connecter à n pages internet...parser le contenu et le sauver si ça m'intéressait....
    pour ça j'établissais une connection avec NSURLConnection...etc etc...donc un transfert de données asynchrone
    Voici quelques lignes de ma classe :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    - (void)loadDataFromURLString<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />NSString *)theUrlString{
    	NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:theUrlString]
    cachePolicy:NSURLRequestReturnCacheDataElseLoad 
    timeoutInterval:30.0];
     
    	connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    }
     
    - (void)connection<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />NSURLConnection *)theConnection 
    	didReceiveData<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />NSData *)incrementalData {
        if (data == nil)
            data = [[NSMutableData alloc] initWithCapacity:2048];
    	NSLog(@"receiving data");
        [data appendData:incrementalData];
    }
     
    - (void)connectionDidFinishLoading<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />NSURLConnection *)theConnection {
    	//Now we will process transmitted data
    	//là tu traite tes données comme tu veux....
     
    }


    L'avantage de cette approche c'est que ça fige pas ton appli en attendant la fin du transfert....
    Utiliser des requestWithURL asynchrones ou avec initWithURL synchrone comme tu le proposes...n'est pertinent que dans le cas où la page est "statique"....si c'est une page générée à la volé je suis pas certain que ça puisse donner des résultats exploitables!

  5. #5
    Futur Membre du Club
    Ah zut j'ai oublié la fin de ton message...
    T'es sur que ta NSString contient bien le résultat de ton initWithURL ? toujours cette histoire de transfert synchrone/asynchrone!
    Parce que tu devrais juste avoir a faire :

    [tonlabel setText:ta NSString];

    Juste une question : C'est un grand label?!!! afficher le code HTML d'une page ça risque d'être un peu short non ?
    T'as pas essayé une UITextView?

  6. #6
    Membre expert
    Citation Envoyé par aliasc Voir le message
    J'avais trouvé comme début de piste ce code :

    NSURL *url = [[NSURL alloc] initWithString:@"une adresse"];
    NSData *donnees = [[NSData alloc] initWithContentsOfURL:url];
    NSString *page = [[NSString alloc] initWithData:donnees encoding:NSASCIIStringEncoding];


    Mais je n'arrive pas a afficher le resultat dans un label ou autre ?
    RTFM:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    initWithData:encoding: 
     
    Returns nil if the initialization fails for some reason (for example if data does not represent valid data for encoding).


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    initWithContentsOfURL:usedEncoding:error:
     
    Returns an NSString object initialized by reading data from a given URL and returns by reference the encoding used to interpret the data.

  7. #7
    Membre à l'essai
    Merci a tous pour votre aide
    Et oui tu as raison un label c'était un peu court alors j'ai juste changer par une zone de teste.

    J'ai réussi, pour ceux que sa intéresse voici le code que j'ai utilisé :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NSURL *url = [[NSURL alloc] initWithString:@"http://www.votresite.fr/"];
    NSData *donnees = [[NSData alloc] initWithContentsOfURL:url];
    NSString *page = [[NSString alloc] initWithData:donnees encoding:NSASCIIStringEncoding];
     
    [TextViewiPuP setText:page];