IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

C Discussion :

Récupérer une info dans une page web en C


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Par défaut Récupérer une info dans une page web en C
    Bonjour,
    Je voudrai bien récupérer une info dans une page web faire de l'incorporé dans mon programme.
    Je suis sous Windows et mon prof m'a dit d'utiliser system("curl nomdusite" | findstr ce_que_je_cherche"). Cepeandant cela ne marche pas . Mon programme tourne dans le vide...
    J'ai vu qu'on pouvait utiliser les sockets mais ca ne semble pas évident ...
    Savez-vous comment faire ?
    Bapth

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    Oui curl est le plus simple, et ça ne marche pas n'a jamais été un diagnostic d'erreur.
    Autant dire que si utiliser curl est trop compliqué, alors utiliser des sockets pour crafter une requête http est clairement hors de portée.
    Peut-on voir du code, des erreurs, ou quoi que ce soit qui pourrait aider à comprendre ce que tu fais, ce qui échoue et pourquoi ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Par défaut
    Bonjour,
    Merci pour ta rapide.
    Je veux récupérer les infos d'un site donnant le nombre de cas de coronavirus en France et extraire que le nombre de cas. Voici le code :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdbool.h>
    #include <conio.h> 
    #include <windows.h>
    #include <dirent.h> 
    #include <dirent.h> 
     
     
    int main(){
     
     
        //FILE * fichier = fopen("test.txt","r");
        char a[]="1&nbsp;807&nbsp;479"; char test[100];
        char t1[10], t2[20],t3[20];
        char user[2000] = {0};
     
     
     
        user[100000] = system("curl https://www.coronavirus-statistiques.com/ | findstr France ");
        printf("%s", user); //Affiche tout le curl
     
    /* affiche que le nombre de cas */
        printf("%c ",user[0]); 
        printf("%c",user[7]); printf("%c",user[8]); printf("%c ",user[9]);
        printf("%c",user[16]); printf("%c",user[17]); printf("%c",user[18]);
     
        return 0;
    }
    Voila j'espère que c'est compréhensible.
    @+
    Bapth

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonjour.

    Ce que tu cherches à faire s'appelle du Web scraping, et c'est plutôt considéré comme une mauvaise pratique. L'interface web est prévue pour être montrée à des utilisateur humains, pas à être traitée par des programmes. Après c'est pas impossible, mais le C n'est clairement pas la meilleure façon de faire.

    En revanche tu as de la chance, ces données sont librement disponibles en Open Data, au format CSV ou JSON ici : https://www.coronavirus-statistiques.com/open-data/

    Ça répond justement à ton besoin, et c'est beaucoup plus facile à traiter.

  5. #5
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Par défaut
    Merci beaucoup j'avais pas pensé à faire cela mais comment il faut faire pour télécharger un fichier sur le web en C ?
    @+

  6. #6
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Tu peux le faire en C, avec les sockets, mais puisque tu as curl autant l'utiliser.

    Par exemple, tu télécharges (une fois par jour ?) le fichier CSV, puis tu le traites avec ton programme en C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    curl https://www.coronavirus-statistiques.com/corostats/openstats/open_stats_coronavirus.csv > data.csv)
    mon_programme data.csv
    Après il faut manipuler du texte dans ton programme.

  7. #7
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Par défaut
    Nous c'est aussi ca le problème ... Quand j'utilise la commande curl mon programme tourne dans le vide et quand je le stop c'est terrible ....
    Exemple :
    Nom : Capture.PNG
Affichages : 202
Taille : 17,6 Ko

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    Quel est le programme maintenant ?
    Quand je vois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char user[2000] = {0};
     
     
     
        user[100000] = system("curl https://www.coronavirus-statistiques.com/ | findstr France ");
    Non seulement les noms de variables aident en rien à comprendre le truc, mais en plus il manque le niveau 0 du C et des tableaux : on accède pas à la case 100 000 (choisie arbitrairement ?) d'un tableau de 2 000 entrées.
    a ne sert à rien, test ne sert à rien, t1, t2, t3 ne servent à rien.
    Si tu télécharges une page web, tu auras au mieux son code source, si le serveur l'autorise.
    system est généralement à bannir.
    system retourne un int, qui est le retour de la commande lancée.
    Mais au moins tu peux le lancer dans un invité de commande pour voir le résultat, et autant dire que dans ce cas c'est pas beau à voir
    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
    curl https://www.coronavirus-statistiques.com/ | findstr France
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0FINDSTR: Line 5 is too long.
    FINDSTR: Line 25 is too long.
    FINDSTR: Line 25 is too long.
    FINDSTR: Line 25 is too long.
    FINDSTR: Line 25 is too long.
    FINDSTR: Line 25 is too long.
    roup><optgroup label="English"><option value="https://www.coronavirus-statistiques.com/stats-globale/coronavirus-number-of-cases/">Coronavirus statistics (en)</option><option value="https://www.coronavirus-statistiques.com/stats-globale/covid-19-cases-europe/">Covid-19 (en)</option><option value="https://www.coronavirus-statistiques.com/stats-pays/covid-19-cases-uk/">United-Kingdom (en)</option></optgroup> </select></a></li></ul></li><li id="menu-item-19061" class="nolink menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-19061"><a href="#"><i class="btn-recherche"></i></a><ul class="sub-menu"><li id="menu-item-19062" class="li-search menu-item menu-item-type-custom menu-item-object-custom menu-item-19062"><a href="#"><form role="search" method="get" id="searchform" class="searchform" action="https://www.coronavirus-statistiques.com"> <input type="text" value="" name="s" id="s" class="input-search" placeholder="Rechercher département, région, pays"> <button type="submit" id="searchsubmit" class="btn-search">Ok</button></form></a></li></ul></li></ul></div><div class="menu-menu-du-header-secondaire-container"><ul id="menu-menu-du-header-secondaire" class="nav uppercase"><li id="menu-item-19045" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19045"><a href="https://www.coronavirus-statistiques.com/a-propos/">À propos</a></li><li id="menu-item-19046" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19046"><a href="https://www.coronavirus-statistiques.com/open-data/">Open data</a></li></ul></div><div class="menu-mobile-container"> <a href="" class="btn-menu-mobile" id="btn-menu-mobile"></a> <a href="" class="btn-mobile-close"></a></div></div><div class="zone-sub-menu"> <a href="https://www.eficiens.com/" class="btn-logo-menu flex" target="_blank"><span>par</span><img src="https://www.coronavirus-statistiques.com/assets/themes/eficiens-osc-v2/img/logo-eficiens.png" width="100 " /></a></div></header><div class="header-mobile-soustitre"><p><strong>Bienvenue sur coronavirus statistiques</strong>,<br /> seul site de statistiques COVID-19 allant du<br /> département au continent</p></div><div class="bg-menu-mobile"></div><section class="section-header-home animate"><div class="video-container" style="background: url() center center no-repeat; background-size: cover;"><video autoplay muted loop id="video" class="video" onplaying="$('#video').addClass('show'); this.controls=false;" preload="auto" autoplay="autoplay" loop="loop" poster="" muted playsinline="true"> <source src="https://www.coronavirus-statistiques.com/assets/themes/eficiens-osc-v2/video/osc-home-final.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'> <source src="https://www.coronavirus-statistiques.com/assets/themes/eficiens-osc-v2/video/osc-home-final.webm" type='video/webm; codecs="vp8, vorbis"'> <source src="https://www.coronavirus-statistiques.com/assets/themes/eficiens-osc-v2/video/osc-home-final.ogv" type='video/ogg; codecs="theora, vorbis"'></video></div><div class="section-content flex"><div class="date">Jeudi 19 novembre 2020</div><div class="menu-menu-du-header-tertiaire-container"><ul id="menu-menu-du-header-tertiaire" class=""><li id="menu-item-19047" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19047"><a href="https://www.coronavirus-statistiques.com/nos-sources/">Les sources</a></li><li id="menu-item-19049" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19049"><a href="https://www.coronavirus-statistiques.com/qui-sommes-nous/">Qui sommes-nous ?</a></li><li id="menu-item-19048" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19048"><a href="https://www.coronavirus-statistiques.com/lequipe/">L&rsquo;équipe bénévole</a></li></ul></div></div></section><section class="section-global-france section-padding animate"><div class="section-content"><div class="section-header flex"><h2> SITUATION GLOBALE FRANCE&nbsp;<img src="https://www.coronavirus-statistiques.com/assets/uploads/2020/06/flag-france-1.png" class="flag" /></h2> <a href="https://www.coronavirus-statistiques.com/stats-pays/coronavirus-nombre-de-cas-en-france/" class="btn btn-details">Détails France</a></div><div class="grid"><div class="item-data" id="item1"><div class="flex"> <img src="https://www.coronavirus-statistiques.com/assets/themes/eficiens-osc-v2/img/picto-cas.svg" alt="" class="picto" /> <span class="texte">Cas</span></div><div class="chiffre">2&nbsp;065&nbsp;138</div></div><div class="item-data" id="item2"><div class="flex"> <img src="https://www.coronavirus-statistiques.com/assets/themes/eficiens-osc-v2/img/picto-deces.svg" alt="" class="picto" /> <span class="texte">Décès</span></div><div class="chiffre">46&nbsp;698</div></div><div class="item-data" id="item3"><div class="flex"> <img src="https://www.coronavirus-statistiques.com/assets/themes/eficiens-osc-v2/img/picto-guerison.svg" alt="" class="picto" /> <span class="texte">Guérisons</span></div><div class="chiffre">145&nbsp;391</div></div><div class="item-data" id="item4"><div class="flex"> <img src="https://www.coronavirus-statistiques.com/assets/themes/eficiens-osc-v2/img/picto-hospitalisation.svg" alt="" class="picto" /> <span class="texte">Hospitalisés en cours</span></div><div class="chiffre">32&nbsp;842</div></div><div class="item-data charts"><div class="chart-container"><header><h2>FRANCE - NOUVEAUX CAS (7&nbsp;DERNIERS JOURS)</h2><div class="logo"> <img src="/corostats/charts/images/picto-cas.svg" alt="FRANCE"></div></header><div class="canvas-holder"><canvas id="chart-guerisons7j-p1" width="400" height="240" data-chart="data_guerisons7j_p1"></canvas></div><div class="source"> Source : Santé Publique France</div> <script type="text/javascript">var data_guerisons7j_p1 = {
    FINDSTR: Line 35 is too long.
    FINDSTR: Line 35 is too long.
    FINDSTR: Line 141 is too long.
    FINDSTR: Line 141 is too long.
    FINDSTR: Line 141 is too long.
    FINDSTR: Line 141 is too long.
    FINDSTR: Line 141 is too long.
    100  133k    0  133k    0     0   133k      0 --:--:--  0:00:01 --:--:--  118k
    Est-ce que cette utilisation de findstr est correcte ?

    Les données open data sont au moins utilisables plus simplement, mais il encore faut-il avoir des bases en C pour savoir traiter le csv qui sort.
    Ou alors utiliser un autre langage, le résultat json est assez trivial à utiliser en Python.

    Et il faudrait utiliser curl dans le programme plutôt que lancer un appel via system.
    https://curl.se/libcurl/c/libcurl-tutorial.html
    Sinon il faut utiliser un fichier intermédiaire, écrire le résultat de curl dans le fichier, puis parser ce fichier dans le programme.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut
    Hello,

    Citation Envoyé par Bousk Voir le message

    Est-ce que cette utilisation de findstr est correcte ?
    Si on regarde les options de findstr, on voit une option /i pour ne pas tenir compte de la casse, ce qui veut dire que par défaut la comparaison tient compte de la casse. Or dans le fichier .csv, le f de France est en minuscule, mais dans le programme, c'est un F qui est donné.

  10. #10
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Par défaut
    Bonsoir,
    J'ai enfin réussi à finir Cependant ca me demande les droits d'admin car si windows utilise curl sans les droits d'admin, ca fait crash le PC super .... (enfin le mien )
    J'ai donc fait un script en batch qui comporte qu'une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    curl --location --request GET "https://www.coronavirus-statistiques.com/corostats/openstats/open_stats_coronavirus.csv" > fichier_coronavirus.csv
    Je le modifie vite fait pour qu'il se lance en admin.

    J'exploite après le fichier CSV afin de prendre que la ligne qui m'intéresse.

    Et, enfin, je l'affiche


    Merci de votre aide en tout cas
    @+
    Bapth

  11. #11
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 670
    Par défaut
    Salut,

    Ce n'est pas normal. Télécharge une version fraîche de Curl.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer une page web en vb.net
    Par xantra dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/07/2009, 00h03
  2. Récupérer une page web complète (code+images+..)
    Par cutemeister dans le forum Général Java
    Réponses: 9
    Dernier message: 29/04/2009, 13h37
  3. Réponses: 3
    Dernier message: 10/03/2009, 13h09
  4. Récupérer une page Web distante via Post
    Par Mike Reason dans le forum Langage
    Réponses: 1
    Dernier message: 06/06/2008, 09h22
  5. [C++][Linux & Windows] Récupérer une page web
    Par Invité4 dans le forum C++
    Réponses: 4
    Dernier message: 06/04/2006, 19h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo