본문 바로가기

내일배움캠프

파이썬으로 공공 API 활용해보기

장고 심화주차의 두번째 과제인 LLM과제, 개인적으로 DRF에 집중하고 싶었기때문에 이번 과제는 그동안 생각하던 아이디어가 생각처럼 동작 할 것인지에 중점을 두고 간단하게 구현해보았다.

 

이번에 정한 목표는 gpt를 활용해서 특정 종목의 주가를 예측하는 웹페이지를 만드는 것이다. 따라서 필요한 기능은 다음과 같다.

  1. 사용자로부터 입력받은 데이터를 서버에 저장하는 기능
  2. RAG로 GPT가 서버내의 데이터를 참고하여 답변을 하는 기능
  3. 최근 주가를 받아오는 기능

더 복잡하고 정교한 프로그램이라면 더 많은 기능이 필요하겠지만 내가 만드려는 간단한 기능은 이정도면 충분할 것이다. 때문에 웹페이지를 만들기 위한 장고와 RAG를 사용하기위한 랭체인이 필요할 것이다.

 

나는 우선 공공 API를 활용해서 특정 종목의 주가를 입력해보기로 했다.

 

https://www.data.go.kr/

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

데이터는 공공데이터 포털을 활용했다. 외부 api 연동은 지난번에도 몇번 해본적이 있기 때문에 홈페이지의 설명만 잘 읽는다면 금방 할 수 있을 것이라고 생각을 했었는데... 그렇게 쉽지가 않았다.

 

주식 시세 api의 일부

 

시작은 간단했다. 발급받은 키를 넣고 원하는 데이터가 나오도록 값을 입력하면 url 주소를 만들어주었고 그것을 get요청으로 받아오면 되는 것이다. 하지만 막상 데이터를 출력해보려고 하니 에러가 발생했다.

 

https://jemmaa.tistory.com/80#google_vignette

 

크롤링 에러 requests.exceptions.SSLError: HTTPSConnectionPool

하.. 크롤링 돌려놓고 데이터 확인할려고 했는데 3시간쯤 ? 돌리고 나서 보니까 requests.exceptions.SSLError: HTTPSConnectionPool 에러났다고 멈췄다. sleep도 걸고 했는데...ㅠㅠ 새벽작업을 해야했다... 찾아

jemmaa.tistory.com

 

SSL에러가 바로 그것이었다. 구글링을 열심히 해보니 인증서 관련 오류같은데... 처음 보는 문제라서 해결이 쉽지 않았다.

아무튼 블로그에 정리된 대로 

result = request(url, verify=False)

 

이런 식으로 인증을 False로 설정해서 인증을 하지 않도록 바꿔주었다. 보안문제가 발생할 가능성이 크다고 하지만 일단 출력이 되는 것이 더 중요하니까...

하지만 이번에도 같은 오류가 발생했다.

 

https://0ver-grow.tistory.com/1003

 

크롤링 과정에서 나타난 HTTPSConnectionPool(URL, port=443) 에러

res = requests.get('URL') 위 코드를 입력했더니 에러가 발생했다. 에러명 HTTPSConnectionPool(host='www.work.go.kr', port=443): Max retries exceeded with url: /empSpt/empNews/retrieveEmpNewsList.do?pageIndex=1&sortOrderField=dtm&sortOrderBy

0ver-grow.tistory.com

 

다음으로 시도해본 방법은 pyOpenSSL 업데이트이다.

SSL인증서를 최신버전으로 업데이트 하는 방법이라고하는데... 될지 안될지 확신은 없었지만 일단 시도해보기로했다.

 

pip install pyOpenSSL

 

터미널에 위와 같이 입력하여 토큰을 업데이트했다. 무언가 열심히 깔리기 시작하고 다시 실행을 해보았지만... 결과는 이번에도 실패였다. 아무래도 다른 방법이 필요한것같았다.

 

https://velog.io/@ddclub12/java%EC%97%90%EC%84%9C-https-%EC%97%B0%EA%B2%B0-SSL-%EC%9D%B8%EC%A6%9D-%EC%98%A4%EB%A5%98%EC%8B%9C-%EC%A1%B0%EC%B9%98

 

java에서 https 연결 SSL 인증 오류시 조치

java에서 https로 시작하는 url을 호출시 아래와 같은 오류가 발생한다.확인을 해보니 java에 해당 URL의 SSL 인증서를 설정해줘야 한다는 것이다.그래서 위와 같이 java에서 SSL오류 발생시 조치방법에

velog.io

 

다음으로 떠올린 방법은 https부분을 손보는 것이었다. 수박겉핥기식으로 적당히 얻어낸 지식이기때문에 정확한 것은 아니지만 SSL에러는 https 사이트에 접속을 시도할때 발생하는 에러라고한다. 그럼 접근 프로토콜을 다른 방식으로 바꾸면 해결할 수도 있지 않을까?

 

그리고 여기부터는 내 능력을 벗어나버렸기 때문에 챗GPT를 활용해서 해결했다.

GPT는 httpx라는 것을 알려주었는데 이것을 활용하면 파이썬에서 https가 아니라 http요청을 보낼 수 있다고 한다. 그럼 인증이 필요없어질테고 예상대로 실행이 되지 않을까?

 

오..!!!

 

그리고 이번에야말로 예상대로 api를 출력할 수 있었다. 여기까지 출력이 되었으면 다음은 쉽다. json형식은 딕셔너리형태이기 때문에 데이터를 손쉽게 다룰 수 있다.

 

9영업일간의 기준sk하이닉스의 종가

 

이렇게 해서 원하는 데이터를 추출해낼 수 있었다. 

 

https://apis.data.go.kr/1160100/service/GetStockSecuritiesInfoService/getStockPriceInfo?serviceKey={사용자인증키}&resultType=json&beginBasDt={date}&likeSrtnCd={ticker}

 

이제 원하는 곳에 변수를 입력해서 내가 원하는 종목의 주가를 조회할 수 있다.