tcmb.gov.tr'den dövizleri çekmek

Re: tcmb.gov.tr'den dövizleri çekmek

#2106 İleti | Hamurcu | 29 May 2017, 14:05

Merhaba

Şu an yurtdışındayım ve maalesef bilgisayarım yanımda değil.

İlk fırsatta kontrıl ederim.

[ Post made via Android ] Resim
Kullanıcı avatarı
Hamurcu
 
İleti: 137
Kayıt: 06 Ağu 2012, 00:14
Konum: İstanbul
İşletim Sisteminiz: Windows 10
LibreOffice Sürümü: 6.x

Re: tcmb.gov.tr'den dövizleri çekmek

#2107 İleti | mehmethanifi | 29 May 2017, 14:29

Tamam hocam teşekkürler.
mehmethanifi
 
İleti: 55
Kayıt: 08 May 2013, 12:08
İşletim Sisteminiz: win7
LibreOffice Sürümü: 4.0.2

Re: tcmb.gov.tr'den dövizleri çekmek

#2114 İleti | Hamurcu | 05 Haz 2017, 09:06

Merhaba,

DovizKuruAl fonksiyonunun üzerinde Sub Main olmayacak ve en sonunda da End Sub olmayacak.

Gönderdiğin ekran görüntüsünde var görünüyor.
Kullanıcı avatarı
Hamurcu
 
İleti: 137
Kayıt: 06 Ağu 2012, 00:14
Konum: İstanbul
İşletim Sisteminiz: Windows 10
LibreOffice Sürümü: 6.x

Re: tcmb.gov.tr'den dövizleri çekmek

#2115 İleti | mehmethanifi | 05 Haz 2017, 09:32

Hocam kaldırdım. Son hali aşağıda ki gibidir.

Function DovizKuruAl(Tarih As Date, ParaBirimi As String, KurTuru As Byte) As Currency

On Error Goto Hata

Dim oleServisi As Object
Dim DovizAlis,DovizSatis, EfektifSatis, EfektifAlis As Currency
Dim MerkezBankasi, HedefKurAdi As String
Dim Sonuc As Currency
Dim BaslangicTarihi As Date
Dim BitisTarihi As Date
Dim HedefKurNo As Byte
Dim Sayfa As Object

BaslangicTarihi = "16/04/1996"

BitisTarihi = Date

ParaBirimi = UCase(ParaBirimi)

Sonuc=0.0

If (Tarih < BaslangicTarihi) Then
Beep
MsgBox "=DOVIZKURUNUAL( Tarih ; HedefParaBirimi ; KurTuru )" & Chr(10) & Chr(13) & +_
"16/04/1996 Tarihinden önceki T.C. Merkez Bankası döviz kurları" & Chr(10) & +_
"web sitesine girilmemiştir. Lütfen uygun bir tarih giriniz."
Goto Hata
End If

If (Tarih > BitisTarihi) Then
Beep
MsgBox "=DOVIZKURUNUAL( Tarih ; HedefParaBirimi ; KurTuru )" & Chr(10) & Chr(13) & +_
"Girilen Tarih için günlük kur kaydı bulunamadı. Lütfen uygun bir tarih giriniz."
Goto Hata
End If

If ((ParaBirimi <> "USD") And (ParaBirimi <> "AUD") And (ParaBirimi <> "DKK") And +_
(ParaBirimi <> "EUR") And (ParaBirimi <> "GBP") And (ParaBirimi <> "CHF") And +_
(ParaBirimi <> "SEK") And (ParaBirimi <> "CAD") And (ParaBirimi <> "KWD") And +_
(ParaBirimi <> "NOK") And (ParaBirimi <> "SAR") And (ParaBirimi <> "JPY") And +_
(ParaBirimi <> "BGN") And (ParaBirimi <> "PKR") And (ParaBirimi <> "CNY") And +_
(ParaBirimi <> "RUB") And (ParaBirimi <> "RON") And (ParaBirimi <> "IRR")) Then
Beep
MsgBox "=DOVIZKURUNUAL( Tarih ; HedefParaBirimi ; KurTuru )" & Chr(10) & Chr(13) & +_
"Hedef Para Birimi Tanınmıyor ve/veya" & Chr(10) & +_
"T.C. Merkez Bankasında işlem görmüyor." & Chr(10) & +_
"Girilebilecek Para Birimleri aşağıda listelenmiştir." & Chr(10) & +_
"USD, AUD, DKK, EUR, GBP, CHF, SEK, CAD, KWD," & Chr(10) & +_
"NOK, SAR, JPY, BGN, RON, RUB, IRR, CNY, PKR"
Goto Hata
End If

