Un problème de logique ou de techinque ?
Résolu
EL barto !
Messages postés
121
Date d'inscription
Statut
Membre
Dernière intervention
-
EL barto ! Messages postés 121 Date d'inscription Statut Membre Dernière intervention -
EL barto ! Messages postés 121 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'aurais besoin de conseil et d'aide, sur un programme que l'on m'a aidé à faire, mais qui ne marche pas et qui n'est pas satisfaisant du point de vue de la 'propreté du code'.
le but de ce programme est de récupérer dans le code source d'un page web, la chaine de caractère situé entre les balises <title> et <\title>.
le voici :
J'aurais besoin de conseil et d'aide, sur un programme que l'on m'a aidé à faire, mais qui ne marche pas et qui n'est pas satisfaisant du point de vue de la 'propreté du code'.
le but de ce programme est de récupérer dans le code source d'un page web, la chaine de caractère situé entre les balises <title> et <\title>.
le voici :
#include <windows.h> #include <stdlib.h> #include <curl/curl.h> #include <stdio.h> #include <string.h> /* FONCTION QUI ECRIS LE CODE SOURCE DE LA PAGE WEB DANS LA FENÊTRE DE COMMANDE */ size_t ecrire(void *ptr, size_t size, size_t nmemb, void *stream) { sprintf(stream, "%s%s", stream, ptr); return nmemb; } /* FONCTION QUI TELECHARGE LE CODE SOURCE DE LA PAGE WEB */ void dlwebsite(char *url, char *fichier) { CURL *session; CURLcode res; fichier[0] = '\0'; session = curl_easy_init(); curl_easy_setopt(session, CURLOPT_URL, url); curl_easy_setopt(session, CURLOPT_WRITEDATA, fichier); curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, ecrire); curl_easy_perform(session); curl_easy_cleanup(session); } /* FONCTION QUI SELECTIONNE LA SOUS CHAINE COMPRISE ENTRE LE BALISE <TITLE> ET <\TITLE> */ char iso_chaine (char source) { char chaine [500000]; char sous_chaine; char * debut = "<title>"; char * fin = "<\"title>"; if ((sous_chaine > debut) && (sous_chaine<fin)) return sous_chaine; } /* PROGRAMME, QUI AU FINAL DOIS M'AFFICHER LA CHAINE DE CARACT7RE RECHERCHEE */ int main() { char *source = malloc(500000); char url[256]; char sous_chaine; char nmemb; printf ("Entrer l adresse du site qu il faut analyser...\n"); gets(url); dlwebsite(url, source); iso_chaine (sous_chaine); printf("%s", sous_chaine); system("pause"); }
A voir également:
- Un problème de logique ou de techinque ?
- Et logique excel - Guide
- Lecteur logique ✓ - Forum Windows
- Afpa tests niveau 3 d'entrée en formation : français, maths, logique - Forum Études / Formation High-Tech
- Tableau analyse logique pdf - Guide
- Simulateur logique combinatoire en ligne - Télécharger - Vie quotidienne
30 réponses
Salut, t'as pu essayer le code ?
EN tout cas chez moi ça marche pas. Comme je te disais, quand je devrait entrer l'url, le curseur ne me laisse pas la main, et la fenêtre se ferme.
EN tout cas chez moi ça marche pas. Comme je te disais, quand je devrait entrer l'url, le curseur ne me laisse pas la main, et la fenêtre se ferme.
Non DSl....
je vais tester demain soir....
Mais fais que je chope la libcurl pour windows, et l'installer.. ca prend "normalement" pas trop de temps mais po le temps ce soir...
@+
je vais tester demain soir....
Mais fais que je chope la libcurl pour windows, et l'installer.. ca prend "normalement" pas trop de temps mais po le temps ce soir...
@+
Hé ! Chuka !
Quoi de neuf ??
Ca fais deux jours que tu m'as écris! Comme je voyais pas de message dans ma boite mail je pensais que tu m'avais oublié !
Je viens juste de comprendre à quoi sert le menu intervention sur la droite du site.
Je suis en train de décripter le code que tu m'envoies.
Dans celui qui précède j'avais remarqu' que comme la fonction utilise un pointeur qui par du debut du code de la page à analyser, il faudrait que je trouve autre chose.
Enfin, là ça devient vraiment génant pour moi, en fait, j'arrive plus à comprendre un code quand je le lie que quand j'essaie d'en concevoir un.
Bon, ben j'espère que ça va bien pour toi. @+
Quoi de neuf ??
Ca fais deux jours que tu m'as écris! Comme je voyais pas de message dans ma boite mail je pensais que tu m'avais oublié !
Je viens juste de comprendre à quoi sert le menu intervention sur la droite du site.
Je suis en train de décripter le code que tu m'envoies.
Dans celui qui précède j'avais remarqu' que comme la fonction utilise un pointeur qui par du debut du code de la page à analyser, il faudrait que je trouve autre chose.
Enfin, là ça devient vraiment génant pour moi, en fait, j'arrive plus à comprendre un code quand je le lie que quand j'essaie d'en concevoir un.
Bon, ben j'espère que ça va bien pour toi. @+
Ho ! t'en fais pas.
Y'a des soirs ou il faut qu'on se concentre sur un truc particulier, ou au contraire qu'on se laisse vraiment aller.
Y'a des soirs ou il faut qu'on se concentre sur un truc particulier, ou au contraire qu'on se laisse vraiment aller.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
J'arrive pas à compiler avec libcurl sur windows....
T'as fais comment??(j'ai chopé .zip libcul mais la lib n'est pas reconnu apparement...)
J'ai recup libcurl.dll et je vais essayer de faire des ppointer de fonction avec cette DLL....je te tiens au jus!!
@+
J'arrive pas à compiler avec libcurl sur windows....
T'as fais comment??(j'ai chopé .zip libcul mais la lib n'est pas reconnu apparement...)
J'ai recup libcurl.dll et je vais essayer de faire des ppointer de fonction avec cette DLL....je te tiens au jus!!
@+
Salut,
essaye ce code:
Telecharge libcurl.dll que tu mets dans le meme repertoire de compilation
essaye ce code:
#include <stdlib.h> #include <curl/curl.h> #include <stdio.h> #include <string.h> #include <windows.h> typedef CURL* (*ptrcurlSession)(); typedef CURLcode (*ptrcurlSetop)(CURL *, CURLoption , void*); typedef CURLcode (*ptrcurl_easy_perform)(CURL * handle ); typedef CURLcode (*ptrcurl_easy_cleanup)(CURL * handle ); ptrcurlSession curlSession; ptrcurlSetop curlSetop; ptrcurl_easy_perform ptrcurleasy_perform; ptrcurl_easy_cleanup ptrcurleasy_cleanup; /* FONCTION QUI ECRIS LE CODE SOURCE DE LA PAGE WEB DANS LA FENÊTRE DE COMMANDE */ size_t ecrire(void *ptr, size_t size, size_t nmemb, void *stream) { sprintf(stream, "%s%s", stream, ptr); return nmemb; } /* FONCTION QUI TELECHARGE LE CODE SOURCE DE LA PAGE WEB */ void dlwebsite(char *url, char *fichier) { HINSTANCE hinst; hinst=LoadLibrary("libcurl.dll"); if (hinst==NULL) printf("chargement DLL loope..."); curlSession=(ptrcurlSession) GetProcAddress(hinst,"curl_easy_init"); curlSetop=(ptrcurlSetop) GetProcAddress(hinst,"curl_easy_setopt"); ptrcurleasy_perform=(ptrcurl_easy_perform) GetProcAddress(hinst,"curl_easy_perform"); ptrcurleasy_cleanup=(ptrcurl_easy_cleanup) GetProcAddress(hinst,"curl_easy_cleanup"); CURL *session; CURLcode res; fichier[500000] = '\0'; session = curlSession(); curlSetop(session, CURLOPT_URL, url); curlSetop(session, CURLOPT_WRITEDATA, fichier); curlSetop(session, CURLOPT_WRITEFUNCTION, ecrire); ptrcurleasy_perform(session); ptrcurleasy_cleanup(session); FreeLibrary(hinst); } /* FONCTION QUI SELECTIONNE LA SOUS CHAINE COMPRISE ENTRE LE BALISE <TITLE> ET <\TITLE> */ void iso_chaine (char* data,char*sous_chaine,char fin,char*debut ) { int i; int j=0; FILE*fp; fp=fopen("mytxt.txt","a+"); while (j!=499999) {data++; if(*data==debut[0]) {if (strncmp(data,debut,strlen(debut))==0) {data=data+strlen(debut); i=0; while (*data!=fin) { *sous_chaine=*data; sous_chaine++; i++; data++; if(*data==fin) {sous_chaine=sous_chaine-i; fwrite(sous_chaine,1,(i)*sizeof(char),fp); fwrite("\n",1,sizeof(char),fp); printf("%s\n",sous_chaine); sous_chaine=sous_chaine+i; break; } } } } j++; } fclose(fp); } /* PROGRAMME, QUI AU FINAL DOIS M'AFFICHER LA CHAINE DE CARACT7RE RECHERCHEE */ int main(int arg,char* argv[]) { int i; char *source = (char*)malloc(500000*sizeof(char)); char url[256]; char sous_chaine[255]; char deb[255]; char fin; char nmemb; printf ("Entrer le debut\n"); gets(deb); printf ("Entrer la fin\n"); scanf("%c",&fin); printf ("Entrer l adresse du site qu il faut analyser...\n"); scanf("%s",url); printf ("%s %c\n",deb,fin); dlwebsite(url, source); iso_chaine (source,sous_chaine,fin,deb); //printf("%s\n", sous_chaine); getchar(); }
Telecharge libcurl.dll que tu mets dans le meme repertoire de compilation
Entrer le debut
<a href="[http://]
Entrer la fin
"
Entrer l adresse du site qu il faut analyser...
www.commentcamarche.net
<a href="[http://] "
www.commentcamarche.net
droit-finances.commentcamarche.net
sante-medecine.commentcamarche.netë
en.kioskea.net/
es.kioskea.net/
www.commentcamarche.net
www.cim.be/mtwb/fr/r_10.html
www.commentcamarche.netÇ
en.kioskea.net&
es.kioskea.net
droit-finances.commentcamarche.netww.commentcamarche.net
sante-medecine.commentcamarche.net
c'est le resultat que j'obtiens.....
<a href="[http://]
Entrer la fin
"
Entrer l adresse du site qu il faut analyser...
www.commentcamarche.net
<a href="[http://] "
www.commentcamarche.net
droit-finances.commentcamarche.net
sante-medecine.commentcamarche.netë
en.kioskea.net/
es.kioskea.net/
www.commentcamarche.net
www.cim.be/mtwb/fr/r_10.html
www.commentcamarche.netÇ
en.kioskea.net&
es.kioskea.net
droit-finances.commentcamarche.netww.commentcamarche.net
sante-medecine.commentcamarche.net
c'est le resultat que j'obtiens.....
Salut chuka ! alors on a les pieds dans l'eau ??
ici, je suis plutôt au sec.
je voulais savoir si je devais créer une boucle pour retenir ou afficher ( ? ) les sous liens contenus par le site d'une page web, où devrais l'insérer, dans la déclaration de fonction, ou dans la définition de fonction ?
C'est parce que je voudrais que mon programme me sorte tous les liens qu'il y a sur la page. mais je pense que jen'ai pas besoin de te montrer de quoi je parle ou alors veux tu que je te renvoi le programme ?
ici, je suis plutôt au sec.
je voulais savoir si je devais créer une boucle pour retenir ou afficher ( ? ) les sous liens contenus par le site d'une page web, où devrais l'insérer, dans la déclaration de fonction, ou dans la définition de fonction ?
C'est parce que je voudrais que mon programme me sorte tous les liens qu'il y a sur la page. mais je pense que jen'ai pas besoin de te montrer de quoi je parle ou alors veux tu que je te renvoi le programme ?
Salut!!
Normalement avec dernier code, t'as tout qui s'affiche!!
while (j!=499999) parcours tout le buffer de la recup de la page
Sinon, faut créer un tableau de char* dans la boucle, au choix!!
Normalement avec dernier code, t'as tout qui s'affiche!!
while (j!=499999) parcours tout le buffer de la recup de la page
Sinon, faut créer un tableau de char* dans la boucle, au choix!!
Salut Chuka !
j'ai un probleme. :(
Voilà ce que je n'arrive pas à faire :
Tu sais le programme que tu as fait pour isoler des sous chaine du code d'une page web ? ... et ben j'arrive pas à joindre tous les bouts que tu as fait.
EN fait faudrait que ça affiche :
1- la chaine de titre
2-la longue chaine des keywords
3-les multiples longue chaines d'adresse de lien de page web.
J'ai fait 3 fonction que j'ai essayé de modifier :
1- iso_chaine (char* data,char*sous_chaine ) pour le titre
2- iso_key (char* data,char*keywords ) pour les keywords
3- iso_lien (char* data,char*sous_lien ) pour les liens ( celle là j'arrive pas à la faire se répéter pour qu'elle prenne effectivement TOUS les liens et pas seulement le premier).
tu le connais par coeur mais le voici qd même , j'espère que t'as eu libcurl :
j'ai un probleme. :(
Voilà ce que je n'arrive pas à faire :
Tu sais le programme que tu as fait pour isoler des sous chaine du code d'une page web ? ... et ben j'arrive pas à joindre tous les bouts que tu as fait.
EN fait faudrait que ça affiche :
1- la chaine de titre
2-la longue chaine des keywords
3-les multiples longue chaines d'adresse de lien de page web.
J'ai fait 3 fonction que j'ai essayé de modifier :
1- iso_chaine (char* data,char*sous_chaine ) pour le titre
2- iso_key (char* data,char*keywords ) pour les keywords
3- iso_lien (char* data,char*sous_lien ) pour les liens ( celle là j'arrive pas à la faire se répéter pour qu'elle prenne effectivement TOUS les liens et pas seulement le premier).
tu le connais par coeur mais le voici qd même , j'espère que t'as eu libcurl :
#include <stdlib.h> #include <curl/curl.h> #include <stdio.h> #include <string.h> /* FONCTION QUI ECRIS LE CODE SOURCE DE LA PAGE WEB DANS LA FENÊTRE DE COMMANDE */ size_t ecrire(void *ptr, size_t size, size_t nmemb, void *stream) { sprintf(stream, "%s%s", stream, ptr); return nmemb; } /* FONCTION QUI TELECHARGE LE CODE SOURCE DE LA PAGE WEB */ void dlwebsite(char *url, char *fichier) { CURL *session; CURLcode res; fichier[500000] = '\0'; session = curl_easy_init(); curl_easy_setopt(session, CURLOPT_URL, url); curl_easy_setopt(session, CURLOPT_WRITEDATA, fichier); curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, ecrire); curl_easy_perform(session); curl_easy_cleanup(session); } /* FONCTION QUI SELECTIONNE LES KEYWORDS */ int iso_key (char* data,char*keywords ) { int i=0; int j; char * debut = "keywords\" content=\""; while (j<500000) {data++; if(*data=='k') {if (strncmp(data,debut,19)==0) {data=data+19; while (*data!='\"') {*keywords=*data; keywords++; i++; data++; if(*data=='\"') break; } } } if((*data=='\"' )&& (i!=0)) break; j++; } return i; } /* FONCTION QUI SELECTIONNE LA SOUS CHAINE COMPRISE ENTRE LE BALISE <TITLE> ET <\TITLE> */ int iso_lien (char* data,char*sous_lien ) { int i; char * debut = "<a href=\"http://"; while (i==0) {data++; if(*data=='<') {if (strncmp(data,debut,16)==0) {data=data+16; while (*data!='\"') {*sous_lien=*data; sous_lien++; i++; data++; if(*data=='\"') break; } } } if((*data=='\"' )&& (i!=0)) break; } return i; } /* PROGRAMME, QUI AU FINAL DOIS M'AFFICHER LA CHAINE DE CARACT7RE RECHERCHEE */ int iso_chaine (char* data,char*sous_chaine ) { int i=0; char * debut = "<title>"; char * fin = "<\title>"; while (i==0) {data++; if(*data=='<') {if (strncmp(data,debut,7)==0) {data=data+7; while (*data!='<') {*sous_chaine=*data; sous_chaine++; i++; data++; if(*data=='<') if (strncmp(data,fin,8)==0) break; } } } if (strncmp(data,fin,8)==0) break; } return i; } int main() { int i,u,v,k; char *source = (char*)malloc(500000*sizeof(char)); char url[256]; char sous_lien[12]; char sous_chaine[255]; char keywords[200]; char nmemb; printf ("Entrer l adresse du site qu il faut analyser...\n"); scanf("%s",url); dlwebsite(url, source); v=iso_chaine (source,sous_chaine); printf("%s\n", sous_chaine); k=iso_key (source,keywords); printf ("%s\n", keywords); i=iso_lien (source,sous_lien); printf("%s\n", sous_lien); scanf("%s",&u); getchar(); getchar(); }
Salut El Barto!!
Je pense le probleme vient du fait qu'a chaque fois que lance la boucle, il faut à la fin refaire pointer souce au debut du buffer:
Mais au lieu de faire 3 boucle essaye cela:
Si tu veux pas recup les infos dans un fichier, supprime dans le code tout ce qui est fwrite FILE, fopen etc...
@+
Je pense le probleme vient du fait qu'a chaque fois que lance la boucle, il faut à la fin refaire pointer souce au debut du buffer:
int iso_key (char* data,char*keywords ) { int i=0; int j; char * debut = "keywords\" content=\""; while (j<500000) {data++; if(*data=='k') {if (strncmp(data,debut,19)==0) {data=data+19; while (*data!='\"') {*keywords=*data; keywords++; i++; data++; if(*data=='\"') break; } } } if((*data=='\"' )&& (i!=0)) break; j++; } data=data-j; return i; }
Mais au lieu de faire 3 boucle essaye cela:
void iso_chaine (char* data,char*sous_chaine) { int i; int j=0; FILE*fp; char * debut = "<a href=\"http://"; char*title="<title>"; char*keywd="keywords\" content=\""; char*finTit="</title>"; char*fin="\""; fp=fopen("mytxt.txt","a+"); while (j!=499999) {data++; if(*data==debut[0]) {if (strncmp(data,debut,strlen(debut))==0) {data=data+strlen(debut); i=0; while (*data!=*fin) { *sous_chaine=*data; sous_chaine++; i++; data++; if(*data==*fin) {sous_chaine=sous_chaine-i; fwrite(sous_chaine,1,(i)*sizeof(char),fp); fwrite("\n",1,sizeof(char),fp); printf("%s\n",sous_chaine); sous_chaine=sous_chaine+i; break; } } } if (strncmp(data,title,strlen(title))==0) {data=data+strlen(title); i=0; while (*data!=finTit[0]) { *sous_chaine=*data; sous_chaine++; i++; data++; if(*data==finTit[0]) {if (strncmp(data,finTit,strlen(finTit))==0) {sous_chaine=sous_chaine-i; fwrite(sous_chaine,1,(i)*sizeof(char),fp); fwrite("\n",1,sizeof(char),fp); printf("%s\n",sous_chaine); sous_chaine=sous_chaine+i; break; } } } } } if(*data==keywd[0]) {if (strncmp(data,keywd,strlen(keywd))==0) {data=data+strlen(keywd); i=0; while (*data!=*fin) { *sous_chaine=*data; sous_chaine++; i++; data++; if(*data==*fin) {sous_chaine=sous_chaine-i; fwrite(sous_chaine,1,(i)*sizeof(char),fp); fwrite("\n",1,sizeof(char),fp); printf("%s\n",sous_chaine); sous_chaine=sous_chaine+i; break; } } } } j++; } fclose(fp); }
Si tu veux pas recup les infos dans un fichier, supprime dans le code tout ce qui est fwrite FILE, fopen etc...
@+
SAlut !
En fait, je suis arrivé à faire marcher les trois fontion iso_lien; iso_chaine, et iso_titre ensembles.
Mon problème ça serait plutôt de récolter toute chaines de caractère contenu dans la page relative à iso_lien
(pour attraper toutes les adresse de liens contenu dans la page).
c'est donc plus un problème de faire recommencer la boucle à la fin du premier lien trouvé quoi.
et c'est là justement que je crois que cette méthode de pointeur qui commence de puis le début me paraît inadaptée en l'état.
Bon je cherche. à plus.
En fait, je suis arrivé à faire marcher les trois fontion iso_lien; iso_chaine, et iso_titre ensembles.
Mon problème ça serait plutôt de récolter toute chaines de caractère contenu dans la page relative à iso_lien
(pour attraper toutes les adresse de liens contenu dans la page).
c'est donc plus un problème de faire recommencer la boucle à la fin du premier lien trouvé quoi.
et c'est là justement que je crois que cette méthode de pointeur qui commence de puis le début me paraît inadaptée en l'état.
Bon je cherche. à plus.