Open API는 공연 정보를 받아오는 Kopis의 공연 조회 API를 사용했다.
참고:
https://kopis.or.kr/por/cs/openapi/openApiList.do?menuId=MNU_00074&tabId=tab1_1
공연예술통합전산망
예술경영지원센터 운영, 공연 예매 정보 집계 및 DB, 예매상황판, 공연통계 등 제공.
kopis.or.kr:443
OpenAPI 이용하려면 requests 라이브러리 이용한다.
또, xml을 변환 하려면 xmltodict를 사용한다.
pip install requests
pip install xmltodict
먼저 API키를 발급받아 포스트맨에서 나오는 결과값을 확인하자
<?xml version="1.0" encoding="UTF-8"?>
<dbs>
<db>
<mt20id>PF196211</mt20id>
<prfnm>제13회 금호주니어콘서트, 조혜선 호른 독주회</prfnm>
<prfpdfrom>2022.08.11</prfpdfrom>
<prfpdto>2022.08.11</prfpdto>
<fcltynm>유스퀘어 문화관</fcltynm>
<poster>http://www.kopis.or.kr/upload/pfmPoster/PF_PF196211_220812_134906.png</poster>
<genrenm>클래식</genrenm>
<prfstate>공연완료</prfstate>
<openrun>N</openrun>
</db>
</dbs>
# xml 형태로 나온다.
이제 API를 받아올 클래스를 만든다.
# 공연 조회
class PerformanceSearchResource(Resource):
def get(self) :
return
그 후 받아올 파라미터를 설정한다.
def get(self) :
# 파라미터로 검색 조건 받기
# 필수 파라미터
stdate = request.args['stdate'] # 공연시작일자, 6자로 입력받기 ex) 20220701
eddate = request.args['eddate'] # 공연종료일자, 6자로 입력받기 ex) 20220801
cpage = request.args['cpage'] # 현재 페이지, 정수형으로 입력
rows = request.args['rows'] # 페이지당 목록 수, 정수형으로 입력
# 선택 파라미터
shprfnm = request.args['shprfnm'] # 공연명
shprfnmfct = request.args['shprfnmfct'] # 공연시설명
shcate = request.args['shcate'] # 장르 코드
signgucode = request.args['signgucode'] # 지역(시도) 코드
prfstate = request.args['prfstate'] # 공연 상태 코드
params = {
"service" : Config.KOPIS_ACCESS_KEY,
"stdate" : stdate,
"eddate" : eddate,
"cpage" : cpage,
"rows" : rows,
"shprfnm" : shprfnm,
"shprfnmfct" : shprfnmfct,
"shcate" : shcate,
"signgucode" : signgucode,
"prfstate" : prfstate
}
이제 요청하는 API의 URL과 API에서 요구하는 데이터 입력한다.
response = requests.get(Config.KOPIS_PERFORMANCE_SERARCH_URL, params=params)
그 후 xmltodict를 사용해서 json형태로 변환한 후 결과값을 나타낸다.
# json 형태로 변환
xmlToJsonConverter = xmltodict.parse(response.text)
# json 타입으로 변경
resultList = json.loads(json.dumps(xmlToJsonConverter))['dbs']['db']
return { "resultList" : resultList }, 200
클래스를 메인 파이썬 앱에 연결한 후 로컬에서 돌려 포스트맨으로 확인해보자.
{
"resultList": {
"mt20id": "PF195500",
"prfnm": "이주희 피아노 독주회",
"prfpdfrom": "2022.08.01",
"prfpdto": "2022.08.01",
"fcltynm": "금호아트홀 연세",
"poster": "http://www.kopis.or.kr/upload/pfmPoster/PF_PF195500_220801_105228.jpg",
"genrenm": "클래식",
"prfstate": "공연완료",
"openrun": "N"
}
}
# json 형태로 나오는것을 확인할수 있다.
json 형태의 결과가 나오는것이 확인 되었으나 단일 값과 2개 이상일때의 값의 형태가 달라진다.
단일 값일 때의 형태:
{
"resultList": {
"mt20id": "PF195500",
"prfnm": "이주희 피아노 독주회",
"prfpdfrom": "2022.08.01",
"prfpdto": "2022.08.01",
"fcltynm": "금호아트홀 연세",
"poster": "http://www.kopis.or.kr/upload/pfmPoster/PF_PF195500_220801_105228.jpg",
"genrenm": "클래식",
"prfstate": "공연완료",
"openrun": "N"
}
}
2개 이상의 값일 때의 형태:
{
"resultList": [
{
"mt20id": "PF195500",
"prfnm": "이주희 피아노 독주회",
"prfpdfrom": "2022.08.01",
"prfpdto": "2022.08.01",
"fcltynm": "금호아트홀 연세",
"poster": "http://www.kopis.or.kr/upload/pfmPoster/PF_PF195500_220801_105228.jpg",
"genrenm": "클래식",
"prfstate": "공연완료",
"openrun": "N"
},
{
"mt20id": "PF195453",
"prfnm": "쇼팽으로 만나는 지브리",
"prfpdfrom": "2022.07.28",
"prfpdto": "2022.07.28",
"fcltynm": "인천동구문화체육센터",
"poster": "http://www.kopis.or.kr/upload/pfmPoster/PF_PF195453_220729_142606.PNG",
"genrenm": "클래식",
"prfstate": "공연완료",
"openrun": "N"
}
]
}
# 1개일때는 딕셔너리만으로, 두개 이상일때는 딕셔너리가 리스트로 묶여 나온다.
단일값일때의 딕셔너리 길이를 구한 후 그 길이일때만 리스트로 묶어서 보여주자.
if len(resultList) == 9:
extra_list = []
extra_list.append(resultList)
resultList = extra_list
# 단일값일때의 딕셔너리 길이는 9다.
이제 형태가 동일하게 나오는것을 확인할수 있다.
{
"resultList": [
{
"mt20id": "PF195500",
"prfnm": "이주희 피아노 독주회",
"prfpdfrom": "2022.08.01",
"prfpdto": "2022.08.01",
"fcltynm": "금호아트홀 연세",
"poster": "http://www.kopis.or.kr/upload/pfmPoster/PF_PF195500_220801_105228.jpg",
"genrenm": "클래식",
"prfstate": "공연완료",
"openrun": "N"
}
]
}
'백엔드 > API' 카테고리의 다른 글
[API] 포스트맨으로 API명세서 만들기 (0) | 2022.08.31 |
---|---|
[API] 서비스 배포 전 SQL문 Index 작업 (0) | 2022.06.30 |
[API] 네이버 API 이용하기 (0) | 2022.06.27 |
[API] Rekognition (0) | 2022.06.24 |
[API] S3로 파일 업로드하는 API (0) | 2022.06.24 |
댓글