Récupérer le code d'une page web

22:46 modifié dans API AppKit #1
Bonjour à  tous,

  Voici ma problèmatique, je souhaiterais me connecter sur un site web via une Url et récupérer le source de la page Web (et je ne veux que le source par sa visualisation). A première vue, je pense que je dois utiliser les fonctions CFHTTP (http://developer.apple.com/documentation/Networking/Conceptual/CFNetwork/Chapter_2/chapter_3_section_2.html#//apple_ref/doc/uid/TP30000230/TPXREF104)
Suis je dans le vrai ou bien je me plante complététement  ???

Damned  B) Pourquoi n'ai je pas de machine de développement Mac à  mon taf  :'(

Merci de votre aide et passer une bonne fin d'année  <3

Réponses

  • BruBru Membre
    22:46 modifié #2
    dans 1104505355:

    Suis je dans le vrai ou bien je me plante complététement ???


    Oui et non.

    En fait, le webKit (sous cocoa) te permet de faire la même chose.

    Voici un exemple qui te permet de récupérer le code source de la page d'OC dans une NSString :
    <br />{<br />    id req;<br />    NSData *data;<br />    NSURLResponse *rep;<br />    NSError *err;<br />    NSString *source;<br /><br />    req=[NSURLRequest requestWithURL:[NSURL URLWithString:@&quot;http://www.objective-cocoa.org/index.php&quot;]];<br />    data=[NSURLConnection sendSynchronousRequest:req returningResponse:&amp;rep error:&amp;err];<br />    source=[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];<br />    return [source autorelease];<br />}<br />
    


    La NSString source va contenir le source de la page html.

    .
  • 22:46 modifié #3
    Pas besoin d'utiliser WebKit et tout ce code simplement pour récupérer le contenu d'une page web.

    Il suffit de faire :

    <br />NSString *leContenu = [NSString stringWithContentsOfURL: @&quot;MonUrl&quot;];<br />
    
  • 22:46 modifié #4
    Tu auras des problèmes d'encodage sur certains sites. Essaye libe.fr par exemple. Tu as bien les datas mais la chaine est "illisible"...
  • janvier 2005 modifié #5
    Oui mais on peut les résoudre en utilisant un NSData :

    <br />NSData *monContenu = [NSData dataWithContentsOfURL: @&quot;mon URL&quot;];<br />NSString *maString = [[NSString alloc] initwithData: monContenu <br />                                           encoding: encodingQuiVaBien];<br />
    


    Effectivement ça devient plus complexe mais l'important pour moi est de ne pas se lier à  un framework de plus inutilement.

    PS : j'ai édité mon message pour essayer d'aligner les : de la méthode mais bizarrement les espaces ne sont pas les mêmes dans la fenêtre d'édition et ensuite dans le forum ???
  • BruBru Membre
    22:46 modifié #6
    La plupart des pages HTML sont "gzippées" pour augmenter la vitesse de chargement... Donc, il faut ensuite décompresser les données pour obtenir le source lisible.

    Le webKit se charge de ça automatiquement.

    Puor l'anecdote, récupérer dierctement le contenu d'une ressource pointée par une URL est pour moi la pire des méthodes... En effet, il faut connaitre le type exacte des données pointées, de gérer les exceptions, etc... Il est donc préférable d'utiliser les apis d'Apple si elles existent plutôt que de chercher à  re écrire (peut être plus mal) ce qui existe déjà .

    .
  • janvier 2005 modifié #7
    --- a supprimer, merci
  • 22:46 modifié #8

    La plupart des pages HTML sont "gzippées" pour augmenter la vitesse de chargement... Donc, il faut ensuite décompresser les données pour obtenir le source lisible.


    ??? Ah bon ? Alors soit stringWithURL dézippe tout seul soit je ne suis jamais tombé sur ce cas...


    Puor l'anecdote, récupérer dierctement le contenu d'une ressource pointée par une URL est pour moi la pire des méthodes... En effet, il faut connaitre le type exacte des données pointées, de gérer les exceptions, etc... Il est donc préférable d'utiliser les apis d'Apple si elles existent plutôt que de chercher à  re écrire (peut être plus mal) ce qui existe déjà .


    Ben si je lis bien ton code avec Webkit aussi tu as besoin de savoir l'encodage de la page. Ensuite la méthode stringWithURL fait bien partie des APIs d'Apple donc je ne cherche pas à  réécrire quoi que ce soit.
    Et gérer les exceptions et erreurs pour moi ça se limite à  regarder le contenu de ma string à  l'arrivée.

    Evidemment on a moins de controle sur la connexion internet mais si c'est le seul endroit dans l'application où l'on doit aller chercher du contenu sur le web cela reste quand même préférable selon moi à  se lier à  WebKit.

    Pour moi WebKit c'est uniquement si je veux afficher des pages webs, mais pour récupérer des données uniquement je n'en vois pas l'intérêt. Et d'ailleurs pour faire du traitement sur des pages webs j'ai tendance à  déléguer la tache à  des scripts perls via NSTask (pour accéder par exemple à  une page qui ne peut être atteinte que par l'envoi d'un formulaire).
  • BruBru Membre
    22:46 modifié #9
    dans 1105705517:

    ??? Ah bon ? Alors soit stringWithURL dézippe tout seul soit je ne suis jamais tombé sur ce cas...


    Je pense plutôt que stringWithURL dégzippe tout seul...
    Faudrait que je teste ça ce soir sur mon mac.

    Mais si c'est le cas, alors, oui, c'est carrément plus simple d'utiliser cette méthode de NSString plutôt que de recourrir au webKit juste pour lire du code HTML.

Connectez-vous ou Inscrivez-vous pour répondre.