Day16 - Flask | 공공 API 사용하기
오늘 배운 내용
- Flask
- 공공 데이터 포털에서 open api 사용하기
웹 동작 구성
Flask = 마이크로 웹 프레임워크
👇 공식 docs
Welcome to Flask — Flask Documentation (2.0.x)
flask.palletsprojects.com
openAPI 사용하기
공공데이터 포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase
www.data.go.kr
-> 코로나 검색 / open api에서 json 형식인것 중 다음을 사용함
https://www.data.go.kr/data/15077586/openapi.do
공공데이터활용지원센터_코로나19 예방접종센터 조회서비스
중앙•권역, 지역별 코로나19 예방접종센터 위치정보입니다. 해당 데이터는 예방접종센터의 주소정보, 위·경도 좌표정보를 제공하고 있습니다. 예방접종센터 정보는 질병관리청의 센터 추가
www.data.go.kr
활용신청하면 마이페이지에서 승인 현황을 볼 수 있다 -> 대부분 바로 승인이 나니 활용할 수 있음
인증키 설정을 눌러 인코딩 키를 위에, 디코딩 키를 아래에 적는다
test용이기 때문에 이렇게 한다
불러올 API 정보를 입력한다
page - 시작 페이지
perpage - 몇개를 보일것인지
cond - 의료기관이 속한 주소지 (구)
Request url => 데이터 요청할 url 이를 &단위로 쪼개어 보면 정보가 보인다
기본 url
http://api.odcloud.kr/api/apnmOrg/v1/list?
page=1&perPage=10 # 페이지
cond (지역구 코드)
&cond%5BorgZipaddr%3A%3ALIKE%5D=%EA%B0%95%EB%82%A8%EA%B5%AC # 강남구 코드
일반 인증키
&serviceKey=%2FH2rHG%2FJ95hTADJiUQJ4QzpBbdHCE4CBYf7V6AjSaiNSKM7uePItX0GmBO3vrJL7Q5JHigKGc0%2FXId%2B3S2m0dQ%3D%3D
이 네개를 합치면 request url이 된다
Flask에서 open api 정보 받아오기
from flask import Flask
import json
import requests
# 변수선언 - 프로그램의 이름 저장한느 변수 (파일이름 저장 변수)
# application server 개발 app 변수를 많이 사용
app = Flask(__name__) # flask 프로그램 시작 기본값 = app.py 파일을 생성
# 함수선언
# 시작할때 경로(route) 선언해야함
@app.route("/") # 웹 사이트 경로를 저장
def FlaskLab():
return 'flask 데이터 응답'
@app.route("/data1")
def FlaskData():#startPage, pageCount, address): # 요청받음
keyValue = r'%2FH2rHG%2FJ95hTADJiUQJ4QzpBbdHCE4CBYf7V6AjSaiNSKM7uePItX0GmBO3vrJL7Q5JHigKGc0%2FXId%2B3S2m0dQ%3D%3D'
# url 만들기
# http://api.odcloud.kr/api/apnmOrg/v1/list?
# page=1&perPage=10
# &cond%5BorgZipaddr%3A%3ALIKE%5D=%EA%B0%95%EB%82%A8%EA%B5%AC
# &serviceKey=%2FH2rHG%2FJ95hTADJiUQJ4QzpBbdHCE4CBYf7V6AjSaiNSKM7uePItX0GmBO3vrJL7Q5JHigKGc0%2FXId%2B3S2m0dQ%3D%3D
dataURL = 'https://api.odcloud.kr/api/apnmOrg/v1/list?'
dataURL += 'page='+str(1) + '&perPage=' + str(10)
dataURL += '&cond' + r'%5BorgZipaddr%3A%3ALIKE%5D=%EA%B0%95%EB%82%A8%EA%B5%AC' # 지역
dataURL += '&serviceKey=' + keyValue
dataResult = requests.get(dataURL)
data = json.loads(dataResult.text)['data']
return str(data) # 공공데이터 결과값 응답
@app.route -> web 주소
그 아래 주소 -> route 주소에서 실행할 함수
@app.route(data1/)
tartpage, pageCount, address 입력 받아 사용하려 했으나 그건 내일 하기로함
기본 ip/data1 하면 서울시 강남구의 백신 사전예약 의료기관 api정보가 호출
접속했을때 Response Code 오류
200번대 오류 -> 정상 작동
400번대 오류 -> 주소 이상
500번대 오류 -> 서버 이상
오늘의 회고
- 과제가 병원정보를 띄우는거라 급하게 str로 처리했는데 이게 맞는지 모르겠다
- json으로 출력하려니 오류가 나서 ,, loads 대신 dumps를 사용하는 코드를 구현하기는 했다
- Flask를 배워봤는데 장고보다 간단하게 실행되는것 같다 (조금 배워서 그런거 일수도,,^^)
- 오늘 pip install하면 라이브러리가 내가 잡아놓은 Strips 폴더에 안깔리고 엄한데에 자꾸 깔려서 왜 이러나 보다가 수업을 조금 놓쳤다 ,, 그냥 Script 환경변수를 다시 잡아줬는데 원인을 아직도 모르겠다
- 내일부터는 Cloud 에 대해 배운다고 하셨다,, 떨린다
- 최종 목표는 AWS 서버에 Flask로 만든 웹을 올리고 코로나 백신 예약 병원 정보를 지도에 띄우는 서비스를 하는것!!