8 Eylül 2014 Pazartesi

Python Döviz Kurları App

Merhaba arkadaşlar.

İTÜ özgür yazılım kulübü tarafından düzenlenen "PYTHON" eğitimi finali vermiş bulunmaktadır ve bitirme tezi olarak bizden merkez bankasından döviz kurlarını çekip kendi aralarında dönüşüm yapmamızı istediler. Bende kendi kafama göre düşünüp bir şeyler yaptım. Windows'da bir türlü türkçe karakter sorununu çözemedim ama olduğu kadar işte. Bunun için linuxa geçmeyi düşünüyorum. Python yazarken gerçekten çok kolaylık sağlıyor. Bende yarım günde yazdığım kodları sizinle paylaşayım.(Normalde 1 saatlik iş ama kontroller hakkında yeterince tekrar yapmamışım bunu anladım)



Kodlar:

# -*- coding: cp1254 -*-

import urllib
from Tkinter import *
import datetime
formum=Tk()
Etiket=Label(text="",justify=LEFT)
f = ("arial","10", "normal")
Etiket.configure(font=f)
Etiket.pack()
formum.tk_setPalette("#74ba9a")
formum.wm_title("Forex Borsa Takibi")
formum.resizable(width=FALSE, height=FALSE)
formum.geometry("720x380")
dtceketiket=Label(text="")
dtlenetiket=Label(text="")
isaret=Label(text="->")
dt=Entry( bg="white",text="")
etiketsonuc=Label()
dcektext=""
dlentext=""
Donusturulecek = Listbox(bg="white",selectbackground="orange")
Donusturulen = Listbox(bg="white",selectbackground="orange")
liste={}

def VerOdunu():
    Donusturulecek.delete(0, END)
    f = open(str(datetime.date.today()) +'.log', 'a')
    kaynakcek=urllib.urlopen("http://www.tcmb.gov.tr/kurlar/today.html")
    kodlar=(kaynakcek.read().lower())
    bolum =""
    bolme=kodlar.split("""
""")
    for dongu in range(18):
        Satirim=bolme[dongu+11]
        Satirim = Satirim.replace("   ",",")
        for i in range(100):
            Satirim= Satirim.replace(",,",",")
        Satirim=Satirim.replace(" ","-")
        Satirim=Satirim.replace("--","-")
        baslangic=Satirim.index("-")+1
        baslangic=Satirim.index("-",baslangic)+1
        bitis =Satirim.index(",",baslangic)
        DovizAd=""
        for i in range(bitis-baslangic):
            DovizAd+=Satirim[i+baslangic]
        if("euro" in DovizAd):
            DovizAd="euro\t";
        if("suud" in DovizAd):
           DovizAd="suudi riyali";
        DovizAd=DovizAd.replace("ı","i")
        DovizAd=DovizAd.replace("ç","c")
        bolum +=  DovizAd.replace("-"," ") + "@\t:"
        baslangic=Satirim.index(",",baslangic)+1
        bitis =Satirim.index(",",baslangic)
        DovizAl=""
        for i in range(bitis-baslangic):
            DovizAl+=Satirim[i+baslangic]
        DovizAl=DovizAl.replace("-","")
        bolum += "  @Alis@ :  @"+str(round(float(DovizAl), 4))   +"@ "
        baslangic=Satirim.index(",",baslangic)+1
        bitis=len(Satirim)
        try:
            bitis =Satirim.index(",",baslangic)
        except:
            pass
        DovizSat=""
        for i in range(bitis-baslangic):
            DovizSat+=Satirim[i+baslangic]
       
        DovizSat=DovizSat.replace("-","")
        bolum += "\t|  @Satis@ :  @" +str(round(float(DovizSat), 4))   +"\n"
        liste[DovizAd.replace("-"," ").title()]=[float(DovizAl),float(DovizSat)]
        Donusturulecek.insert(END,DovizAd.replace("-"," ").title())
        Donusturulen.insert(END,DovizAd.replace("-"," ").title())
    f.write(bolum.replace("@ \t|  @Satis@ :  @",",").replace("@\t:  @Alis@ :  @",",").replace("\t",""))
    f.close()
    Etiket["text"]=bolum.replace("€","").replace("@","").replace("ß","").replace("ı","i").replace("ç","c").title().replace("[]","")
    formum.after(30000, VerOdunu)
