Pythontr

husonet | Tarih: 10.03.2013

python web servis finnet.com.tr IMKB endeks ornegi

Bu örnek ile IMKB verilerini web servis kullanarak cekebiliriz.

#!/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':'http://finnet.com.tr/ImkbEndeksVerileri'}
# IMKB verilerini almak icin kullanilacak XML
SOAP = """<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ImkbEndeksVerileri xmlns="http://finnet.com.tr/">
<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))


Kolay Gelsin...