갬미의 성장일기

Day16 - Flask | 공공 API 사용하기 본문

Cloud/Cloud 공부일기

Day16 - Flask | 공공 API 사용하기

갬미 2022. 1. 24. 23:50

오늘 배운 내용

- Flask

- 공공 데이터 포털에서 open api 사용하기

웹 동작 구성

Flask = 마이크로 웹 프레임워크

👇 공식 docs 

 

Welcome to Flask — Flask Documentation (2.0.x)

 

flask.palletsprojects.com

 

openAPI 사용하기

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

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제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로 만든 웹을 올리고 코로나 백신 예약 병원 정보를 지도에 띄우는 서비스를 하는것!! 
Comments