VerOdunu()

def orta():
    Etiket["text"]=""
    sonlst={}
    deneme=0
    f=open(str(datetime.date.today())+'.log','r')
    lst=f.readlines()
    f.close()
    for i in lst:
        etlist=i.replace("\n","").split(",")
        if(etlist[0] not in sonlst):
            sonlst[str(etlist[0])]=[float(etlist[1]),float(etlist[2])]
        else:
            ortal=sonlst[etlist[0]][0]
            ortsat=sonlst[etlist[0]][1]
            ortal=(ortal+float(etlist[1]))/2
            ortsat=(ortsat+float(etlist[2]))/2
            sonlst[str(etlist[0])]=[ortal,ortsat]
    metin=""
    for i in sonlst:
        metin += str(i)+ "\t:  Alis : " +str(round(sonlst[str(i)][0], 4))+ "\t|  Satis : "+ str(round(sonlst[str(i)][1], 4))+"\n"

    Etiket["text"]=metin.replace("euro","euro\t").title()

def DonusturArtik():
    if((dtlenetiket["text"] not in liste) or (dtceketiket["text"] not in liste)):
        return
    else:
        a = (liste[dtceketiket["text"]][0])
        b = (liste[dtlenetiket["text"]][0])
        try:
            c=float(dt.get())
            etiketsonuc["text"]="Sonuç : "+ str((c/a)*b)
        except:
            return
   
btnort=Button(text="Gün Ortalamasi",command=orta,bg="#ec008c",fg="#ffffff",justify=LEFT)
btnDonustur=Button(text="Dönüstür",command=DonusturArtik,bg="#ec008c",fg="#ffffff",justify=LEFT,width=35)
btnort.pack()
btnDonustur.pack()
dtceketiket.pack()
dtlenetiket.pack()
Donusturulecek.pack()
Donusturulen.pack()
etiketsonuc.pack()
isaret.pack()

def Sectikcek(event):
    dtceketiket["text"]=Donusturulecek.selection_get()
def Sectiklen(event):
    dtlenetiket["text"]=Donusturulen.selection_get()
def placele():
    Etiket.place(y=15, x=15)
    Donusturulecek.place(y=15, x=380)
    Donusturulen.place(y=15, x=560)
    btnort.place(y=320, x=15)
    dtceketiket.place(y=200, x=380)
    dtlenetiket.place(y=200, x=560)
    dt.place(y=225,x=470)
    etiketsonuc.place(y=295,x=400)
    btnDonustur.place(y=255,x=400)
    isaret.place(y=200,x=530)
    Donusturulecek.bind('<<ListboxSelect>>', Sectikcek)
    Donusturulen.bind('<<ListboxSelect>>', Sectiklen)
placele()
mainloop()


2 yorum:

  1. Hocam selam. Yeni python öğrenen biriyim. Sizin gibi 3-5 sene önce paylaşılmış çeşitli kodları pycharma giriyorum. Genel hata, modüllerin yüklenememesi/bulunamaması. Bunun sebebi zaman içerisinde import tanımlarının değişmesi midir? Eğer öyleyse yapılan kodlama sürekli kontrol edilip güncellenmelidir. Doğru mu?
    Emeğiniz için teşekkürler.

    YanıtlaSil
    Yanıtlar
    1. Yanıtını geç gördüm. Kusuruma bakma. Merkez bankası sayfasını değiştirmiş. Ayrıca bu python 2.7 de yazıldı tabi 3.x.x versiyonunda bir çok şey farklı. bambaşka bir çekirdek üzerinden gidiyor resmen. Bu örneği de ders aldığım zamanlarda yapmıştım.


      import urllib.request
      from tkinter import *
      import tkinter as tk
      import datetime
      formum = tk.Tk()


      burasını böyle yaptım düzeldi. Gerisini sen halledersin diye tahmin ediyorum. biraz zaman ayırman gerekiyor sadece. Hataları anlayıp çözüm araman gerekiyor.

      Sil