Seite 1 von 1

Dollarkurs

Verfasst: Samstag 20. Oktober 2012, 00:48
von StefanLawl
Hey, ich habe ein ganz simples Programm geschrieben, das im 2-Minuten-Takt den Dollarkurs überprüft (Dollarkurs) und wenn er sich vom vorherigen, von vor 2 Minuten, differenziert, gibt er den neuen Dollarkurs aus. :mrgreen:

Code: Alles auswählen

import urllib, time

xf1='<div class="content"><table><tr><th>'
xf2=' <span>USD</span></th><th class="colorRed">'
url= r"http://www.finanzen.net/devisen/dollarkurs"
usd, usdx=2, 2

while 1:
    opurl = urllib.urlopen(url)
    for line in opurl:
        if line.find(xf1)!=-1:
            t=line.find(xf1)
            t+=len(xf1)
            r=line.find(xf2)
            usd=line[t:r]
    if usd==usdx:
        pass
    else:
        print time.ctime(), "...........", usd, "USD = 1 Euro"
    usdx=usd
    time.sleep(120)
Python 2.7 und Spyder benutzt. :P

Bisher habe ich immer diese Methode benutzt, um bestimmte Sachen zu filtern (str.find()). Einmal habe ich auf split() benutzt, um eine Liste von Informationen zu filtern, aber ich fand diese Methoden bisher nicht so elegant. :roll: Würde mich über Verbesserungsvorschläge, Tipps, etc. sehr freuen. Bin noch nicht so erfahren mit Python :P

Stefan

Re: Dollarkurs

Verfasst: Samstag 20. Oktober 2012, 06:57
von BlackJack
@StefanLawl: Die Namen sind grösstenteils schlecht, da nichtssagend, gewählt.

Ein paar mehr Leerzeichen um Zuweisungen und Operatoren würden die lesbarkeit erhöhen.

Wenn in einem ``if``- oder ``else``-Zweig ausschliesslich ein ``pass`` steht, dann hat man einen überflüssigen Zweig in dem Konstrukt.

Um zu testen ob eine Zeichenkette in einer anderen enthalten ist, wäre der ``in``-Operator lesbarer, also ``if a in b:`` statt ``if b.find(a) != -1:``. Im konkreten Fall würde man das Ergebnis von dem `find()` aber vielleicht besser *vor* dem ``if`` an einen Namen binden, denn falls der Test erfolgreich ist, braucht man das Ergebnis und muss es dann nicht durch erneutes suchen wieder berechnen.

Python hat einen eigenen Typ für Wahrheitswerte. Dessen Literale sollte man auch verwenden, statt 0 oder 1 dafür zu missbrauchen.

HTML würde ich mit einer entsprechenden Bibliothek verarbeiten, das ist in der Regel robuster. `lxml.html` oder `BeautifulSoup` bieten sich da an.

Edit:

Code: Alles auswählen

#!/usr/bin/env python
from time import ctime, sleep
from lxml import html

QUOTE_URL = 'http://www.finanzen.net/devisen/dollarkurs'
SYMBOL = 'USD'
DELAY = 120  # Delay between checks in seconds.


def main():
    old_value = None
    while True:
        document = html.parse(QUOTE_URL)
        value = document.xpath(
            '//div[@class="content_box pricebox"]//th[1]/text()'
        )[0].strip()
        if value != old_value:
            print '%s .......... %s %s = 1 EUR' % (ctime(), SYMBOL, value)
            old_value = value
        sleep(DELAY)


if __name__ == '__main__':
    main()

Re: Dollarkurs

Verfasst: Samstag 20. Oktober 2012, 17:52
von StefanLawl
Viele Dank für die Antwort :) Werde ich alles direkt mal ausbessern :)