pybo 게시판에 현재 주식종목의 주가를 불러오도록 만들고 있습니다.
우선 위키독스에 제공해 주신 "점프 투 장고" 강의를 유용하게 보고 따라서 만들고 공부하고 있습니다.
제공해주신 강의의 pybo 게시판에 한가지를 추가 하려고 하는데
쉽지 않아 어떤 방법으로 해결하면 좋을까하고 문의 드립니다.
게시판이 list의 형태는 아래와 같습니다. 일반 게시판형태에서 타이틀만 바꾸었습니다.
[ 종목명 / 종목가격 / 메모 / 작성일시 ]
종목명은 게시글제목이고, 메모는 게시글내용, 작성일시는 말그대로 작성일시로
pybo와 다를게 없습니다.
한가지 추가한게 종목가격인데, 이 종목 가격 정보는 한국증권거래소에서 API형태로 제공하므로
불러와서 종목코드만 입력하면 데이터를 출력 할 수 있습니다.
(http://asp1.krx.co.kr/servlet/krx.asp.XMLSiseEng?code=종목코드)
종목코드는 DB에 Stock_no라는 field 명으로 만들어져서 글 작성시 같이 입력하게 되어서
DB의 정보는 가지고 있습니다.
해결하지 못한 부분은 여기서 입니다.
DB에서 종목 코드를 불러와서 API코드에서 종목코드를 바꿔가며 게시글 List에 출력해줘야하는데
잘 되지 않네요
아래코드는 views.py의 index 부분입니다.
아래처럼 작성하면 하나의 Stcok_no만 불러오기 때문에 원하는데로 출력이 되지 않습니다.
출력결과는 당연히 하나의 DB Row만 불러오기 때문인데, 어떻게하면 잘 매칭 시킬 수 있을지
큰 그림이 안그려져 문의 드립니다.
def index(request):
stockinfo_list = Stockinfo.objects.order_by('-create_date')
field_name = 'stock_no'
obj = Stockinfo.objects.first()
field_object = Stockinfo._meta.get_field(field_name)
field_value = field_object.value_from_object(obj)
url = "http://asp1.krx.co.kr/servlet/krx.asp.XMLSiseEng?code={}".format(field_value)
url_request = urlopen(url)
result = url_request.read()
xmlsoup = BeautifulSoup(result, "lxml-xml")
stock_price = xmlsoup.find("DailyStock")
context = {'stockinfo_list': stockinfo_list, 'stock_price': stock_price['day_EndPrice']}
return render(request, 'favorite/stockinfo_list.html', context)
suoerwofer 님 617
M 2020년 8월 25일 9:22 오전
1개의 답변이 있습니다. 1 / 1 Page
안녕하세요.
종목코드에 대한 종목가격은 한번에 한개의 값만 가져오는 것으로 이해했습니다.
(종목코드 1개를 요청하면 해당종목의 가격을 알수 있음)
하지만 구현하시려는 게시판은 많은 종목코드에 대한 가격을 알고 싶기 때문에
API를 종목코드 갯수만큼 호출해야 할 것 같네요.
우선 게시판에 출력할 리스트를 얻으신 후 for문을 이용하여 루프 돌면서 종목가격을 얻어야 할 것 같습니다.
하지만 이렇게 하면 API 호출이 너무 많아서 속도가 문제가 될 것 같아요.
여러가지 해결책이 있을 것 같긴 한데요.
저라면 종목가격에 대한 컬럼을 미리 만들어 놓고 배치(Celery)를 이용하여
주기적으로(예: 1분 또는 5분간격) API를 백그라운드로 실행하여 데이터를 만들어 놓겠습니다.
물론 시간 간격이 있기 때문에 그 시간만큼의 오차가 있는 방법이니
잘 판단해서 사용해야 겠지만요..
그럼 도움 되셨기를 바랍니다.
박응용 님
2020년 8월 25일 9:29 오전