Update 'README.md'
This commit is contained in:
parent
dac797adde
commit
be9382c9a4
100
README.md
100
README.md
@ -1,3 +1,101 @@
|
||||
# Wechselkurse
|
||||
|
||||
Tägliche Abfrage der Wechselkurse bei der europäischen Zentralbank - Speicherung in einer Datenbank
|
||||
Die europäische Zentralbank veröffentlicht jeden Werkag gegen 16.30 Uhr unter der URL http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml die Tageskurse wichtiger Währungen. Diese XML-Datei kann heruntergeladen und ausgewertet werden.
|
||||
|
||||
Das Projekt verwendet für die Datenauswertung die Programmiersprache python. Die Daten werden in einer MySQL-Datenbank gespeichert. Für die Darstellung wird ein Webserver (Apache2) verwendet. Die grafische Anzeige basiert auf https://d3js.org/d3.v3.min.js.
|
||||

|
||||
|
||||
Python-Programm
|
||||
|
||||
Vorbemerkung: Das Pythonprogramm läuft hier auf demselben Server wie MySQL.
|
||||
|
||||
Zuerst müssen die aktuellen Kurse von der Seite http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml abgerufen werden. Außerdem wird das aktuelle Datum ausgelesen.
|
||||
|
||||
import MySQLdb
|
||||
import requests
|
||||
from xml.etree import ElementTree as ET
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Globale Variable
|
||||
# --------------------------------------------------------------------
|
||||
root = 0
|
||||
namespaces = 0
|
||||
datum = 0
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# Kurse abrufen
|
||||
# --------------------------------------------------------------------
|
||||
def getValues():
|
||||
global root
|
||||
global namespaces
|
||||
global datum
|
||||
r = requests.get('http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml', stream=True)
|
||||
tree = ET.parse(r.raw)
|
||||
root = tree.getroot()
|
||||
namespaces = {'ex': 'http://www.ecb.int/vocabulary/2002-08-01/eurofxref'}
|
||||
|
||||
zeit = root.find('.//ex:Cube[@time]', namespaces=namespaces)
|
||||
datum = zeit.attrib['time']
|
||||
print("aktuelles Datum = " + datum)
|
||||
|
||||
Nun kann für Testzwecke der Kurs einer Währung mit der Funktion getKurs(waehrung) ausgelesen und angezeigt werden:
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# liefert zu einer Währung den passenden Kurs
|
||||
# --------------------------------------------------------------------
|
||||
def getKurs(waehrung):
|
||||
match = root.find('.//ex:Cube[@currency="{}"]'.format(waehrung.upper()), namespaces=namespaces)
|
||||
if match is not None:
|
||||
print("Währung=" + waehrung + " Kurs=" + match.attrib['rate'])
|
||||
return match.attrib['rate']
|
||||
else:
|
||||
print("kein Eintrag gefunden")
|
||||
return 0
|
||||
|
||||
Im nächsten Schritt werden alle Kurse in eine Datenbank eingetragen. Dazu muss eine Verbindung zu einer Datenbank hergestellt werden. Die hier verwendete MySQL-Datenbank hat eine Tabelle kurse mit folgender Struktur:
|
||||
|
||||
+----------+--------------+------+-----+---------+----------------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+----------+--------------+------+-----+---------+----------------+
|
||||
| id | int(11) | NO | PRI | NULL | auto_increment |
|
||||
| datum | date | YES | | NULL | |
|
||||
| waehrung | varchar(10) | YES | | NULL | |
|
||||
| kurs | decimal(8,4) | YES | | NULL | |
|
||||
+----------+--------------+------+-----+---------+----------------+
|
||||
|
||||
Verbindung zu Datenbank wechselkurse:
|
||||
|
||||
# open database connection
|
||||
db = MySQLdb.connect("localhost",<username>,<password>,"wechselkurse" )
|
||||
|
||||
Alle Kurse eines Tages in Datenbank eintragen
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# fügt alle Kurse in die Datenbank ein
|
||||
# Vor.: datum gibt es noch nicht
|
||||
# --------------------------------------------------------------------
|
||||
def saveData(datum):
|
||||
for cube in root.findall('.//ex:Cube[@currency]', namespaces=namespaces):
|
||||
insertData(datum, cube.attrib['currency'], cube.attrib['rate'])
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
# fügt einen neuen Datensatz der Tabelle kurse hinzu
|
||||
# wenn kurs=0 ist, dann ist nichts passiert
|
||||
# --------------------------------------------------------------------
|
||||
def insertData(zeit, waehrung, kurs):
|
||||
if kurs == 0:
|
||||
return
|
||||
|
||||
# Prepare SQL query to INSERT a record into the database.
|
||||
sql = "INSERT INTO kurse (datum,waehrung,kurs) \
|
||||
VALUES ('%s', '%s', '%s' )" % (zeit, waehrung, kurs)
|
||||
print(sql)
|
||||
try:
|
||||
cursor = db.cursor()
|
||||
cursor.execute(sql)
|
||||
db.commit()
|
||||
print("Kurs hinzugefügt")
|
||||
except:
|
||||
# Rollback in case there is any error
|
||||
db.rollback()
|
||||
print("ERROR insertData")
|
||||
|
Loading…
Reference in New Issue
Block a user