Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, et autres ressources pour la rubrique C.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/07/2011, 04h39   #1
lilington
Membre Expert
 
Avatar de lilington
 
Homme Francois curter
Développeur informatique
Inscription : juin 2005
Messages : 524
Détails du profil
Informations personnelles :
Nom : Homme Francois curter
Âge : 31
Localisation : Chine

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

Informations forums :
Inscription : juin 2005
Messages : 524
Points : 1 179
Points : 1 179
Envoyer un message via Yahoo à lilington Envoyer un message via Skype™ à lilington
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!
lilington est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 13h47   #2
aslo92
Membre régulier
 
Avatar de aslo92
 
Homme
Ingénieur développement logiciels temps réel
Inscription : 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 : 72
Points : 72
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 ?
aslo92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 02h49   #3
lilington
Membre Expert
 
Avatar de lilington
 
Homme Francois curter
Développeur informatique
Inscription : juin 2005
Messages : 524
Détails du profil
Informations personnelles :
Nom : Homme Francois curter
Âge : 31
Localisation : Chine

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

Informations forums :
Inscription : juin 2005
Messages : 524
Points : 1 179
Points : 1 179
Envoyer un message via Yahoo à lilington Envoyer un message via Skype™ à lilington
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!
lilington est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 12h10   #4
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 594
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 594
Points : 11 933
Points : 11 933
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
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 04h17   #5
lilington
Membre Expert
 
Avatar de lilington
 
Homme Francois curter
Développeur informatique
Inscription : juin 2005
Messages : 524
Détails du profil
Informations personnelles :
Nom : Homme Francois curter
Âge : 31
Localisation : Chine

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

Informations forums :
Inscription : juin 2005
Messages : 524
Points : 1 179
Points : 1 179
Envoyer un message via Yahoo à lilington Envoyer un message via Skype™ à lilington
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!
lilington est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2012, 13h49   #6
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 594
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 594
Points : 11 933
Points : 11 933
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
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/02/2012, 03h36   #7
lilington
Membre Expert
 
Avatar de lilington
 
Homme Francois curter
Développeur informatique
Inscription : juin 2005
Messages : 524
Détails du profil
Informations personnelles :
Nom : Homme Francois curter
Âge : 31
Localisation : Chine

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

Informations forums :
Inscription : juin 2005
Messages : 524
Points : 1 179
Points : 1 179
Envoyer un message via Yahoo à lilington Envoyer un message via Skype™ à lilington
+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!
lilington est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2012, 10h30   #8
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 594
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 594
Points : 11 933
Points : 11 933
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
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/02/2012, 02h47   #9
lilington
Membre Expert
 
Avatar de lilington
 
Homme Francois curter
Développeur informatique
Inscription : juin 2005
Messages : 524
Détails du profil
Informations personnelles :
Nom : Homme Francois curter
Âge : 31
Localisation : Chine

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

Informations forums :
Inscription : juin 2005
Messages : 524
Points : 1 179
Points : 1 179
Envoyer un message via Yahoo à lilington Envoyer un message via Skype™ à lilington
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!
lilington est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h58.


 
 
 
 
Partenaires

Hébergement Web