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 . :calim2: :pleure:
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:
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:
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:
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:
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());
^ |