If ((KurTuru < 1) Or (KurTuru > 4)) Then
Beep
MsgBox "=DOVIZKURUNUAL( Tarih ; HedefParaBirimi ; KurTuru )" & Chr(10) & Chr(13) & +_
"Dönüşüm için gerekli olan KUR TÜRÜ bilgisi tanımsız." & Chr(10) & +_
"1:Döviz Alış, 2:Döviz Satış, 3:Efektif Alış, 4:Efektif Satış" & Chr(10) & +_
"Lütfen KUR TÜRÜ parametresini doğru giriniz."
Goto Hata
End If

oleServisi = createUnoService( "com.sun.star.sheet.FunctionAccess" )

If (Tarih=Date) Then
MerkezBankasi = "http://www.tcmb.gov.tr/kurlar/today.xml"
Else
MerkezBankasi = "http://www.tcmb.gov.tr/kurlar/" & Year(Tarih) & Format(Month(Tarih),"0#") & "/" & +_
Format(Day(Tarih),"0#") & Format(Month(Tarih),"0#") & Year(Tarih) & ".xml"
End If

With oleServisi

XML_String = .callFunction("WEBSERVICE",array(MerkezBankasi))

DovizAlis = .callFunction("FILTERXML", array(XML_String, "number(/Tarih_Date/Currency[@CurrencyCode='"+ParaBirimi+"']/ForexBuying)"))
DovizSatis = .callFunction("FILTERXML", array(XML_String, "number(/Tarih_Date/Currency[@CurrencyCode='"+ParaBirimi+"']/ForexSelling)"))
EfektifAlis = .callFunction("FILTERXML", array(XML_String, "number(/Tarih_Date/Currency[@CurrencyCode='"+ParaBirimi+"']/BanknoteBuying)"))
EfektifSatis = .callFunction("FILTERXML", array(XML_String, "number(/Tarih_Date/Currency[@CurrencyCode='"+ParaBirimi+"']/BanknoteSelling)"))

Select Case KurTuru
Case 1
Sonuc=DovizAlis
Case 2
Sonuc=DovizSatis
Case 3
Sonuc=EfektifAlis
Case 4
Sonuc=EfektifSatis
End Select

DovizKuruAl() = Sonuc

Exit Function

End With

Hata:

DovizKuruAl() = 0.0

End Function

Yukarıdaki komutu çalıştırdığım zaman karşılaştığım hata..
Resim
mehmethanifi
 
İleti: 55
Kayıt: 08 May 2013, 12:08
İşletim Sisteminiz: win7
LibreOffice Sürümü: 4.0.2

Re: tcmb.gov.tr'den dövizleri çekmek

#2116 İleti | Hamurcu | 05 Haz 2017, 12:07

Merhaba,

Gönderdiğim örnek dosya hiç problemsiz çalışıyor.

Sanırım sen makroyu yanlış modüle ve/veya aynı anda 2 farklı modüle ekliyorsun.

soffice.bin_2017-06-05_12-02-30.png
makronunyeri
soffice.bin_2017-06-05_12-02-30.png (49 KiB) 603 defa görüntülendi


Bu makro sadece içerisinde kayıtlı olduğu dosya ile çalışacak ise yukarıdaki ekran görüntüsünde olduğu gibi yerleştirlmeli.

Yok eğer LibreOffice içerisinde olsun ve dosya ne olursa olsun çalışsın diyorsanız o zaman sizin yaptığınız gibi Makrolarım içerisine kayıt edilmeli. Ancak bu durumda açık duran dosya içerisinde aynı isimde başka bir makro olmamalı.

Şimdi sizden ricam Makrolarım kısmındaki kodların tamamını silin ve sadece benim bir kaç mesaj önce gönderdiğim örnek dosyayı açıp deneyin.
Kullanıcı avatarı
Hamurcu
 
İleti: 137
Kayıt: 06 Ağu 2012, 00:14
Konum: İstanbul
İşletim Sisteminiz: Windows 10
LibreOffice Sürümü: 6.x

Re: tcmb.gov.tr'den dövizleri çekmek

#2122 İleti | Hamurcu | 23 Haz 2017, 10:09

Merhaba,

T.C. Merkez Bankasından Döviz Kur'unu alma makrosunu LibreOffice Türkiye Wiki'sine ekledim.

İncelemk isteyen arkdaşlar için bağlantı aşağıdadır.

T.C. Merkez Bankasından Günlük Döviz Kurlarını Almak
Kullanıcı avatarı
Hamurcu
 
İleti: 137
Kayıt: 06 Ağu 2012, 00:14
Konum: İstanbul
İşletim Sisteminiz: Windows 10
LibreOffice Sürümü: 6.x

