Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Membre Expert Avatar de lilington
    Homme Profil pro Francois curter
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    591
    Détails du profil
    Informations personnelles :
    Nom : Homme Francois curter
    Âge : 32
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 591
    Points : 1 308
    Points
    1 308

    Par défaut tentative de projet libwebdoc

    Salut, j'ai commence il y a peu l'ecriture d'une lib pour mon loisir personnel.
    cette library contient www.h html.h rss.h xml.h cgstring.h. avant de dire ce que chaque partie permet de faire je vais vous presenter le pourquoi.
    j'ai commence par cgstring car j'utilise souvent le C mais quand j'ai besoin de faire des traitements sur des fichiers texts ou des chaines de caractere je suis obliger de passer a perl ou python car le C en vraiment pauvre. donc j'ai entrepris la creation de fonction telque splitstr, replacestr...
    puis j'ai voulu ecrire un spider donc les autres parties sont venu d'elle meme.
    a l'origine c'etait pour moi et moi seule que j'ecrivais ce code. Maintenant je le publi pour 2 raisons.
    1/ il doit surment avoir des trucs crades dans mon code que je ne vois pas car ca marche chez moi, donc j'aimerai bien que d'autres testent, lisent le code et m'insulte quand il faut le faire.
    2/ si c'est bien que je ne sois pas le seul a en profiter. non?

    je vous donne un exemple d'utilisation de la lib.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char **result = splitStr("j'aime le C"," ");
    int i=0;
    while(result[i]!=NULL)
    {
        printf("#%d\t%s\n",i,result[i]);
        ++i;
    }
    releaseStr(result);
    // soit str une chaine alloue avec comme contenut "la trie esvr belle"
    replaceStr(&str,"tr","v",0);
    // ca remplacera tout les 'tr' par des 'v'
    exemple avec RSS
    Code :
    1
    2
    3
    4
    5
    6
    //soit str un fichier rss charger en memoire dans la str ou tout simplement
    //un telecharger avec la fonction getHTTPInfo de www.h
    RSSchannel *Rss=RSSbuild(str);
    printf("non du channel: %s\nlien:%s\n\n ITEMS:\n",Rss->title,Rss->link);
    RSSprintItems(Rss->listItem);
    releaseRSSchannel(&rss);
    bref le code est disponiblehttps://sourceforge.net/projects/libwebdoc/ ici, regarder le et n'hesitez pas a critiquer.

    parlons des parties.
    CGSTRING s'occupe essentiellement du traitement des chaines de caracteres, certaines fonction comme lenStr existe deja (strlen) d'autre pas, et d'autre avenir comme cpyStr pour copy mais ca sera legerement different de strcpy car par exemple si vous taper cpyStr(&str,NULL) ca reviendra a faire free(str). en utilisant cpyStr vous n'avez pas besoin au prealable d'allouer de la memoire mais un free() devient obligatoire car cpyStr malloquise votre pointeur.

    RSS, juste gentillement mettre un fichier rss dans une structure, elle est definie dans rss.h et vous avez si vous telecharger le projet un fichier qui explique tout mais en anglais. paresse de reecrire en francais.

    XML, encore tres incomplet ne lit pas mais fait qu'ecrire des fichiers xml de la maniere la plus simple possible, en faite tout ce dont j'avais besoin quand j'ecrivais le truc.

    www.h encore beaucoup de choses a faire mais pour l'instant on peut get une page web ou un fichier et enregister il y a d'autre sous fonctions qui peuvent etre interressantes.

    html.h la c'est le bordel d'ailleurs dans le pdf qui va avec j'ai juste donne des precisions sur tres peu de fonction car certaine on ete ecrite et modifie des 10aines de fois, il y en a meme que je ne comprend plus. mais des fonctions sont tres utilisable telque htmlstrip_tags() qui supprime toutes les balises html et le code css, js. pour l'instant ca se passe bien avec les pages web que j'ai tester, d'ailleur j'ai utiliser cette lib pour ecrire un spider(tres salement code) que je vais mettre aussi a disposition de tout le monde(apres reecriture du code) et j'ai crawler en entier fedora-fr.org et cntv.cn sans le moindre probleme.

    fuite memoire. pour l'instant valgrind m'a rien signale.
    erreur que je comprend pas. valgrind me dit qu'il y a des erreurs mais je pige rien a ce qu'il me racconte.

    compatibilite.
    code tres peu portable hors de unix/linux. d'ailleur la partie socket doit etre reecrite pour windows mais je le ferai sans doute jamais. en plus j'ai pas trouver d'equivalent pour Visualstudio pour regex.h donc j'ai abandonne l'interoprabilite.
    en plus j'ai pas de windows dans mes environs.

    me contacter: ben ici ou a l'adresse que j'ai donne chez sourceforge.
    L'absence de certitude defini la confiance. Sans incertitudes la confiance na point de raison d'etre!

  2. #2
    Membre régulier Avatar de aslo92
    Homme Profil pro
    Ingénieur développement logiciels temps réel
    Inscrit en
    février 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels temps réel
    Secteur : Industrie

    Informations forums :
    Inscription : février 2012
    Messages : 43
    Points : 71
    Points
    71

    Par défaut

    Bonjour lilington,

    je me demande pourquoi tu n'utilises pas strlen, strcat, strcpy dans ton code ?

    Est-ce parce que tu veux les réécrire toi même ?

  3. #3
    Membre Expert Avatar de lilington
    Homme Profil pro Francois curter
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    591
    Détails du profil
    Informations personnelles :
    Nom : Homme Francois curter
    Âge : 32
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 591
    Points : 1 308
    Points
    1 308

    Par défaut

    strlen,strcat,strcpy ont ete reecrit avec des effets differents(sauf strlen), par exemple l'allocation se fait dant cpystr donc pas besoin de faire un malloc ce qui imposse donc que seul un pointeur soit envoyer comme argument. les tableaux ne sont pas utilisables.
    de plus les fonctions que tu cites ne sont pas dans stdio.h ni stdlib.h mais dans string.h
    stdlib.h est partiquement indispensable quand on programme en C.

    j'inclut stdio.h sans vraiment avoir besoin, c'est juste pour faire des printf pour tester. quand la lib sera stable je vais virer les printf et donc stdio.h aussi
    L'absence de certitude defini la confiance. Sans incertitudes la confiance na point de raison d'etre!

  4. #4
    Expert Confirmé Sénior

    Inscrit en
    janvier 2007
    Messages
    10 183
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 183
    Points : 14 358
    Points
    14 358

    Par défaut

    j'avoue être perplexe..

    Il est tellement plus facile de se faire un strtok qui ne détruit pas la chaîne , et d'utiliser les fonctions standard..

    Je ne vois pas ce qui ne te vas pas dans les fonctions tradtitionnelles..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre Expert Avatar de lilington
    Homme Profil pro Francois curter
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    591
    Détails du profil
    Informations personnelles :
    Nom : Homme Francois curter
    Âge : 32
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 591
    Points : 1 308
    Points
    1 308

    Par défaut

    effectivement, tu as raison, mais en faite c'est parceque tu ne vois que une reecriture de quelque chose qui existe deja.
    Je vais etre plus claire.
    Il y a deux raison:
    1/ utilisant moi meme au boulot la dite lib, je n'avais pas envis d'inclure string.h juste pour utiliser 2 fonctions.
    2/ les fonctions font la meme chose de facon differente et pour ca je te montre du code:
    strcpy et cpySTR:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //code pour strcpy
    char *ptr=malloc(sizeof(char)*9) ;
    if (ptr==NULL) 
    ...
    strcpy(ptr,"bonjour!");
    //code pour cpySTR
    char *ptr=NULL //obligatoire
    cpySTR(&ptr,"bonjour!");
    cpySTR(&ptr,"salut !");
    deplus on peut constater que on peut faire plusieurs copy sans faire un free car cpySTR libere la destination avant tout d'ou l'importance de lui envoyer un pointeur NULL sinon on a double free corruption.
    c'est de ce genre de comportement que j'avais besoin personnellement. en plus d'autre fonctions non fourni comme split(), replace(), readlines().
    mais le but premier de la lib c'est pas ca, c'est recuper une page web et faire le traitement de la page.
    voici par exemple un code qui extrait le contenu d'un commentaire sur un forum:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #include <libwebdoc/www.h>
    #include <libwebdoc/html.h>
    #include <libwebdoc/cgstring.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    int main(int argc, char **argv)
    {
        if(argc<2)
            return 0;
        char *hp=getHTTPInfo(argv[1],0,NULL);
        if (hp==NULL)
            return EXIT_FAILURE;
     
        WebPage *wp=setStructWWW(hp);
        fprintf(stderr,"1\n");
        int b=findStr(wp->html,"<div class=\"bg_endPage_blue clearfix\">",0);
        int e=findStr(wp->html,"<div class=\"endMore\">",b);
     
        char *code = extractStr(wp->html,b,e);
     
        htmlstrip_tags(&code);
        html_strip_contentClean(&code);
        fprintf(stderr,"%s\n",code);
        free(code);
        releaseWebPage(&wp);
     
        return EXIT_SUCCESS;
    }
    pour extraire tout les commentaire suffira de faire une boucle do while.
    en faite le but premier c'est ca. faire des spiders, extraire du contenu(text,image) de pages web
    Maintenant si vous trouve que c'est pas utilse j'y peux rien, je vais la garder pour moi.
    sinon merci quand meme de l'avoir telecharge et regarde un peu
    L'absence de certitude defini la confiance. Sans incertitudes la confiance na point de raison d'etre!

  6. #6
    Expert Confirmé Sénior

    Inscrit en
    janvier 2007
    Messages
    10 183
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 183
    Points : 14 358
    Points
    14 358

    Par défaut

    Citation Envoyé par lilington Voir le message
    pour extraire tout les commentaire suffira de faire une boucle do while.
    en faite le but premier c'est ca. faire des spiders, extraire du contenu(text,image) de pages web
    Maintenant si vous trouve que c'est pas utilse
    Non, c'est un joli projet personnel

    La seule cse, c'est que tu aurais pu par exemple utiliser le source-code du premier navigateur Web, Mosaic, disponible gratuitement ici ou (explications ici ou par exemple), qui t'aurait donné une bonne base pour un interpréteur HTML...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre Expert Avatar de lilington
    Homme Profil pro Francois curter
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    591
    Détails du profil
    Informations personnelles :
    Nom : Homme Francois curter
    Âge : 32
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 591
    Points : 1 308
    Points
    1 308

    Par défaut

    +1
    ah mais c'est que c'est justement ce que je vais faire, j'aime apprendre et ca ne me derange pas de tout recommencer hein. d'ailleur en faisant ca seul et en relisant le code j'ai vu des absurdite donc je vais voir mosaic et certainement tout recommencer si il y a lieu.

    Merci

    ps: j'ai pas encore lu le code mais vu les date 1996 pour la derniere version... Je sais pas trop ce qui se passait sur le net en 96, j'ai commencer en 2001 a toucher internet par a coup je preferai mon qbasic a l'epoque 1996

    plein de problemes a la compilation de la version 2.7 j'aurai aime voir comment ca gere les pages de notre epoque mais c'est pas grave je vais me contenter de lire le code. encore merci pour le lien

    ps2: bon ben sur fedora on peut avoir le binaire de la 2.7(yum) donc j'ai pu tester sur quelques site, c'est pas tres beau a voir mais l'essenciel est la, je vais plonge sur le code, parcontre les liens sur explications je suppose que ce sont pas celles du code? parcque j'ai rien trouve (tu me diras le conde est plutot claire)
    L'absence de certitude defini la confiance. Sans incertitudes la confiance na point de raison d'etre!

  8. #8
    Expert Confirmé Sénior

    Inscrit en
    janvier 2007
    Messages
    10 183
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 183
    Points : 14 358
    Points
    14 358

    Par défaut

    Citation Envoyé par lilington Voir le message
    ps: j'ai pas encore lu le code mais vu les date 1996 pour la derniere version... Je sais pas trop ce qui se passait sur le net en 96, j'ai commencer en 2001 a toucher internet par a coup je preferai mon qbasic a l'epoque 1996

    plein de problemes a la compilation de la version 2.7 j'aurai aime voir comment ca gere les pages de notre epoque mais c'est pas grave je vais me contenter de lire le code. encore merci pour le lien

    ps2: bon ben sur fedora on peut avoir le binaire de la 2.7(yum) donc j'ai pu tester sur quelques site, c'est pas tres beau a voir mais l'essenciel est la, je vais plonge sur le code, parcontre les liens sur explications je suppose que ce sont pas celles du code? parcque j'ai rien trouve (tu me diras le conde est plutot claire)
    C'est sûr que c'est ancien : c'est (pratiquement) le premier navigateur , avec X11 pour que ce soit portable...

    Si je te cite les sources, c'est que il y a un parser HTML (puisque c'était le but)..

    Je n'ai pas dt que ça couvrait tout : juste que c'était une bonne base pour voir comment était fait un parser HTML..

    Maintenant, c'était HTML 1.0, voire 2.0.

    Mais en ce qui concerne le parsing, tu as la base de l'analyse des balises et de la structure des fonctions..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #9
    Membre Expert Avatar de lilington
    Homme Profil pro Francois curter
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    591
    Détails du profil
    Informations personnelles :
    Nom : Homme Francois curter
    Âge : 32
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 591
    Points : 1 308
    Points
    1 308

    Par défaut

    oui,oui j'ai deja commence a regarder tout ca.
    L'absence de certitude defini la confiance. Sans incertitudes la confiance na point de raison d'etre!

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •