From ad4b3be977845e6435d55f41a17b1622661a3345 Mon Sep 17 00:00:00 2001 From: Max Waterman Date: Sun, 7 Feb 2010 18:53:26 +0200 Subject: [PATCH] Basics to get xml from ytv server and parse the xml. --- zouba/qt/httpclient.cpp | 97 ++++++++++++++ zouba/qt/httpclient.h | 27 ++++ zouba/qt/main.cpp | 21 +++ zouba/qt/output.xml | 330 +++++++++++++++++++++++++++++++++++++++++++++++ zouba/qt/qt.pro | 16 +++ zouba/qt/zouba.ui | 97 ++++++++++++++ 6 files changed, 588 insertions(+) create mode 100644 zouba/qt/httpclient.cpp create mode 100644 zouba/qt/httpclient.h create mode 100644 zouba/qt/main.cpp create mode 100644 zouba/qt/output.xml create mode 100644 zouba/qt/qt.pro create mode 100644 zouba/qt/zouba.ui diff --git a/zouba/qt/httpclient.cpp b/zouba/qt/httpclient.cpp new file mode 100644 index 0000000..8a66c95 --- /dev/null +++ b/zouba/qt/httpclient.cpp @@ -0,0 +1,97 @@ +#include "httpclient.h" + +#include "ui_zouba.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + QUrl ytv( "http://api.reittiopas.fi/public-ytv/fi/api/" ); + QString username( "zouba" ); + QString password( "caf9r3ee" ); + + QString homeKey( "taivaanvuohentie%207%2Chelsinki" ); + QString workKey( "it%E4merenkatu%2011%2Chelsinki" ); + + QString workX( "2551042" ); + QString workY( "6672829" ); + QString homeX( "2549183" ); + QString homeY( "6672570" ); +} + +HttpClient::HttpClient( Ui::MainWindow *ui ) : + manager( new QNetworkAccessManager(this) ), + ui( ui ) +{ + connect( manager, SIGNAL( finished(QNetworkReply*) ), this, SLOT( replyFinished(QNetworkReply*) ) ); +} + +HttpClient::~HttpClient() +{ + delete manager; + manager = 0; +} + +void HttpClient::get() +{ + QUrl fullUrl( ytv ); + + QStringList a; + a << workX << workY; + QStringList b; + b << homeX << homeY; + + fullUrl.addQueryItem( "a", a.join(",") ); + fullUrl.addQueryItem( "b", b.join(",") ); + fullUrl.addQueryItem( "user", username ); + fullUrl.addQueryItem( "pass", password ); + + manager->get( QNetworkRequest( fullUrl ) ); +} + +void HttpClient::replyFinished( QNetworkReply * reply ) +{ + QXmlStreamReader xml( reply->readAll() ); + + bool inLine = false; + bool inStop = false; + while ( !xml.atEnd() ) { + xml.readNext(); + //qDebug() << xml.name(); + if ( xml.isStartElement() && xml.name() == "LINE" ) { + QString lineCode( xml.attributes().value("code").toString() ); + + qDebug() << "line code" << lineCode; + ui->BusNoDisplay->setText( lineCode ); + + inLine = true; + } else + if ( inLine && xml.name() == "STOP" ) { + inStop = true; + } else + if ( inLine && inStop && xml.name() == "ARRIVAL" ) { + QString arrivalTime( xml.attributes().value("time").toString() ); + + qDebug() << "arrival time" << arrivalTime; + ui->TimeDisplay->setText( arrivalTime ); + + inLine = false; + } else + if ( xml.isEndElement() && xml.name() == "STOP" ) { + inStop = false; + } else + if ( xml.isEndElement() && xml.name() == "LINE" ) { + inLine = false; + } + } + + if ( xml.hasError() ) { + qDebug() << "xml error"; + } +} diff --git a/zouba/qt/httpclient.h b/zouba/qt/httpclient.h new file mode 100644 index 0000000..28aa9bf --- /dev/null +++ b/zouba/qt/httpclient.h @@ -0,0 +1,27 @@ +#ifndef HTTPCLIENT_H +#define HTTPCLIENT_H + +#include "ui_zouba.h" + +#include +#include +#include + +class HttpClient: public QObject +{ + Q_OBJECT + +public: + HttpClient( Ui::MainWindow *ui ); + ~HttpClient(); + + void get(); + +public Q_SLOTS: + void replyFinished(QNetworkReply*); + +private: + QNetworkAccessManager *manager; + Ui::MainWindow *ui; +}; +#endif // HTTPCLIENT_H diff --git a/zouba/qt/main.cpp b/zouba/qt/main.cpp new file mode 100644 index 0000000..8d3f976 --- /dev/null +++ b/zouba/qt/main.cpp @@ -0,0 +1,21 @@ +#include "httpclient.h" +#include "ui_zouba.h" + +#include + +int main(int argc, char *argv[] ) +{ + QApplication app(argc, argv); + QMainWindow *widget = new QMainWindow; + Ui::MainWindow ui; + ui.setupUi(widget); + + HttpClient httpClient( &ui ); + + httpClient.get(); + + ui.TimeDisplay->setText( "HELLO" ); + + widget->show(); + return app.exec(); +} diff --git a/zouba/qt/output.xml b/zouba/qt/output.xml new file mode 100644 index 0000000..1557ded --- /dev/null +++ b/zouba/qt/output.xml @@ -0,0 +1,330 @@ +" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +" diff --git a/zouba/qt/qt.pro b/zouba/qt/qt.pro new file mode 100644 index 0000000..48c03b7 --- /dev/null +++ b/zouba/qt/qt.pro @@ -0,0 +1,16 @@ +CONFIG += \ + qt \ + +QT += \ + network \ + +TEMPLATE = app +FORMS = zouba.ui + +SOURCES = \ + main.cpp \ + httpclient.cpp \ + +HEADERS += \ + httpclient.h \ + diff --git a/zouba/qt/zouba.ui b/zouba/qt/zouba.ui new file mode 100644 index 0000000..6eaa8b6 --- /dev/null +++ b/zouba/qt/zouba.ui @@ -0,0 +1,97 @@ + + + MainWindow + + + + 0 + 0 + 640 + 480 + + + + ZuoBa + + + + + + 0 + 0 + 230 + 82 + + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + Time + + + + + + + TimeDisplay + + + + + + + BusNo + + + + + + + BusNoDisplay + + + + + + + + + Work + + + + + + + Home + + + + + + + + + + + + + + 0 + 0 + 640 + 25 + + + + + + + + -- 1.7.9.5