Re: tcmb.gov.tr'den dövizleri çekmek

#2334 İleti | Hamurcu | 12 Haz 2018, 17:50

Merhaba,

Oldukça sık olarak Basic macroları ile değil de LibreOffice Calc'ın kendi dahili fonksiyonları ile T.C. Merkez Bankasından ilgili tarihe ait döviz kurlarının nasıl alınacağı soruluyor.

Bunu aşağıdaki şekilde yapabilirsiniz.

Kod: Tümünü seç
= SAYIDEĞERİ( FILTERXML( WEBHİZMETİ("MerkezBankasiWebAdresi.xml"); "//Tarih_Date/Currency[1]/ForexBuying") ; ".")


Burada sırasıyla;

SAYIDEĞERİ : Web sayfasından TEXT olarak alınacak değeri sayıya çevirmek için kullanılıyor
FILTERXML : Bir xml sayfasından istenilen kriterlere uygun veriyi süzmek için kullanılıyor
WEBHİZMETİ : Bir web sayfasının HTML/XML kodlarını TEXT olarak verir

T.C. Merkez Bankası günlük döviz kularını bir XML sayfasında yayınlamaktadır.

İçinde bulunduğumuz gün'e ait XML sayfasının adresi şöyledir;

http://www.tcmb.gov.tr/kurlar/today.xml

Ancak istenilen tarihe ait döviz kurlarının yayınlandığı sayfa adresi şu formattadır;

http://www.tcmb.gov.tr/kurlar/YYYYAA/GGAAYYYY.xml

Örneğin 5/6/2018 tarihine ait döviz kurları için;
http://www.tcmb.gov.tr/kurlar/201806/05062018.xml


Yukarıdaki WEBHİZMETİ("MerkezBankasıWebAdresi.xml") kısmına bu formatta adres yazmanız gerekmektedir.

Bu formatı sağlamak için Calc hücrelerindeki tarihi Gün/Ay/Yıl olarak parçalamak ve Gün ile Ay'ı "00" formatına çevirmek gerekir.

Bu sebeple METNEÇEVİR( Sayı; Format) fonksiyonunu kullanıyoruz.

Sonuç olarak örneğimiz şöyle olsun;

A1 hücresinde ilgili tarih olsun (5/6/2018 gibi)
B1 hücresine aşağıdaki şekilde fonksiyonumuzu girdiğimizde bize ilgili tarihe ait USD alış kur'unu verecektir.

Kod: Tümünü seç
= SAYIDEĞERİ( FILTERXML( WEBHİZMETİ( "http://www.tcmb.gov.tr/kurlar/" & YIL(A1) & METNEÇEVİR( AY(A1) ; "00") & "/" & METNEÇEVİR( GÜN(A1) ; "00") & METNEÇEVİR( AY(A1) ; "00") & YIL(A1) & ".xml"); "//Tarih_Date/Currency[1]/ForexBuying");".")


T.C. Merkez Bankasının Web Sayfasındaki Döviz Kurları XML dosyasından istenilen bilgileri süzebilmek için aşağıdaki listeyi kullanmalısınız.

"//Tarih_Date/Currency[1]/ForexBuying" içerisinde Currency[Kod] istenilen PARA BİRİMİ'Nİ ifade eder.

Kod PARA BİRİMİ
-----------------------------------
1 US DOLLAR
2 AUSTRALIAN DOLLAR
3 DANISH KRONE
4 EURO
5 POUND STERLING
6 SWISS FRANK
7 SWEDISH KRONA
8 CANADIAN DOLLAR
9 KUWAITI DINAR
10 NORWEGIAN KRONE
11 SAUDI RIYAL
12 JAPENESE YEN
13 BULGARIAN LEV
14 NEW LEU
15 RUSSIAN ROUBLE
16 IRANIAN RIAL
17 CHINESE RENMINBI
18 PAKISTANI RUPEE

Ayrıca;

"//Tarih_Date/Currency[1]/ForexBuying" içerisinde ForexBuying istenilen KUR cinsini ifade eder.

Döviz Alış için ForexBuying
Döviz Satış İçin ForexSelling
Efektif Alış için BanknoteBuying
Efektif Satış İçin BanknoteSelling

ifadeleri kullanılmalıdır.
Kullanıcı avatarı
Hamurcu
 
İleti: 137
Kayıt: 06 Ağu 2012, 00:14
Konum: İstanbul
İşletim Sisteminiz: Windows 10
LibreOffice Sürümü: 6.x

Önceki

Calc - Hesap Tablosu

Kimler çevrimiçi

Kayıtlı kullanıcılar: Google [Bot], Yandex [Bot]

cron