Heute schreiben wir ein einfaches Python-Skript, mit dem wir den Kurs von beliebigen Kryptowährungen beobachten können. Das Skript wird aller paar Sekunden nach dem aktuellen Kurs schauen. Und sobald der Kurs einen bestimmten Wert übersteigt, werden wir benachrichtigt. Schauen wir uns an, wie’s funktioniert
Unsere Datenquelle
Unsere Daten können wir aus verschiedenen Quellen beziehen. Wir nutzen für unser Skript coinapi.io. Dort kann man sich kostenlos anmelden und hat dann Zugriff auf allerhand nützliche Daten.
Sobald wir uns angemeldet haben, wird uns ein eigener API-Key per E-Mail zugeschickt. Und der ermöglicht es uns, dass Python mit coinapi.io kann.
Eine API-Anfrage stellen
Wir können mit unserem API-Key nun Anfragen an coinapi stellen. Dafür nutzen wir das Modul requests. Das können wir bequem über das Terminal installieren.
pip3 install requestsAlles, was wir über die API von coinapi.io wissen müssen, finden wir in deren Dokumentation. Aus dieser Dokumentation suchen wir nun die passende Anfrage heraus. Ich zeig euch hier mal exemplarisch wie ihr den Bitcoin-Kurs in USD auslesen könnt, das funktioniert aber mit jeder beliebigen Krypowährung genaus so.
In unserem Fall wollen wir also auf die Markt-Daten zugreifen, genauer gesagt auf einen bestimmten Wechselkurs. Deshalb wähle ich aus den Market-Data den Bereich Get spefic rate aus.

