makaleler / Python Programlama / python web servis finnet.com.tr IMKB endeks ornegi

python web servis finnet.com.tr IMKB endeks ornegi

10.03.2013 00:29:44

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':'[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))


Kolay Gelsin...
yazar husonet

Yorumlar

Bu içerik için sizde yorum yapabilirsiniz!
anasayfa | makaleler | haberler | dosyalar | linkler | hakkımızda