pythontr.com
#!/usr/bin/python # -*- coding:utf-8 -*- ################################################################################ # Huseyin OZDEMIR # husonet # 09.03.2013 # Bu class www.finnet.com.tr adresinden imkb verilerini almak icin yazilmistir. ################################################################################ import re import httplib import MySQLdb from datetime import datetime # Host adresi HOST = 'www.finnet.com.tr' # IMKB Endekslerini alma sayfasi PAGE = '/AnadoluHayatFonServis/AHFonServis.asmx' # IMKB Endekslerini almak icin gerekli HEADERS HEADERS = {'Host':'www.finnet.com.tr','Content-Type':'text/xml;charset=utf-8','SOAPAction':'[url]http://finnet.com.tr/ImkbEndeksVerileri[/url]'} # IMKB verilerini almak icin kullanilacak XML SOAP = """<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="[url]http://www.w3.org/2001/XMLSchema-instance[/url]" xmlns:xsd="[url]http://www.w3.org/2001/XMLSchema[/url]" xmlns:soap="[url]http://schemas.xmlsoap.org/soap/envelope/[/url]"> <soap:Body> <ImkbEndeksVerileri xmlns="[url]http://finnet.com.tr/[/url]"> <EndeksKod>#endeks_kodu#</EndeksKod> </ImkbEndeksVerileri> </soap:Body> </soap:Envelope>""" # İstek yapildiktan sonra gelen cevabi parse etmek icin PATTERN = "<Fiyat>(.*?)</Fiyat>.*?" PATTERN+= "<Yon>(.*?)</Yon>.*?" PATTERN+= "<Yuzde>(.*?)</Yuzde>.*?" PATTERN+= "<Yuksek>(.*?)</Yuksek>.*?" PATTERN+= "<Dusuk>(.*?)</Dusuk>.*?" PATTERN+= "<Hacim>(.*?)</Hacim>.*?" PATTERN+= "<IslemMiktari>(.*?)</IslemMiktari>.*?" PATTERN+= "<Ortalama>(.*?)</Ortalama>" PATTERN = re.compile(PATTERN, re.DOTALL) # Debug yapilacak mi? Test ortami icin 1, gercek calisma ortami icin 0 DEBUG = 1 # ----------------------------------------------------------------------------- # IMKB istemci sinifi. class IMKBClient(): # Endeks Kodu endeks_kodu = "" #-------------------------------------------------------------------------- # Nesne ilk olusturuldugunda calisacak bolum. Eger verildiyse ilk degerler # set ediliyor. def __init__(self, sEndeksKodu=None): if sEndeksKodu is not None: self.endeks_kodu = sEndeksKodu # ------------------------------------------------------------------------- # Gelen IMKB verileri parse etmek icin kullanacagimiz kısım. def parseImkbResponse(self, sRes): try: g = PATTERN.search(sRes) if not g: raise NameError('xml dosyası boş yada hatalı (1)') fiyat = g.group(1) yuzde = g.group(2) yuksek = g.group(3) dusuk = g.group(4) hacim = g.group(5) islem_miktari = g.group(6) ortalama = g.group(7) print fiyat print yuzde print yuksek print dusuk print hacim print islem_miktari print ortalama result = True except Exception, err: if DEBUG: raise else: print(str(err)) result = None return result def getImkbEndeks(self): try: # Sunucuya gonderilecek SOAP mesajini hazirla. req = SOAP req = req.replace('#endeks_kodu#', self.endeks_kodu) # Sunucuya baglanip IMKB verilerini almak icin cnn = httplib.HTTPConnection(HOST) cnn.request('POST', PAGE, req, HEADERS) res = cnn.getresponse().read() cnn.close() # Cevap sorunluysa islem basarisiz olmus demektir. if self.parseImkbResponse(res) is None: raise NameError('xml dosyası boş yada hatalı (2)') else: result = True except Exception, err: if DEBUG: raise else: print(str(err)) result = res return result #------------------------------------------------------------------------------- # ana proses if __name__ == '__main__': try: imkb = IMKBClient('xu100') print imkb.getImkbEndeks() except Exception, err: print(str(err))
Yorumlar