XingAPI 이용 실시간 뉴스 제목 받기

XingAPI를 이용해서 이베스트투자 증권사에서 제공하는 실시간 뉴스의 제목을 받는 방법을 설명한다. ‘소문에 사고 뉴스에 팔아라’라는 주식 격언이 있지만 본인은 뉴스 정보가 매수,매도 모두에 활용 될 수 있다고 생각한다. 어떤 뉴스에서 사고 팔아야 할지를 알기 위해선 먼저 뉴스 제목 데이터가 필요하다. XingAPI의 실시간 데이터 받기를 사용하여 뉴스 데이터 받는 법을 살펴보자.

목차

  1. 준비
  2. ‘NWS’ 실시간 데이터 획득 코드 구현
  3. 결론

준비

본 글의 코드를 작성하고 수행하기 위해서는 XingAPI와 Python3 32bit 등의 환경설정이 필요하다. 아래의 관련 글을 참조하여 설정을 미리 완료하자.

  1. XingAPI 이용 주식 프로그램 위한 윈도우10 python 환경 설정
  2. 아나콘다 다중 환경 설정(32bit, 64bit)
  3. Xing-Plus 소개

NWS 실시간 데이터 획득 코드 구현

NWS 실시간 데이터 획득하는 코드의 구현을 설명한다. XingAPI DevCenter를 보면 뉴스 데이터를 받기 위한 코드가 ‘NWS’ 임을 확인할 수 있다.

DevCenter NWS 실시간 뉴스 제목 패킷

살펴보면 ‘nwcode’라는 입력이 필요한 것을 알 수 있다. 여기에는 ‘NWS001’을 입력하면 된다. 전체 코드의 구현은 다음과 같이 간단하다.

from xing.xasession import Session
import time
import pythoncom
from xing.logger import LoggerSetting
from xing.logger import Logger
from xing.xareal import RealManager
LoggerSetting.FILE = "test_xareal.log"
log = Logger(__name__)
from datetime import date
import threading

# 처음 시작 시 계정과 비밀번호를 입력하면 본 프로그램의 파일위치와 같은 위치에 생성됨
PATH = '.conf 파일의 위치'
    
if __name__ == "__main__":
    try:
        session = Session()

        configFile = PATH

        # 로그인
        running = session.login(configFile)
        session.heartbeat()
        
        # manager 등록과 manager에 NWS 등록
        manager = RealManager()
        manager.addTask("NWS", ('date', 'time', 'id', 'realkey', 'title', 'code', 'bodysize'), 100).addTarget(name='nwcode', value='NWS001')
        
        # 스레드 락 생성
        lock = threading.Lock()
        
        # XARealManager 콜백함수
        def callback(type, data):
            global lock
            with lock as lk:
                
                for i in range(len(data)):
                    # 실시간 데이터 획득
                    ht = data[i]
    
                    if type == "NWS": # 실시간 데이터의 형식이 'NWS' 즉 뉴스 데이터라면
                        print(ht['title']) # 

                        
        # 루프가 필요함.
        while running:
            manager.run(callback)
            pythoncom.PumpWaitingMessages()
            time.sleep(0.001)

        manager.removeTask('NWS')
    finally:
        session.logout()

간단히 설명하면 로그인을 하고 Xing-Plus의 RealManager()를 생성한 다음 여기에 ‘NWS’ 실시간 데이터 받기를 등록한다. 이후 while문에서 pythoncom.PumpWaitingMessage()를 호출하여 메시지를 받는다. 메시지는 callback 함수에서 처리된다.

실행을 시켜보면 다음 그림과 같이 뉴스 제목이 출력되는 것을 확인 할 수 있다.

뉴스 데이터 획득 결과

결론

본 글에서는 XingAPI를 이용해서 이베스트 투자증권에서 제공하는 실시간 뉴스 제목 데이터를 받는 프로그램을 공개하였다. 다음에는 획득된 뉴스 데이터를 가지고 획득시간과 생성 시간을 비교하도록 하겠다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다