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

Réseau Discussion :

Récupérer des données sur un site Web via une requête HTTP


Sujet :

Réseau

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Récupérer des données sur un site Web via une requête HTTP
    Bonjour ,

    je débute en C++ et j'ai besoin de récupérer les données (les cotations d'échange entre devises ) d'un site(forex) à travers une requête html sur QT(version 5) en utilisant les classes :

    QnetworkAccessManager, QnetworkReply, QnetworkRequest, Qurl .


    Le but final étant de créer une application logicielle qui charge en continue les cotations d'échange entre devise, notamment Euro – Dollard, les stocke dans une base de données SQL de type MySql ou autre, offre un outil de consultation sous la forme de tableau et de graphique.

    Je ne suis qu'à la partie de récupération des données ,j'ai déjà commencé à coder mais j'ai certaines erreurs . Comme je suis vraiment débutante , j'ai vraiment besoins d'aide .

    J'ai vu les autres discussion concernant ce sujet mais je ne réussi vraiment pas à trouver de solutions .
    Veuillez m'aider s'il vous plait .


    Voici le code de mes trois classes :

    - fenetrePrincipal.h

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #ifndef FENETREPRINCIPAL_H
    #define FENETREPRINCIPAL_H
     
    #include <QMainWindow>
    #include <QtNetwork/QNetworkAccessManager>
    #include <QtNetwork/QNetworkRequest>
    #include <QUrl>
    #include <QString>
     
    class QFile;
    class QNetworkReply;
     
     
     
    namespace Ui {
    class fenetrePrincipal;
    }
     
    class fenetrePrincipal : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit fenetrePrincipal(QWidget *parent = 0);
        ~fenetrePrincipal();
        void request();
     
    private slots:
        void downloadFile();
        void cancelDownload();
        void httpFinished();
        void httpReadyRead();
     
     
     
    private:
        Ui::fenetrePrincipal *ui;
     
           QUrl url;
           QNetworkAccessManager *manager;
           QNetworkRequest requete;
           QNetworkReply *reply;
           QFile *file;
           int httpGetId;
           bool httpRequestAborted;
    };
     
    #endif // FENETREPRINCIPAL_H
    - fenetrePrincipal.cpp


    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    #include <QtWidgets>
    #include <qnetwork.h>
    #include <QString>
     
    #include "fenetreprincipal.h"
    #include "ui_fenetreprincipal.h"
     
    fenetrePrincipal::fenetrePrincipal(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::fenetrePrincipal)
    {
        ui->setupUi(this);
    }
     
    fenetrePrincipal::~fenetrePrincipal()
    {
        delete ui;
    }
     
    void fenetrePrincipal::request()
    {
        manager =  new QNetworkAccessManager(this);
        connect(manager, SIGNAL(finished(QNetworkReply*)),
                this, SLOT(httpFinished(QNetworkReply*)));
     
        requete.setUrl(QUrl("http://fxrates.fr.forexprostools.com/index.php?force_lang=5&pairs_ids=1;3;2;4;7;5;8;6;&header-text-color=%23FFFFFF&curr-name-color=%230059b0&inner-text-color=%23000000&green-text-color=%232A8215&green-background=%23B7F4C2&red-text-color=%23DC0001&red-background=%23FFE2E2&inner-border-color=%23CBCBCB&border-color=%23cbcbcb&bg1=%23F6F6F6&bg2=%23ffffff&bid=show&ask=show&last=show&change=hide&change_in_percents=hide&last_update=show"));
     
        reply = manager->get(request());
    connect(reply, SIGNAL(readyRead()), this, SLOT(httpReadyRead()));
    }
     
    void fenetrePrincipal::downloadFile()
    {
     
        QFileInfo fileInfo(url.path());
        QString fileName = fileInfo.fileName();
        if (fileName.isEmpty())
            fileName = "index.html";
     
        if (QFile::exists(fileName)) {
     
        file = new QFile(fileName);
        if (!file->open(QIODevice::WriteOnly)) {
     
            delete file;
            file = 0;
            return;
        }
     
     
        // schedule the request
        httpRequestAborted = false;
        request();
    }
     
     
     
    void fenetrePrincipal::httpFinished()
    {
        if (httpRequestAborted) {
            if (file) {
                file->close();
                file->remove();
                delete file;
                file = 0;
            }
            reply->deleteLater();
            return;
        }
     
        file->flush();
        file->close();
     
        reply->deleteLater();
        reply = 0;
        delete file;
        file = 0;
     
    }
     
     
    void fenetrePrincipal::httpReadyRead()
    {
        // this slot gets called every time the QNetworkReply has new data.
        // We read all of its new data and write it into the file.
        // That way we use less RAM than when reading it at the finished()
        // signal of the QNetworkReply
        if (file)
            file->write(reply->readAll());
    }


    - main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    #include "fenetreprincipal.h"
    #include <QApplication>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        fenetrePrincipal w;
        w.show();
     
        return a.exec();
    }
    Voici les erreurs :

    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
    IN function 'void fenetrePrincipal::request()':
    invalid use of void expression
         reply = manager->get(request());
     
                                   ^
    no matching function for call to 'fenetrePrincipal::connect(QNetworkReply*&, const char*, fenetrePrincipal*, const char*)'
        connect(reply, SIGNAL(readyRead()), this, SLOT(httpReadyRead()));
                                                                       ^
     
    In function 'void fenetrePrincipal::httpFinished()':
    invalid use of incomplete type 'class QNetworkReply'
             reply->deleteLater();
                  ^
     
    erreur : forward declaration of 'class QNetworkReply'
     class QNetworkReply;
           ^
     
     
    invalid use of incomplete type 'class QNetworkReply'
             file->write(reply->readAll());
                              ^

  2. #2
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    Si tu débutes en C++, il est possible, d'après les erreurs rencontrées, que tu n'aie pas vraiment compris le principe de type de variable et de fonction. La première erreur est générée car tu essaies de passer à la méthode get(), qui attends d'après son prototype (QNetworkReply * QNetworkAccessManager::get(const QNetworkRequest & request)) une variable de type const QNetworkRequest &, alors que ta fonction request() est de type void.

    "invalid use of incomplete type 'class QNetworkReply'": as tu fais un #include <QNetworkReply>? En regardant ton code, la forward declaration de QFile et QNetworkReply n'est pas nécessaire, il suffit de mettre cela dans tes includes.

    Cela devrait résoudre tout ou partie de tes problèmes.
    Cordialement

Discussions similaires

  1. [XL-2007] Récupérer des données d'un site WEB et les collées sur une feuille Excel
    Par clem4491 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2014, 12h19
  2. Récupérer des données sur un site
    Par goku19 dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 14/02/2012, 13h40
  3. automate pour récupérer des données sur un site web
    Par castor75 dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 19h59
  4. Récupérer des données sur un site
    Par frizou11 dans le forum Langage
    Réponses: 1
    Dernier message: 14/02/2008, 14h19
  5. Récupérer des informations sur un site web
    Par JnewB dans le forum Langage
    Réponses: 11
    Dernier message: 08/04/2007, 19h44

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