Die europäische Zentralbank gibt täglich die Umrechnungskurse diverser Währungen als XML-Datei heraus.
Diese Datei kann man mit AutoIt abfragen und die Daten daraus in ein Array packen, sodass man damit im eigenen Script Umrechnungen vornehmen kann.
Ich habe dazu mal eine Funktion geschrieben:
AutoIt
#include <Array.au3>
Global $aCurr = _GetCurrencyRates()
_ArrayDisplay($aCurr)
Func _GetCurrencyRates()
Local $dData = InetRead('https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml', 1)
If @error Then Return
Local $aTmp = StringRegExp(BinaryToString($dData, 4), "<Cube currency='(.+?)' rate='(.+?)'", 3)
Local $aOut[Ceiling(UBound($aTmp) / 2)]
For $i = 0 To UBound($aOut) - 1
$aOut[$i] = $aTmp[$i * 2] & ' ' & $aTmp[$i * 2 + 1]
Next
_ArraySort($aOut)
Return $aOut
EndFunc
Alles anzeigen
Edit 09.01.2023 :
Mit dem neuen Map-Datentyp ist die Umrechnung zwischen den Währungen noch einfacher. Ich habe mal eine Funktion dazu geschrieben:
AutoIt
; die Waehrungskurse werden "nur" taeglich aktualisiert, es reicht also die Map einmalig bei Programmstart zu erstellen.
Global $g_mCurr = _GetCurrencyRates()
; Beispiele fuer Umrechnungen in verschiedene Waehrungen:
ConsoleWrite(_ExchangeCurrency($g_mCurr, 10, 'EUR', 'DKK', 2, True) & @CRLF)
ConsoleWrite(_ExchangeCurrency($g_mCurr, 23, 'GBP', 'AUD', 2, True) & @CRLF)
ConsoleWrite(_ExchangeCurrency($g_mCurr, 978, 'NOK', 'CHF', 2, True) & @CRLF)
; ============================================================================================================
; Name...........: _ExchangeCurrency
; Description....: Rechnet einen Geldbetrag von einer Waehrung in eine Andere um
; Syntax.........: _ExchangeCurrency($mCurr, $fMoney, $sFrom, $sTo, $iDecimalPlaces[, $bExt])
; Parameters.....: $mCurr = Eine Map mit den Waehrungskursen (Rueckgabe von "_GetCurrencyRates")
; $fMoney = der Geldbetrag, der umgerechnet werden soll
; $sFrom = 3stelliger Waehrungscode der Ausgangswaehrung
; $sTo = 3stelliger Waehrungscode der zu berechnenden Waehrung
; $iDecimalPlaces = die Anzahl der Stellen hinter dem Komma (wird gerundet)
; $bExt = soll der 3stellige Waehrungscode hinter den Waehrungsbetrag gesetzt werden
; Notes..........: $sFrom und $sTo duerfen folgende Waehrungscodes enthalten:
; AUD,BGN,BRL,CAD,CHF,CNY,CZK,DKK,EUR,GBP,HKD,HUF,IDR,ILS,INR,ISK,
; JPY,KRW,MXN,MYR,NOK,NZD,PHP,PLN,RON,SEK,SGD,THB,TRY,USD,ZAR
; Return values..: bei Erfolg = der berechnete Waehrungsbetrag
; im Fehlerfall = 0 und @error =
; 1: $mCurr ist kein Map-Datentyp
; 2: $sFrom oder $sTo sind nicht in der Map vorhanden (fehlerhafter Waehrungscode)
; Author.........: Oscar (www.autoit.de)
; ============================================================================================================
Func _ExchangeCurrency(ByRef $mCurr, $fMoney, $sFrom, $sTo, $iDecimalPlaces, $bExt = False)
If Not IsMap($mCurr) Then Return SetError(1, 0, 0)
If Not MapExists($mCurr, $sFrom) Or Not MapExists($mCurr, $sTo) Then Return SetError(2, 0, 0)
Return Round($fMoney / $mCurr[$sFrom] * $mCurr[$sTo], $iDecimalPlaces) & ($bExt ? ' ' & $sTo : '')
EndFunc
; ============================================================================================================
; Name...........: _GetCurrencyRates
; Description....: liest die tagesaktuellen Waehrungskurse von der EZB und erstellt daraus eine Map
; Syntax.........: _GetCurrencyRates()
; Parameters.....: keine
; Return values..: bei Erfolg = ein Map-Datentyp mit den Waehrungskursen
; im Fehlerfall = ein Leerstring und @error =
; 1: die Seite von der EZB konnte nicht geladen werden
; Author.........: Oscar (www.autoit.de)
; ============================================================================================================
Func _GetCurrencyRates()
Local $dData = InetRead('https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml', 1)
If @error Then Return SetError(1, 0, '')
Local $aTmp = StringRegExp(BinaryToString($dData, 4), "<Cube currency='(.+?)' rate='(.+?)'", 3), $mOut[]
$mOut['EUR'] = 1
For $i = 0 To UBound($aTmp) - 1 Step 2
$mOut[$aTmp[$i]] = Number($aTmp[$i + 1])
Next
Return $mOut
EndFunc
Alles anzeigen