Merkez bankasından günlük döviz kurlarını indirmek?

Merhabalar,

Malumunuz üzere Merkez bankası bir XML dosya yayınlayarak tüm döviz kurlarını ve oranları veriyor. C# ve PHP ile bunu yapan bir sürü örnek var ama bana Qt/C++ ile bir örneği gerekti ve bulamadım. Bari ben yazayım dedim. 🙂

Qt ile öncelikle bir form oluşturuyoruz. Form üzerine bir düğme koyarak bu düğmeye tıklandığında http://www.tcmb.gov.tr/kurlar/today.xml adresinden XML dosyayı indirip istediğimiz kurların çekilmesini sağlayacağız. Bana sadece USD ve EUR gerektiği için ben bunları sorguladım. Elbette size tamamı gerekecekse sizlerin kısıtı kaldırmanız gerekir ki çok da zorlanacağınızı sanmıyorum.

 

void DovizKurlari::on_pBKurOku_clicked()
{
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(fileIsReady(QNetworkReply*)) );
    manager->get(QNetworkRequest(QUrl("http://www.tcmb.gov.tr/kurlar/today.xml")));

}

Burada öncelikle dosyayı indireceğiz. İndirmek için de yukarıdaki kodu kullanıyoruz. Ama öncelikle pro dosyasına;

 

QT += network xml

eklemeyi unutmayın. Daha sonra da .h dosyasına gerekli kütüphaneleri ekliyoruz.

 

#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>

Yukarıdaki kodda dosya indikten sonra tetiklenecek fileIsReady fonksiyonu da aşağıda:

void DovizKurlari::fileIsReady(QNetworkReply *reply)
{
    QFile file;
    file.setFileName(QDir::tempPath() + "/today.xml");


    if(file.open(QIODevice::ReadWrite))
    {
        file.write(reply->readAll());
        file.close();
    } else
    {
        QMessageBox::critical(this,
                              "XML Okuma Hatası!!",
                              "XML Dosya açılamadı!",
                              QMessageBox::Ok);
        return;
    }

    reply->deleteLater();

    parseXML();


}

Ne yazık ki win üzerinde kullanıyoruz programı. Malum fabrika şartları. Dosyayı temp dizini kaydediyorum. Daha sora aşağıdaki fonksiyon ile de diske yazılan bu dosyayı parçalıyoruz:

void DovizKurlari::parseXML()
{
    /* We'll parse the example.xml */
       QFile* file = new QFile(QDir::tempPath() + "/today.xml");
       /* If we can't open it, let's show an error message. */
       if (!file->open(QIODevice::ReadOnly | QIODevice::Text))
       {
           QMessageBox::critical(this,
                                 "QXSRExample::parseXML",
                                 "Couldn't open example.xml",
                                 QMessageBox::Ok);
           return;
       }

       QXmlStreamReader reader(file);

       if (reader.readNextStartElement()) {
               if (reader.name() == "Tarih_Date"){
                   while(reader.readNextStartElement()){
                       if(reader.name() == "Currency"){

                           foreach(const QXmlStreamAttribute &attr, reader.attributes())
                           {
                               if (attr.name().toString() == "Kod")
                               {
                                   if(attr.value().toString()=="USD" || attr.value().toString()=="EUR")

                                 {


                                                       qDebug()<<"Kur: "<<attr.value().toString();

                                                       while(reader.readNextStartElement()){
                                                           if(reader.name() == "ForexBuying")
                                                           {

                                                               qDebug()<<"Oran:"<<reader.readElementText();
                                                           }
                                                           else
                                                               reader.skipCurrentElement();
                                                       } //while


                                   }else reader.skipCurrentElement();

                               }
                           }


                           
                       }
                       else
                           reader.skipCurrentElement();
                   }
               }
               else
                   reader.raiseError("Hatalı dosya");
       }


       qDebug()<<"Bitti...";


}

Dikkat ederseniz ben sadece değerleri debug ekranına yazdırdım. Elbette bundan sonra siz dilediğiniz şeyi yapabilirsiniz. Ben PostgreSQL veritabanına Kurlar isimli bir tablo oluşturup bu değerleri oraya yazacağım. Sizler kendi ihtiyacınıza göre düzenlersiniz.
Umarım faydası olur… 🙂

Qt ile ilgili faydalandığım sayfalar aşağıda:

https://www.walletfox.com/course/qxmlstreamreaderexample.php

http://qt.shoutwiki.com/wiki/QXmlStreamReader_to_parse_XML_in_Qt

Kolay gelsin,
Mucip:)

Bu yazı Açık Kaynak kategorisine gönderilmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kodu girin... *