Oben rechts kann ich mir den entsprechenden Quellcode in verschiedenen Programmiersprachen anzeigen lassen. Ich schnappe mir den Python-Code und nehme ihn mit in mein Skript.
import requests # das Skript wird importiert
url = 'https://rest.coinapi.io/v1/exchangerate/BTC/USD' # diese URL wird bei der Anfrage aufgerufen
headers = {'X-CoinAPI-Key' : '73034021-THIS-IS-SAMPLE-KEY'} # unser API-Key wird mitgegeben
response = requests.get(url, headers=headers) # wird starten die AnfrageDer API-Key stimmt jetzt natürlich noch nicht. Deshalb füge ich meinen persönlichen Key jetzt in das Skript ein. Den habe ich ja bereits per E-Mail bekommen.
Das sollte jetzt auch schon funktionieren. Um herauszufinden, was uns für Daten zurückgegeben werden, lass ich mir die entsprechende Antwort ausgeben.
print(response.text)Aus der Antwort interessiert uns jetzt eigentlich nur ein Wert, und zwar der aktuelle Kurs. Und genau den lesen wir nun aus.
current_rate = response.json()['rate']
print(current_rate)Und damit haben wir jetzt schon unsere erste Funktion. Ich gebe meiner Funktion einen Namen und rücke den Quellcode ein, sodass er in der Funktion hinterlegt ist. Und ganz am Ende der Funktion lasse ich mir den Wert mit dem Schlüsselwort return zurückgeben.
def get_current_rate():
url = 'https://rest.coinapi.io/v1/exchangerate/BTC/USD'
headers = {'X-CoinAPI-Key' : 'yyyyyyxxxxxxxxyyyyyyyyxxxxx'
response = requests.get(url, headers=headers)
current_rate = response.json()['rate']
return current_rateBitcoin-Kurs tracken
Als nächstes wollen wir den Kurs vergleichen und benachrichtigt werden, wenn der Kurs eine bestimmte Marke übersteigt. Auch das tun wir in einer eigenen Funktion. Den Zielwert, auf den wir warten wollen, hinterlegen wir gleich mal in einer eigenen Variable. Und sobald dieser Zielerwert erreicht wird, wollen wir dann benachrichtigt werden.
goal_rate = 65000def compare_current_rate_with_goal():
current_rate = get_current_rate()
if current_rate >= goal_rate:
notify_user()
print(f'Aktueller Kurs: {round(current_rate)} USD')Eine Benachrichtigung einrichten
Die Benachrichtigung des Nutzers kann jetzt auf ganz viele verschiedene Weisen erfolgen. Ich kann mir z.B. Benachrichtigungen per Mail oder per Telegram schicken lassen. Entsprechende Tutorials dazu verlinke ich euch in der Videobeschreibung. Wir machen das jetzt aber mal etwas einfacher. Und zwar soll einfach ein Soundeffekt abgespielt werden und eine Nachricht im Terminal angezeigt werden.
Zum Abspielen von Sounds können wir das Modul simpleaudio verwenden. Das funktioniert auf allen Plattformen und ist ziemlich einfach zu bedienen.
pip3 install simpleaudioimport simpleaudioWo wir den Soundeffekt jetzt hernehmen, ist im Prinzip egal. Es gibt online ja eine Menge kostenloser Quellen für Soundeffekte, die wir für solche Projekte nutzen können. Oder ihr macht es wie ich und nervt eure Freundin so lange, bis sie mit euch gemeinsam eine kleine Aufnahmesession macht. Wir haben uns dafür einfach ein Glas geschnappt und ein paar Münzen reingeschmissen. Das Ganze habe wir einfach mit meinem China-Handy aufgenommen und schon hatten wir einen hübschen und vor allem copyrightfreien Soundeffekt.
Den aufgenommenen Soundeffekt nehme ich dann und lege ihn in meinem Projektordner ab. Das mache ich idealerweise in einem Unterordner, damit das Projekt übersichtlich bleibt.
Anschließend lege ich die Funktion an, die den Nutzer benachrichtigt und den Soundeffekt abspielt.
def notify_user():
print(f'Der Kurs hat die Zielmarke von {goal_rate} USD erreicht!')
wave_object = simpleaudio.WaveObject.from_wave_file('./sounds/coins.wav')
play_object = wave_object.play()
play_object.wait_done()
exit()
Funktion in Schleife ausführen
Unser Programm hat jetzt an sich alles was es braucht. Als letztes basteln wir jetzt noch eine kleine Schleife, die sich auf die Lauer legt und regelmäßig für uns den Kurs checkt. Dafür importieren wir uns die Funktion time.sleep().
from time import sleepUnd mit der schreiben wir jetzt eine Schleife, die z.B. aller 5 Sekunden den Kurs checkt.
def track_rate():
while True:
print('\nTracke Bitcoin-Kurs...')
compare_current_rate_with_goal()
sleep(5)Wichtig ist hier allerdings zu wissen, dass wir pro Tag 100 API-Anfragen kostenlos stellen können. Deshalb ist es empfehlenswert, in unsere Sleepfunktion eine wesentlich größere Sekundenanzahl anzugeben. Für jetzt ist 5 Sekunden aber erstmal okay – so könnt ihr gut sehen, wie das Programm arbeitet.
Und zu guter Letzt legen wir jetzt noch fest, dass diese Funktion immer aufgerufen werden soll, wenn wir das Skript direkt aufrufen. Dafür nutzen wir die if __name__ == „__main__“ Funktion.
if __name__ == "__main__":
track_rate()Und damit haben wir es geschafft.
✅ Kompletter Quellcode
import requests
import simpleaudio
from time import sleep
goal_rate = 65000
def get_current_rate():
url = 'https://rest.coinapi.io/v1/exchangerate/BTC/USD'
headers = {'X-CoinAPI-Key' : '_____________________________'}
response = requests.get(url, headers=headers)
current_rate = response.json()['rate']
return current_rate
def notify_user():
print(f'Der Kurs hat die Zielmarke von {goal_rate} USD erreicht!')
wave_object = simpleaudio.WaveObject.from_wave_file('./sounds/coins.wav')
play_object = wave_object.play()
play_object.wait_done()
exit()
def compare_current_rate_with_goal():
current_rate = get_current_rate()
if current_rate >= goal_rate:
notify_user()
print(f'Aktueller Kurs: {round(current_rate)} USD')
def track_rate():
while True:
print('\nTracke Bitcoin-Kurs...')
compare_current_rate_with_goal()
sleep(3)
if __name__ == "__main__":
track_rate()