상세 컨텐츠

본문 제목

공공데이터API - 전국문화축제표준데이터

programing/API

by ZelKun 2018. 9. 11. 13:30

본문

반응형

 

퇴근길에 갑천근처에서 왠 한여름밤의 음악회? 라는 행사를 하길래

전국 축제정보나 수집해볼까 하는 생각을 해봄

 

약 10년 전쯤에 비슷한 생각으로 행사소식을 스크랩했었는데... (결국포기..)

정부 3.0이니 있겠지 싶었는데 역시나 있긴 있다

 

오랫만에 로그인했더니 개인정보 재동의...

받아놓은 API들은 몇몇개는 기간만료...

 

뭐 필요할때 다시 받으면되니..

일단 전국문화축제표준데이터 API를 활용신청

 


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

 

근데 신청하고 제공데이터 보니 흠...

댓글달고 싶어지는...

 

"축제명, 개최장소, 축제시작일자, 축제종료일자, 축제내용, 주관기관, 주최기관, 후원기관, 전화번호, 홈페이지주소, 관련정보, 소재지도로명주소, 소재지지번주소, 위도, 경도, 데이터기준일자"

 

명색이 전국 축제라는데 반환데이터 어디에도 도시 구분은 없다... 구 단위라니...

 

물론 주관기관, 주최기관, 후원기관 정안되면 전화번호의 지역번호를 이용해서 지역을 나눌 수 있긴 하겠지만

정안되면 GIS로 GPS좌표에 해당하는 지역을 추출해도 되긴 하겠지만

가져다 쓰는 사람에 대한 배려가 없어도 너무 없다

 

잘 보면 총 196건이라고 명시되 있는데 지역구별 행사 API를 한곳에 모아 놓았다

특정 구만 볼거면 링크타고 들어가서 API 활용하면 되는건가... 싶었는데

CVS 파일을 제공하니 그냥 쓰는걸로.. (URL에 파일명이 명시되있는게 최신으로 갱신되는것도 아닌듯...)

게다가 데이터를 잘보면 지금이 18년도인데 17년도걸 보여주고있으니...

 


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

 

차트예제는 뭔가 했는데 알수없다... 뭐지...

 

그뒤로는 전부 파일이 다운된다


샘플인것 같긴한데... 믿음은 안간다

것보다는 API 설명에는 xml & json만 표시되있느데 뭐지 싶다...

 

  • 전국문화축제표준데이터.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<dataGrid>

<records>

<record>

<축제명>달성토성마을축제</축제명>

<개최장소>달성토성 둘레길</개최장소>

<축제시작일자>2017-05-20</축제시작일자>

<축제종료일자>2017-05-21</축제종료일자>

<축제내용>골목투어 등 골목 체험 축제</축제내용>

<주관기관>비산2.3동 축제추진위원회</주관기관>

<주최기관>비산2.3동 축제추진위원회</주최기관>

<후원기관>대구광역시 서구청</후원기관>

<전화번호>053-663-2181</전화번호>

<홈페이지주소>http://www.dgs.go.kr</홈페이지주소>

<관련정보/>

<소재지도로명주소>대구광역시 서구 국채보상로 81길 43</소재지도로명주소>

<소재지지번주소>대구광역시 서구 비산동 125-22</소재지지번주소>

<위도>35.875970</위도>

<경도>128.574690</경도>

<데이터기준일자>2018-02-20</데이터기준일자>

</record>

</records>

</dataGrid>

한글 투성의 XML을 보게될줄이야..

 

  • 전국문화축제표준데이터.json

{

"fields":[{"id":"축제명"},{"id":"개최장소"},{"id":"축제시작일자"},{"id":"축제종료일자"},{"id":"축제내용"},{"id":"주관기관"},{"id":"주최기관"},{"id":"후원기관"},{"id":"전화번호"},{"id":"홈페이지주소"},{"id":"관련정보"},{"id":"소재지도로명주소"},{"id":"소재지지번주소"},{"id":"위도"},{"id":"경도"},{"id":"데이터기준일자"}]

,"records":[{"축제명":"달성토성마을축제","개최장소":"달성토성 둘레길","축제시작일자":"2017-05-20","축제종료일자":"2017-05-21","축제내용":"골목투어 등 골목 체험 축제","주관기관":"비산2.3동 축제추진위원회","주최기관":"비산2.3동 축제추진위원회","후원기관":"대구광역시 서구청","전화번호":"053-663-2181","홈페이지주소":"http://www.dgs.go.kr","소재지도로명주소":"대구광역시 서구 국채보상로 81길 43","소재지지번주소":"대구광역시 서구 비산동 125-22","위도":"35.875970","경도":"128.574690","데이터기준일자":"2018-02-20"}]

}

fields는 말그대로 field명인데...

records를 보면 id가 field의 value값이 들어있다...

