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

Qt Discussion :

Traitement des données XML sur serveur distant.


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut Traitement des données XML sur serveur distant.
    Bonjour à tous,

    Voilà ce que j'ai fait avec jmartin pour le traitement des données XML.

    Mais ça ne fonctionne toujours pas après plusieurs recherche sur la doc et sur le forum j'ai rien trouvé de plus...

    Je voudrais faire en sorte que mon programme envoie une requête par la méthode post avec les infos de connexion au site, une fois cette étape faite sur le script on va recevoir des informations XML, troisième étapes traiter c'est information tel que :

    - Récupérer toutes les balises entre les balises <utilisateur> et </utilisateur> (afin d'éviter si je rajoute une infos xml dans mon script de devoir faire une mise à jours du programme juste pour une balise...)
    - Afficher les information dans un QMessageBox.

    j'ai pas très très bien fait la requête post à mon avis parce que j'ai aucun moyen pour l'instant de savoir si je suis connecté au serveur ou si je ne le suis pas.

    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
    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
    #include <QtGui>
    #include <QtNetwork>
    #include <QHttp>
    #include <QtXml>
    #include <QtDebug>
    #include "tool.h"
     
    void Tool::on_pushButton_connection_clicked()
    {
        http = new QHttp(this); // variable de la class Http
     
        connect(&http, SIGNAL(done(bool)), this, SLOT(affiche(bool)));
        connect(&http, SIGNAL(requestFinished(int, bool)), this, SLOT(fin(int, bool)));
     
        QHttpRequestHeader header("POST", "/page.php");
        header.setValue("Host", "www.site.fr");
     
        http->setHost("www.site.fr");
        header.setValue( "User-Agent", "User Agent");
        header.setContentType("application/x-www-form-urlencoded");
     
        QString PostVariable = "username=";
        PostVariable+=uiConfig.lineEdit_2->text();
        PostVariable+="&password=";
        PostVariable+=QCryptographicHash::hash(uiConfig.lineEdit->text().toUtf8(),QCryptographicHash::Sha1).toHex();
        PostVariable+=uiConfig.lineEdit->text();
     
        http->request(header,PostVariable.toUtf8());
    }
     
    void Tool::fin(int _id, bool _error)
    {
        if(_error)
            QMessageBox::information(0, "Fin", QString().setNum(http->error()));
    }
     
    void Tool::affiche(bool)
    {
        QDomDocument infos;
        QString errorStr;
        int errorLine;
        int errorColumn;
        QByteArray content = http->readAll();
        if (!infos.setContent(content, true, &errorStr, &errorLine, &errorColumn))
        {
            qDebug() << "Error parsing session file";
            qDebug() << content;  return;
        }
     
        QDomElement element = infos.documentElement();
        for(QDomNode n = element.firstChild();
        !n.isNull();
        n = n.nextSibling())
        {
            QDomElement e = n.toElement();
            qDebug() << e.tagName() << e.text();
            QMessageBox::information(0, tr("Programme"), e.tagName());
        }
    }
    Mais j'ai rien du tout je n'arrive pas à savoir si ça fonctionne ou si ça ne fonctionne pas...

  2. #2
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    Tes connexions de slots/signaux semblent inexactes : tu dois connecter http et non &http.

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    /!\ à chaque appel de on_pushButton_connection_clicked()
    tu créé un nouveau QHttp. Et tu ne semble le détruire nulle part.

    Pourquoi utiliser un pointeur ici?

    comme seul ta class l'utilise autant éviter de compliquer les choses

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    J'ai modifié juste &http en http et ça ma affiché le contenu de la variable !

    Le seul souci maintenant que j'ai c'est surement le plus important...

    Avait vous une solution pour faire en sorte d'afficher dans un message QMessageBox ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Une nouvelle news vient d\'être postée "{NEWS_TITRE}" de {NEWS_AUTEUR}.\nCliquez ici pour la lire !
    Quand on clique sur "ici" on arrive sur la page internet.


    Car je récupère sur mon script PHP les informations comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <news>
        <news_auteur>bertrand</news_auteur>
        <news_titre>ohh une nouvelle planche viens d'arriver !!</news_titre>
        <news_lien>http://www.site.fr/forum/45613</news_lien>
    </news>
    Je n'ai pas encore trouvé le moyen de faire ceci, gros problème de logique en ce moment...
    Sachant que je voudrais que le programme n'est pas les nom de variable comme ça je pourrais faire en sorte de rajouter des nouvelles balises quand je veux sans devoir faire une mise à jour du programme mais je pense que ça va devenir impossible...

    PS : Quand j'ai un message je reçoit toutes les balise news_auteur, news_titre, news_lien a la suite. Je ne trouve pas le moyen de les afficher cas un certain endroit.


    Aussi je voudrais savoir, la requête devrait se faire toute les x minutes avec un Qtimer donc je pensais faire un Qtimer de la classe on_pushButton_connection_clicked() mais les information utilisateur soit pseudo et mot de passe je ne les aurait plus ?

    Donc qu'elle est la meilleur façon de les conserver ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Après avoir essayé de réaliser cette fonction, je me suis aperçu qu'il y avait un problème de logique...

    Enfaite je récupère tout les noms de balise exemple "news" qui va contenir plusieurs balises "news_auteur", "news_lien", "news_titre" etc... donc jusque là ça va.

    Le problème c'est que je suis obligé enfaite de définir dans le code le nom de balise vu que je voudrais faire ça au final :

    Exemple bidon qui ne fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    QPopup *t = new QPopup(200,200,1);
    t->Show(QString("Programme"), QString("news_auteur" a écrit : + "news_titre" + clic ici pour aller voir "news_lien"),5000);
    Donc pour faire ça il faut que je récupère aussi les petites balises XML contenu dans chaque grosse balise.

    Donc jusque là je n'ai pas besoins de mettre un nom de balise dans le code...
    Mais par contre quand je vais vouloir afficher résultat par résultat je vais devoir justement définir le nom des balises !

    N'y a t-il pas une méthode, astuce qui me permettrais de ne pas définir les noms des balises XML dans le programme ?

  6. #6
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Non. Si tu veux lire quelque chose, ton programme doit savoir d'où le tirer.

Discussions similaires

  1. [XL-2007] macro pour recupérer des données xml sur excel
    Par gibba88 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/05/2012, 21h03
  2. Rapatriement des données sur serveur distant
    Par weebo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/09/2011, 11h29
  3. [DOM] parsing de xml et traitement des données
    Par vincent62149 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 04/03/2008, 10h06
  4. Traitement des données formatées en XML
    Par cedricnguessi dans le forum Autres éditeurs
    Réponses: 14
    Dernier message: 10/07/2006, 13h21
  5. [VB.NET] Connexion à une base de données sur serveur distant
    Par boulete dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/04/2006, 14h11

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