-
[파이썬] 매 시간 주가 음성 안내 프로그램 만들기Python/파이썬과 주식 2022. 12. 9. 10:16반응형
매 시간 특정 종목의 주가를 읽어주는 프로그램.
이 프로그램에는 3가지 기능이 필요하다.
1. 매 시간 반복.
2. 특정 종목 주가를 받아온다.
3. 이것을 읽어준다.매 시간 반복되는 작업을 처리할 때
1. 윈도우(OS)에는 스케줄러 기능이 있어 이를 이용해도 되지만,
파이썬 코드 하나로 관리하는 게 일반적으로 더 선호된다.2. 루프와 조건문을 이용해서 직접 코딩해도 되겠지만
3. 스케줄러를 사용하면 다양한 조건을 설정할 수도 있고,
어렵지 않으니 스케줄러를 이용하는 것이 좋을 것이다....구글에서 '파이썬 스케줄러'로 검색하면
schedule, apscheduler 두 가지가 많이 나오는 데
이 번에는 apscheduler를 이용한다.공식 문서: https://apscheduler.readthedocs.io/en/3.x/userguide.html
https://apscheduler.readthedocs.io/en/3.x/modules/triggers/cron.html구글 검색 첫 번째 문서: https://hello-bryan.tistory.com/216
$ pip install apscheduler
import time from apscheduler.schedulers.blocking import BlockingScheduler def job(): print(f'job: {time.strftime("%H:%M:%S")}') schedule = BlockingScheduler() schedule.add_job(job, 'cron', second='0') schedule.start()
특정 종목 주가 받아오기
1. 사용하고 있는 증권사의 API를 이용하거나,
2. 네이버 증권 페이지를 크롤링 하는 방법 등이 있는데..이번에는 네이버 증권 페이지를 크롤링하는 방법을 이용한다.
파이썬에는 urllib라는 내장 라이브러리가 있다.공식 문서 : https://docs.python.org/ko/3/howto/urllib2.html
# urllib.request를 사용하는 가장 간단한 방법은 다음과 같습니다: import urllib.request with urllib.request.urlopen('http://python.org/') as response: html = response.read()
특정 종목의 주가만 가져올 것이기 때문에
html을 파싱하지 않고
원하는 text만 가져오자.텍스트 읽기
TTS 라고 하는 기능이다.
'텍스트 투 스피치'구글에서 '파이썬 TTS'로 검색하면 gTTS가 대부분이다.
gTTS는 구글의 API에 TEXT를 보내면,
mp3 파일로 변환해 보내주는 방식이라,
무겁고 불편하다.윈도우 내장 TTS API(SpVoice)를 파이썬에서 쓸 수 있으니 이걸 이용하자.
이에 대해서는 본인의 블로그에도 소개한 적 있다.SpVoice 를 쓰기 위해서는 pywin32가 필요하다.
$ pip install pywin32
import win32com.client speaker = win32com.client.Dispatch('SAPI.SpVoice') speaker.Speak('안녕하세요? Hello. 12:21')
완성된 코드
import urllib.request from datetime import datetime from apscheduler.schedulers.background import BlockingScheduler from win32com import client def job(code): url = f'https://finance.naver.com/item/main.naver?code={code}' resp = urllib.request.urlopen(url).read().decode('EUC-KR') title = resp.split('<title>')[1].split(' : ')[0] price = resp.split('<dd>현재가 ')[1].split(' ')[0] time = datetime.now().strftime('%H:%M') text = f'{title} {time} 현재: {price}원' print(text) speaker = client.Dispatch("SAPI.SpVoice") speaker.Speak(text) def main(): job('005930') sched = BlockingScheduler() sched.add_job(job, 'interval', seconds=600, id='test', args=['005930']) sched.start() if __name__ == '__main__': main()
모바일 알람이 필요하다면,
텔레그램 챗봇 API를 이용하면 된다.반응형