상세 컨텐츠

본문 제목

공공데이터 API - 대전광역시 버스정보 3부 (정류소별 도착정보 조회 서비스)

programing/API

by ZelKun 2017. 8. 28. 10:30

본문

반응형

출처: https://www.data.go.kr/dataset/3034842/openapi.do



계발계정은 트래픽1,000회 제한이 있어

작업일수가 길어 문장이 매끄럽지 않고, 두서없이 나열되있지만

정리할 필요성을 못느껴서 그냥 게시


[공공데이터 - 대전광역시 버스정보 1부http://zelkun.tistory.com/181]

[공공데이터 - 대전광역시 버스정보 2부http://zelkun.tistory.com/182]

와 연결되니 참고바람


참고로 편의상 API기술문서를 기준으로 했기때문에 서비스 명이 다름


  1. 정류장 버스도착 정보 조회 서비스 / arrive

 

No

오퍼레이션명(영문)

오퍼레이션명(국문)

필수 key

1

getArrInfoByStopID

정류소ID(7자리) 별 버스 도착예정정보 조회 서비스

BusStopID

2

getArrInfoByUid

정류소ID(5자리) 별 버스 도착예정정보 조회 서비스

arsId

 

  • 정류장 버스도착 정보 응답명세

No

항목명(영문)

항목명(국문)

항목크기

항목설명

1

BUS_NODE_ID

요청 정류소 ID(7자리)

7

요청 정류소 ID(7자리)

2

BUS_STOP_ID

요청 정류소 ID (5자리)

100

요청 정류소 ID(5자리)

3

CAR_REG_NO

차량번호

100

차량번호

4

DESTINATION

종점

5

종점

5

EXTIME_MIN

도착예정시간(분)

10

도착예정시간(분)

6

EXTIME_SEC

도착예정시간(초)

5

도착예정시간(초)

7

INFO_OFFER_TM

정보생성시간

10

정보생성시간

8

LAST_CAT

첫/막차구분

10

첫차 막차(1: 첫차 2:막차 3:일반)

9

LAST_STOP_ID

최근 통과 정류소ID(5자리)

5

최근 통과 정류소ID(5자리)

10

MSG_TP

메시지유형

1

메시지유형 '01'도착, '02' 출발, '03' 몇분후 도착 '04' 교차로 통과 '06 진입중  '07 차고지 운행대기중

11

ROUTE_CD

노선ID

8

노선ID

12

ROUTE_NO

노선번호

10

노선번호

13

ROUTE_TP

노선유형

1

노선 타입(1:급행 2:간선 3:지선 4:외곽 5:마을 6:첨단)

14

STATUS_POS

잔여정류장 수

3

잔여정류장 수

15

STOP_NAME

최근 통과 정류소 명칭

200

최근 통과 정류소 명칭

무튼 과관이다 도메인 관리는 하는것일까 요청 정류소 ID 라니...

요청 정류소 ID(5자리) 무려 100이나 된다

그리고 정보생성시간(INFO_OFFER_TM) 10자리라고 되있는데 10자리가 넘는다...

(데이터를 보니 mysql timestamp 보인다 아니면 말고)

메시지유형(MSG_TP) 또한 01~07 이라고 나와있는데 자릿수는 1이다

적절하게 조정이 필요하다

 

이제 해야할건 관심을 가져야하는 출/퇴근 이용 버스정보장을 찾는건데

사실 앞에서 했던거 다 무시하고 단박에 찾는방법이 있다

버스정류장에 정류장 번호가 표기되있기 때문이다

그것마져 귀찮으면 대전버스 어플에서 정류장 번호를 보면된다...

이 경우에는 7자리가 아닌 5자리 기준으로 조회하면 된다

 

정류장에 설치된 버스도착예정 시간을 보여주는게 API를 통해 데이터를 받아와서 표시해주는듯 하다 그걸 정부3.0으로 공공데이터라고 제공해주니 사실 불평할게 아니라 감사하게 여겨야 할지도...

 

출/퇴근 평균도착시간을 알기위해서

제공되는 데이터를 살펴보니 도착예정시간, 예정시간 초, 정보생성시간

이렇게 3개의 시간이라 표시된게 눈에 띄인다

근데 야밤에(새벽에) 작업하는 1인으로서 결과값을 받을수 없으니...

무튼 실데이터를 못보고 문서에 나온걸보고 하려니 속이 쓰리다..

<EXTIME_MIN>6</EXTIME_MIN>

<EXTIME_SEC>317</EXTIME_SEC>

<INFO_OFFER_TM>2015-11-16 15:01:09.0</INFO_OFFER_TM>

현 시점 요청시간과 응답의 저장시간을 비교해봐야하는데...

저장시간, 분, 초 표시에 대해서 오차율을 알수가 없으니 말이다..

저장시간 간격도 itemList마다 다른걸로 보이고...

요청시 1분전 데이터를 가져오면 지나갔을수도 있으니...

무튼 오늘 작업은 여기까지 하고 자야겠다

 

 

서비스명

항목명(영문)

항목명(국문)

항목크기

버스운행정보 조회 서비스

ROUTE_NO

노선번호

10

버스 정류장 정보 조회 서비스

ROUTE_NO

경유노선정보

200

정류장 버스 도착 정보 조회 서비스

ROUTE_NO

노선번호

10

그나마 이번 API 써본결과 ROUTE_NO 버스번호라는걸 알게 되었다

그리고 정류장정보조회 서비스 ROUTE_NO 눈에 다시 들어왔다

경유노선 전체를 넣을거면 ROUTE_NOS 라던가...

바꿔주지 말이다 전체 노선을 한번에 보여주는데...

 

무튼...

낮에 한번 테스트를 해봤다 - 정류장ID (5자리)

작성을 시작한게 8일인데 테스트가 20일이라니..

호출 시간: 2017-07-20 17:31:31

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

<ServiceResult>

<comMsgHeader/>

<msgHeader>

<currentPage>1</currentPage>

<headerCd>0</headerCd>

<headerMsg>정상적으로 처리되었습니다.</headerMsg>

<itemCnt>2</itemCnt>

<itemPageCnt>1</itemPageCnt>

</msgHeader>

<msgBody>

<itemList>

<EXTIME_MIN>3</EXTIME_MIN>

<EXTIME_SEC>129</EXTIME_SEC>

<INFO_OFFER_TM>2017-07-20 17:30:44.0</INFO_OFFER_TM>

</itemList>

<itemList>

<EXTIME_MIN>8</EXTIME_MIN>

<EXTIME_SEC>468</EXTIME_SEC>

<INFO_OFFER_TM>2017-07-20 17:28:01.0</INFO_OFFER_TM>

</itemList>

</msgBody>

</ServiceResult>

관심있는부분은 시간이니 나머지는 삭제했다

3131초에 호출했는데

저장시간은 30 44(47), 281(210) 차이가 난다

1분미만이거나 1분단위면 좋을텐데 2분이 넘는건 뭐지...

한건만 해서는 저장 간격을 모르겠으니

 

테스트를 위해 1, 10, 30, 1(60) 10회씩 데이터를 받아왔다

itemList 순서가 바뀔수 있으니 노선번호, 차량번호 혹은 둘다 사용해서 봐야한다

 

데이터 확인을위해 DB Table 구성하진 않고 XML LOG 확인하려니

생각보다 양이 많았다 그래봐야 40... 그래도 LOG에서 XML 추출해서 비교했습니다

평균은 이쪽데이터를 쓸테니 수집 요일, 시간 컬럼을 추가할 필요가 있긴하지만

호출시간 한개만 넣고 나머진 함수 혹은 프로그램에서 처리해도 상관 없을듯 하다

 

노선이 2개지만 한개만 뽑아서 정리했다

  • 1

수집시간

도착예정시간()

도착예정시간()

정보생성시간

2017-07-20 17:53:40.0

1

29

2017-07-20 17:53:11.0

2017-07-20 17:53:41.0

1

29

2017-07-20 17:53:11.0

2017-07-20 17:53:42.0

1

29

2017-07-20 17:53:11.0

2017-07-20 17:53:43.0

1

29

2017-07-20 17:53:11.0

2017-07-20 17:53:44.0

1

29

2017-07-20 17:53:11.0

2017-07-20 17:53:45.0

1

29

2017-07-20 17:53:11.0

2017-07-20 17:53:46.0

1

29

2017-07-20 17:53:11.0

2017-07-20 17:53:48.0

1

29

2017-07-20 17:53:11.0

2017-07-20 17:53:49.0

1

29

2017-07-20 17:53:11.0

2017-07-20 17:53:50.0

1

29

2017-07-20 17:53:50.0

 

  • 10

수집시간

도착예정시간()

도착예정시간()

정보생성시간

2017-07-20 17:54:03.0

1

29

2017-07-20 17:53:50.0

2017-07-20 17:54:13.0

1

29

2017-07-20 17:53:50.0

2017-07-20 17:54:23.0

1

29

2017-07-20 17:53:50.0

2017-07-20 17:54:33.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:54:43.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:54:53.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:55:03.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:55:13.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:55:24.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:55:34.0

8

428

2017-07-20 17:54:33.0

 

  • 30

수집시간

도착예정시간()

도착예정시간()

정보생성시간

2017-07-20 17:56:17.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:56:47.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:57:17.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:57:47.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:58:17.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:58:47.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:59:17.0

8

428

2017-07-20 17:54:33.0

2017-07-20 17:59:47.0

8

428

2017-07-20 17:54:33.0

2017-07-20 18:00:17.0

8

428

2017-07-20 17:54:33.0

2017-07-20 18:00:47.0

8

428

2017-07-20 17:54:33.0

이건뭐 8 계속 떠있다가 지나갈 느낌, 차가 밀려서 서있으면 저장을 안하는건가...?

 

  • 60

수집시간

도착예정시간()

도착예정시간()

정보생성시간

2017-07-20 18:07:59.0

10

566

2017-07-20 18:07:41.0

2017-07-20 18:08:59.0

9

498

2017-07-20 18:08:21.0

2017-07-20 18:09:59.0

7

388

2017-07-20 18:09:24.0

2017-07-20 18:10:59.0

7

388

2017-07-20 18:09:24.0

2017-07-20 18:11:59.0

7

388

2017-07-20 18:09:24.0

2017-07-20 18:12:59.0

5

274

2017-07-20 18:12:50.0

2017-07-20 18:14:00.0

4

222

2017-07-20 18:13:41.0

2017-07-20 18:15:00.0

4

222

2017-07-20 18:13:41.0

2017-07-20 18:16:00.0

4

222

2017-07-20 18:13:41.0

2017-07-20 18:17:00.0

4

222

2017-07-20 18:13:41.0

 

1, 10, 30, 60 단위로 10건식 샘플을 받아왔는데

저장 간격이 감이 안잡힌다

데이터 수집할때 알았으면 2, 5, 10, 30 이렇게 수집했을텐데

야밤에 보려니 없다...

그나마 의미있는건 1분단위로 수집한게... 의미가 있다

기상청은 수집주기를 알려주기라도 하지... 이건 ...

잠이나 자야겠다

 

  • 10초간격으로 30분동안 조회(180)하였다

버스 순번은 같은 버스를 나타내며

중복건수는 동일버스중 정보생성시간이 같은걸 의미

버스 순번

정보생성시간

중복건수

1

2017-07-21 08:08:14.0

8 / 6 = 1.3333

1

2017-07-21 08:10:06.0

3

2

2017-07-21 08:10:30.0

4

2

2017-07-21 08:11:17.0

2

2

2017-07-21 08:11:32.0

4

2

2017-07-21 08:12:10.0

3

2

2017-07-21 08:12:42.0

2

3

2017-07-21 08:13:06.0

1

3

2017-07-21 08:13:17.0

8

3

2017-07-21 08:14:37.0

2

3

2017-07-21 08:14:56.0

3

3

2017-07-21 08:15:21.0

2

3

2017-07-21 08:15:42.0

14 / 6 = 2.3333

3

2017-07-21 08:18:05.0

9

3

2017-07-21 08:19:40.0

12 / 6 = 2

3

2017-07-21 08:21:44.0

4

3

2017-07-21 08:22:17.0

6

3

2017-07-21 08:23:24.0

3

4

2017-07-21 08:23:48.0

4

4

2017-07-21 08:24:36.0

32 / 6 = 5.3333

4

2017-07-21 08:29:54.0

1

4

2017-07-21 08:30:08.0

3

4

2017-07-21 08:30:39.0

7

4

2017-07-21 08:31:45.0

3

5

2017-07-21 08:32:17.0

6

5

2017-07-21 08:33:16.0

4

5

2017-07-21 08:34:01.0

1

5

2017-07-21 08:34:09.0

3

5

2017-07-21 08:34:33.0

17 / 6 = 2.8333

5

2017-07-21 08:37:26.0

3

5

2017-07-21 08:38:05.0

2

5

2017-07-21 08:38:16.0

1

5

2017-07-21 08:38:29.0

3

... 32 * 10 = 320 / 60 = 5.3333 6분정도 업데이트 안된게 있다니...

저장 주기는 점점더 미궁속으로...

어쩔수 없이 버스위치정보 조회 서비스를 봐야겠군...

근데 보나마나 같을듯....

 

  • 참고

정류소 ID(7자리)를 키로 잡기로 했다

5자리는 Null이 있기도 하고 중복건수도 존재해서 PK는 무리

건수만 봤을때는 정류소 ID(5자리) 건이 104건정도 적게 보인다

 

중복 넣는걸 싫어하는 1인으로 전체 노선별 경유 정류소 목록 조회 9480건이나 되는 데이터를 좀 살펴보니 정류소 명, 정류소 ID, 위/경도, 도로명 등은 중복된건이 많이 보였다

정류소 타입은 같은 정류소를 가르키는데도 있거나 없거나...

그건 노선별로 기점, 종점이 달라서 일수도 있지만 그건 노선에 넣으면될것 같고..

 

실시간(?)으로 제공되는 버스위치정보, 정류장 도착정보는 몰라도

기초데이터는 정제해야 하고싶은맘이니..

근데 사실 버스노선변경되고 하면 해당작업을 다시해야되는 받아써야되는 고객입장이긴 함

정기 업데이트 등의 작업을 지금 신경쓸 필요는 없으니

괜찮을지도...


*PS.

설마 활용신청 자동승인인 서비스인데 무슨일이 있겠냐만은.. 

문제 있을시 알려주시면 내리겠습니다

반응형

관련글 더보기

댓글 영역