Tech Trail

[Django 주식 검색 웹 만들기 04] 주식 api로 주식 데이터 수집과 화면 표시하기 본문

Project/[Django] 주식 검색 웹 만들기 [완]

[Django 주식 검색 웹 만들기 04] 주식 api로 주식 데이터 수집과 화면 표시하기

_밍지_ 2024. 4. 4. 19:00
728x90
반응형
SMALL

1. iexcloud에 가입하고 API 키 받기

 

Django를 사용하여 주식 데이터를 수집하고 화면에 표시하는 방법에 대해 알아보겠습니다.

먼저, 주식 데이터를 받아오기 위해 iexcloud 웹사이트에 가입하고 API Tokens 페이지에서 PUBLISHABLE 키를 복사해야 합니다. 이 키는 개인 정보이므로 유출되지 않도록 주의해야 합니다.

 

2. API 문서 확인하기

 

다음으로, iexcloud의 API 문서( https://iexcloud.io/docs/api/ )에서 Ctrl+F로 "stock quote for"를 검색하여 해당 주식의 데이터를 요청하는 URL을 확인합니다.

그러면 하나의 검색 결과가 나오는데, 그것은 https://cloud.iexapis.com/stable/stock/aapl/quote?token=YOUR_TOKEN_HERE 입니다.

 

3. URL을 통한 데이터 요청

 

이 링크를 따라서 웹 브라우저를 하나 더 열어서 방금 복사한 링크로 이동해주세요.

그리고 YOUR_TOKEN_HERE 부분에는 방금 복사한 API 키를 붙여넣어주세요. 이렇게 하면 해당 주식의 데이터를 얻을 수 있습니다.

 

여러분이 현재 보고 계신 화면은 Apple의 데이터가 표시되는 것일 텐데요.

URL을  보면 중간에 'aapl'이 있습니다. 이것이 주식을 나타내는 ticker라고 생각하시면 됩니다.

미국 주식을 한 글자에서 네 글자로 간략하게 표현한 것이죠.

예를 들어, 애플은 'aapl', 구글은 'goog', 아마존은 'amzn', S&P 500은 'spy'와 같이 표현됩니다.

따라서 만약에 구글의 주식 데이터를 받아오려면 URL에서 'aapl'을 지우고 'goog'를 입력해주면 됩니다.

 

4. JSON 데이터 파싱

 

아무튼 화면을 살펴보면 소괄호를 열고 key와 value의 결합들로 보입니다.

이것이 파이썬 딕셔너리와 똑같이 생겼지만, 실제로는 JSON 형식으로 저장된 것입니다.

JSON 형식은 딕셔너리와 유사하여 파이썬에서 쉽게 딕셔너리 형태로 변환할 수 있습니다.

이 과정을 파싱이라고 합니다.

 

5. Django를 이용한 데이터 수집

 

먼저, 주식 데이터를 파이썬으로 가져오기 위해 다음과 같이 views.py 파일을 작성합니다.

 

import requests
def home(request):
    
    stock_api = requests.get("")
    
    return render(request, 'stocks/home.html')

 

""부분에는 실제 주식 데이터를 제공하는 API의 URL을 넣어주어야 합니다.

그러면 주어진 URL로 GET 요청을 보내어 데이터를 가져오고, 그 결과를 stock_api 변수에 저장합니다.

 

주식 데이터를 가져오기 위해 API로부터 받은 응답은 JSON 형식으로 제공됩니다. 따라서 이 JSON 형식의 데이터를 파이썬에서 사용하기 위해서는 json 모듈을 임포트하여 JSON 형식의 데이터를 파이썬 객체로 변환해야 합니다.

 

import jason

 

위와 같이 json 모듈을 임포트합니다.

그리고 아래 코드에서 API로부터 받은 JSON 형식의 데이터를 파싱하여 파이썬 딕셔너리로 변환하는 과정을 보여줍니다.

 

stock = json.loads(stock_api.content)

 

위 코드에서 json.loads() 함수를 사용하여 API로부터 받은 JSON 형식의 데이터인 stock_api.content를 파이썬 딕셔너리로 변환합니다. 변환된 주식 데이터는 stock 변수에 저장됩니다.

그리고 변환된 주식 데이터를 content 딕셔너리에 담아서 render() 함수의 매개변수로 전달합니다.

 

content = {'stock':stock}

 

이제 views.py 파일에서 home 함수가 실행되어 home.html 파일이 렌더링될 때, content 딕셔너리 내부에 담긴 주식 데이터를 home.html에서 사용할 수 있습니다.

 

확인해보기 전에 먼저 필요한 모듈을 설치하여,  모듈 설치 안해서 뜨는 오류 먼저 해결해봅시다.

 

 

터미널에서 아래 명령을 실행하여 필요한 모듈을 설치합니다.

 

pip install requests

 

6. 화면에 데이터 표시하기

 

모듈이 성공적으로 설치되었다면, home.html 파일로 이동하여 데이터를 표현해줄 준비를 합니다.

템플릿 태그 {{ }}  하나 만들어주세요.

데이터를 views.py 파일에서 받아온 후에는 해당 데이터를 home.html 파일에서 표현할 때 먼저 템플릿 태그 {{ }}를 사용합니다. 이렇게 사용하는 것은 Django 템플릿 언어의 문법입니다. {{ }} 안에는 변수 이름을 써주면 됩니다. 이렇게 하면 해당 변수에 할당된 값이 HTML 페이지에 출력됩니다.

 

{% extends 'base.html' %}

{% block content %}

{{ stock }}

{% endblock %}

 

아까 views.py 파일에서 content={'stock': stock}와 같이 변수를 설정했었습니다. 이렇게 설정한 변수를 템플릿에서 사용할 때는 해당 변수 이름을 사용합니다. 예를 들어, content 변수 내부에 있는 stock 변수를 사용하려면 {{ content.stock }}와 같이 템플릿 태그를 통해 사용할 수 있습니다.

 

7. 서버 실행 및 확인

 

이제 아래와 같이 명령어를 실행하여 서버를 시작합니다.

 

python manage.py runserver

 

그러면 서버가 실행됩니다.

 

 

................. 앗

 

저처럼 뜨면 home.html 파일에서 아래와 같이 코드를 수정해야 합니다.

 

{% extends 'stocks/base.html' %}

 

이렇게 수정하면 문제가 해결될 것입니다.

 

 

728x90
반응형
LIST