Pobieranie średniego kursu waluty Qt Creator

0

Dzień doby. Chciałbym w swoim programie dodać informację dotyczącą średniego kursu euro. Program jest opracowywany w Qt Creatorze. Aby pobrać dane z konkretnej strony korzystam z QNetworkAccessManager. Aby wyłuskać z tej paczki danych interesującą mnie wartość korzystam z QDomDocument. Niestety pojawia się błąd przy próbie załadowania dokumentu ("Failed to load doc"). Poniżej kod oraz zawartość pliku .xml

manager = new QNetworkAccessManager(this);
  connect(manager,&QNetworkAccessManager::finished,this,[&](QNetworkReply * reply)
  {
      stringData = reply->readAll();

  });


    manager->get(QNetworkRequest(QUrl("http://api.nbp.pl/api/exchangerates/rates/a/eur/")));



    QFile qFile("temp.xml");
    QTextStream stream(&qFile);
    stream<<stringData;

     QDomDocument doc;
     if(!qFile.open(QIODevice::ReadOnly| QIODevice::Text))
     {
         qDebug()<<"FALSE";

     }
     else
     {
         if(!doc.setContent(&qFile))
         {
             qDebug()<<"Failed to load doc";
         }
         qFile.close();
     }

    QDomElement root = doc.firstChildElement();

    ListElements(root,"rates","mid");


}

void ListElements(QDomElement root, QString tagname, QString attribute)
{
    QDomNodeList items = root.elementsByTagName(tagname);
    qDebug()<<"Total items = "<<items.count();

    for(int i=0; i<items.count();i++)
    {
        QDomNode itemnode = items.at(i);
        if(itemnode.isElement())
        {
            QDomElement itemElem = itemnode.toElement();
            qDebug()<<itemElem.attribute(attribute);
        }
    }
}

temp.xml

{"table":"A","currency":"euro","code":"EUR","rates":[{"no":"097/A/NBP/2022","effectiveDate":"2022-05-20","mid":4.6366}]}

Co powoduje ten błąd? Źle odczytuje dane za pomocą QNetworkAccessManager czy może źle korzystam z QDomDocument? Będę wdzięczny za jakiekolwiek wskazówki.
Pozdrawiam

4
Mikołaj Nawrocki napisał(a):

Co powoduje ten błąd?

Błąd powoduje fakt że to nie jest xml tylko json

4

Ja jak pojawia się problem zaczynam szukać dokumentacji https://api.nbp.pl/
Dodaj parametr aby otrzymac dane XML

0

Dodałem parametr, ale pojawia się ten sam błąd.

1
Mikołaj Nawrocki napisał(a):

Dodałem parametr, ale pojawia się ten sam błąd.

Jak teraz wygląda temp.xml?

1
_13th_Dragon napisał(a):
Mikołaj Nawrocki napisał(a):

Dodałem parametr, ale pojawia się ten sam błąd.

Jak teraz wygląda temp.xml?

Można dostać przez przeglądarkę: http://api.nbp.pl/api/exchangerates/rates/a/eur/

<?xml version="1.0" encoding="UTF-8"?>
<ExchangeRatesSeries xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Table>A</Table><Currency>euro</Currency><Code>EUR</Code><Rates><Rate><No>098/A/NBP/2022</No><EffectiveDate>2022-05-23</EffectiveDate><Mid>4.6171</Mid></Rate></Rates></ExchangeRatesSeries>
0

Dziękuję za odpowiedzi. Poniżej aktualna zawartość pliku temp.xml

<?xml version="1.0" encoding="utf-8"?><ExchangeRatesSeries xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Table>A</Table><Currency>euro</Currency><Code>EUR</Code><Rates><Rate><No>098/A/NBP/2022</No><EffectiveDate>2022-05-23</EffectiveDate><Mid>4.6171</Mid></Rate></Rates></ExchangeRatesSeries>
1

I nadal ten sam błąd?

0

Przy pierwszym uruchomieniu programu tak, za drugim już nie. Zostało tylko wyłuskać wartość z <Mid> :)

EDIT:

Podsumowując, problem został rozwiązany poprzez dodanie parametru ?format=xml. Dziękuję wszystkim za pomoc. Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1