필드명을 따로 제공할거면 record에는 배열구성해서 값만 넣어도 될텐데... 페이크였다...

실제 요청결과와 다르다...

 


실제 요청결과...

 

무튼 여러 샘플이 있는건 좋은데 많이 아쉽다

아래는 API활용 가이드인데 왠일인지 문서로 제공되진 않는다

 

구분

항목

EndPoint

http://api.data.go.kr/openapi/cltur-fstvl-std

serviceKey

활용신청하고 받으면 된다

 

  • 요청변수 (Request Parameter)

항목명

샘플데이터

설명

s_page

1

페이지 번호

s_list

100

페이지 크기

type

xml

XML/JSON 여부

 

페이지 번호와 페이지 크기를 이용해서 최신정보를 찾아야하는

말도안되는 API라는걸 다시한번 느낌.. 진짜 써야되나...

 

출력결과에 전체 페이지수가 없다...

&s_list=100&type=xml&s_page=1029 이 조회 시점 마지막 페이지였다..

에러코드 항목같은건 필요없을정도 1030페이지로 가니 에러가 안났다

근데 그마져도...1027 ~1029 페이지에 걸쳐서 같은 ID가 여러번 나온거라 어찌해야할지 모르겠다...

중복데이터가 발생하는 페이지 처리라니...list=1로 하고 1029로가면 1개 나온다

list=100 옵션이 잘 안먹는단 소리다... 전체데이터가 1029개라는 소리기도 하고..

1029 / 100 = 10.29 라서 실제는 11페이지면 끝나는건데...라고 생각했는데 아닌것 같다

DB에 페이지 순회하면서 수집을 해봐야 명확할텐데... id가 뒤죽박죽 섞여서 조회된다

DB schema는 아직 생각안해봤으니 패스하고..

 

  • 출력결과 (Response Element)

항목명

샘플데이터

설명

_id

1.0

_id

축제명

달성토성마을축제

축제명

개최장소

달성토성 둘레길

개최장소

축제시작일자

2017-05-20

축제시작일자

축제종료일자

2017-05-21

축제종료일자

축제내용

골목투어 등 골목 체험 축제

축제내용

주관기관

비산2.3동 축제추진위원회

주관기관

주최기관

비산2.3동 축제추진위원회

주최기관

후원기관

대구광역시 서구청

후원기관

전화번호

053-663-2181

전화번호

홈페이지주소

http://www.dgs.go.kr

홈페이지주소

관련정보

 

관련정보

소재지도로명주소

대구광역시 서구 국채보상로 81길 43

소재지도로명주소

소재지지번주소

대구광역시 서구 비산동 125-22

소재지지번주소

위도

35.875970

위도

경도

128.574690

경도

데이터기준일자

2018-02-20

데이터기준일자

s_list

100

검색건수

s_page

1

페이지 번호

분명 문서에는 써있는데 s_list, s_page가 없다

전체 페이지, 현재 페이지는 기본으로 제공해줘야되는데 없다니

참고로 s_page=1로 조회하면 2017년도만 나와서 이미 끝난 축제 정보다

 

 

  • 제공데이터 예제

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


사용언어별 RESTFul 예제

 

  • 에러메세지 (에러코드별 조치방안 확인)

에러코드

에러메세지

설명

00

NORMAL_CODE

정상

01

APPLICATION_ERROR

어플리케이션 에러

02

DB_ERROR

데이터베이스 에러

03

NODATA_ERROR

데이터없음 에러

04

HTTP_ERROR

HTTP 에러

05

SERVICETIMEOUT_ERROR

서비스 연결실패 에러

10

INVALID_REQUEST_PARAMETER_ERROR

잘못된 요청 파라메터 에러

11

NO_MANDATORY_REQUEST_PARAMETERS_ERROR

필수요청 파라메터가 없음

12

NO_OPENAPI_SERVICE_ERROR

해당 오픈API서비스가 없거나 폐기됨

20

SERVICE_ACCESS_DENIED_ERROR

서비스 접근거부

21

TEMPORARILY_DISABLE_THE_SERVICEKEY_ERROR

일시적으로 사용할 수 없는 서비스 키

22

LIMITED_NUMBER_OF_SERVICE_REQUESTS_EXCEEDS_ERROR

서비스 요청제한횟수 초과에러

30

SERVICE_KEY_IS_NOT_REGISTERED_ERROR

등록되지 않은 서비스키

31

DEADLINE_HAS_EXPIRED_ERROR

기한만료된 서비스키

32

UNREGISTERED_IP_ERROR

등록되지 않은 IP

33

UNSIGNED_CALL_ERROR

서명되지 않은 호출

99

UNKNOWN_ERROR

기타에러

없는 페이지인 1030 page를 호출한결과 ...

<?xml version="1.0" encoding="UTF-8"?>
<list />

다음달되면 1030페이지가 생기려나...

 

 

참고:

반응형

관련글 더보기

댓글 영역