상세 컨텐츠

본문 제목

공공데이터 API - 대전광역시 버스정보 2부 (정류소정보조회 서비스, 버스위치정보 조회 서비스)

programing/API

by ZelKun 2017. 8. 14. 10:00

본문

반응형


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

 


계발계정은 트래픽1000회 제한이 있어

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

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


[공공데이터 - 대전광역시 버스정보 1부http://zelkun.tistory.com/181]과 연결되니 참고바람


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


  1. 버스정류장정보 조회 서비스 / stationinfo

 정식명칭: 정류소정보조회 서비스

No

오퍼레이션명(영문)

오퍼레이션명(국문)

필수 key

1

getStationByStopID

정류소ID(7자리)별 정류소 정보 조회

BusStopID

2

getStationByUid

정류소ID(5자리)별 정류소 정보 조회

aroId arsId

 

  • 정류소 정보조회 응답명세

정류장... 정류소... 뭔차이냐 명칭좀 통일하지...

No

항목명(영문)

항목명(국문)

항목크기

항목설명

1

ARO_BUSSTOP_ID

정류소ID(5자리)

5

정류소ID(대전5자리)광역(6자리)

2

BUSSTOP_ENG_NM

정류소영문명칭

200

정류소영문명칭

3

BUSSTOP_NM

정류소명칭

200

정류소명칭

4

BUS_NODE_ID

정류소ID(7자리)

7

정류소ID(7자리)

5

GPS_LATI

정류소 위도좌표

20

정류소 위도좌표

6

GPS_LONG

정류소 경도좌표

20

정류소 경도좌표

7

ROAD_NM

도로명

200

도로명

8

ROAD_NM_ADDR

도로명주소

200

도로명주소

9

ROUTE_NO

경유노선정보

200

경유노선정보

 

정류소ID를 알기위해선 버스노선정보 서비스를 통해서

전체 노선에 해당하는 정류소ID를 받아와야함

그냥 엑셀로 제공해주지...

신기하게도 여기는 명칭이 200자.. 앞에선 50자

 

응답명세에는 정류소ID가 5, 6 자라고 명시되있는데

실상 7자리도 있다 141건이나...

웃긴건 필수키는 7자리라고 명시되있다

알면 좀 수정해놓지... 7자리는 뭔거지.. 대전 5자리, 광역시 6자리 라는데...

 

예전에 도로명주소 작업할때의 경험을 살려서

시도, 시군구, 읍면동 코드를 사용하는건가? 란 의문이 들어

left로 2자리만 잘라서 보니 전~혀 아니다

이런 설레발...

 

규칙이 뭔지 모르겠다... 좀더 확인해보려면 위경도를 기준으로...

지도에 뿌려보면될것 같긴한데 도로명작업하고 GIS툴을 지워서 다시 설치해야한다

망...

 

일단 조회를 시도해보기로 했다

대전이 5자리니 5자리인것만 뽑아서 중복제거하고 봐야겠다

 

전체 노선별 정류장 데이터에서 7자리 기준으로 중복제거 건수는 다음과 같다

하는김에 5자리도 같이 정리

전체 노선별

중복제거 건수

BUS_NODE_ID 건수

3,165건

BUS_STOP_ID 건수

3,061건

조회 건수는 총 3165건이나 결과 값이 없는 건수가 있을테니

확인은 해봐야 한다

 

 

  • 정류소ID(7자리)별 정류소 정보 조회

근데 시작하자마지 결과값이 없다는 메시지만 나온다...

분명 필수값은 BusStopID 인데 말이다

 

결과적으로 BUS_STOP_ID 로 표기되던 정류소ARS-ID가 아니였다...

BUS_NODE_ID로 표기되는 정류소ID 였다...그래서 7자리라고 한거군

정류소 ID를 왜... 아니다 태클걸게 너무 많다

필수키 대소문자나 컬럼에 _ 넣는거나 ....

 

무튼 중복제거하면 3,165건이다

다 조회하려면 4일이나 걸린다는 소리다... 1일 조회 1,000건

조금씩 조금씩 수집해야 하나보다 보통 서버(IP)당 1000번? 일텐데

Servicekey 값으로 카운트를 한다 IP를 바꿔도 인증 에러난다

신청할때 서버용으로 안해서 그런건가...

서버용으로 신청하려면 url도 넣고 해야하는데 개인용이라 서버가 없다.

 

출처: http://openapitraffic.daejeon.go.kr

 

  • 정류소ID(5자리)별 정류소 정보 조회

필수 값인 aroId 오타아님 arsId가 5자리지만 6, 7자리 까지 있는 BUS_STOP_ID가 해당되는듯 하다

샘플에 보이는 값을 BUS_NODE_ID에선 찾을 수 없지만 BUS_STOP_ID에선 찾을 수 있다

그래도 혹시 모르니 6자리, 7자리 값도 하나씩 테스트로 날려봤다

 

6자리는 결과 값을 가져오지만 7자리는 결과 값이 없었다

응답 명세가 같으니 정류소ID 7자리, 5자리 둘다 이용해서 전체 정류소를 조회해서

하나의 테이블에 넣기로 했다

 

2일이면 충분하다 도합 2천건이니...

그래도 혹시모르니 4일동안 수집을 해보긴 해야할 것 같다...

 

의외의 결과가 보였다. 5자리 조회결과는 itemCnt가 2-3건인게 꽤 되었다

4일간 각각 받아야할 이유가 생겼다.. 건수 비교가 시급하다..

 

2개의 정류소 정보조회서비스 데이터를 하나의 테이블에 넣고

중복을 제거하고 BUS_NODE_ID를 카운트를 해보니 3,110건이다 (2일간 수집..)

노선정보조회를 이용해 수집한 BUS_NODE_ID 가 3,165건인데 비해

55건이 모자르단 소리다 근데 카운트 건이랑 다르게...

없는 BUS_NODE_ID 만 뽑아보니 71건으로 모두 7자리였다

뭘 놓친건가.. 알수 없지만....

- 4일간 각각 수집한 결과는 총 6,183건 이며 중복 제거 시 3,137건이다

대전이 5자리라고 했으니 총 2,769개의 정류장이 있나봄 (length 조건으로 추출)

 

참고로 BUS_STOP_ID에는 NULL도 있다 사실 NULL보다는 데이터가 없다고 해야겠지만

데이터가 없으면 NULL로 들어가게 해놨다

DB에 넣고 BUS_STOP_ID를 꺼내서 요청할경우 Null은 당연히 응답이 없을테니

빼고 요청해야겠다...

 

  • 4일간 노선조회 결과는 다음과 같다
  • 실데이터 분석따위 없이, 순수하게 건수비교만했으니 참고
  • 전체건수등은 개인별로 차이가 있을수 있으니 너무 믿지 마시길...

BUS_NODE_ID, BUS_STOP_ID, ARO_BUSSTOP_ID 기준마다 건수가 다름... 참고만

기준

7자리

5자리

조회결과 총 건수(중복제거)

3,102건

3,083건

결과값 없음

63건

72건

전체노선 정류장조회건수 차이

63건

80건

근데 실수로 7자리 노선조회 테이블을 날려먹어서 데이터 건수만 보고 비교를 못했다

4일간 다시 받아야한다... 뭐 상관 없나...

4일간 다시 착취해서 건수를 비교하니 좀 차이가 나긴했지만

BUS_NODE_ID를 기준으로 할때는 차이가 없다

 

혹시나 싶어 전체 노선의 5자리 ID(BUS_STOP_ID) 건수와 비교해보니 1000건정도 차이가 발생해서

없는것만 다시 받아왔더니 결과 값 없음은 1건이 더 추가된 72건이였다

Limit 변경하는 과정에서 이전걸로 호출한게 있나보다 PK를 안잡아놨으니 에러도 안나니..

중복제거하면 1000건정도가 없어져서 급하게 다시 돌렸다

5자리 조회 건수는 22건 정도의 차이가 난다

 

버스번호는 현재로선 경유노선 정보에 정류장에 지나는 노선번호가 전부 들어있다

출퇴근 이용버스만 찾으면되는데...

뭔가 원하는 API아닌건가란 의구심이 들기 시작했다

버스번호가 아닌 노선ID로 버스를 추측해야하는건가...

 

비고라도 넣어줄법한데 말이다 급행3번 이런식으로...

아직 다 안봐서 그런거겠지... 마냥 수집만 할수 없으니 다음단계로 넘어가기로 했다

 

  1. 버스위치정보 조회 서비스 / busposinfo


No

오퍼레이션명(영문)

오퍼레이션명(국문)

필수 Key

1

getBusPosByRtid

노선별 버스 위치정보 조회 서비스

busRouteId

 

  • 버스위치 정보조회 요청명세

No

항목명(영문)

항목명(국문)

항목크기

항목설명

1

ARR_TIME

이벤트발생시각

 

이벤트발생시각

2

BUS_NODE_ID

정류소ID(7자리)

100 7

정류소ID(7자리)

3

BUS_STOP_ID

정류소ID(5자리)

100 7

정류소ID(5자리)

4

DIR

방향성

1

0:상행, 1:하행

5

EVT_CD

이벤트 유형

10

1:정주기정보(현재위치),

2:이벤트정보(정류소,노드 검출)

6

GPS_LATI

차량 위도 좌표

5

차량 위도 좌표

7

GPS_LONG

차량 경도 좌표

10

차량 경도 좌표

8

ROUTE_CD

버스노선 일련번호(8자리)

10 8

버스노선 일련번호(8자리)

9

STRE_DT

저장일자

14

저장일자

10

TOTAL_DIST

기점으로부터 누적 운행거리

10

기점으로부터 누적 운행거리(m)

11

ud_type

상행/하행 정보

1

상행/하행 정보(0:상행 1:하행)

 

이벤트발생시각은 어째서 비어있는건지...

년월일시분초(20170707160101) 14자리 이니 문자로 넣거나 날짜로 넣어도 될듯...

저장일자는 14자리라고 표시한건 뭐지..

정류소ID는 왜 100인지 알수 없는 노릇.. 게다가 버스노선 일련번호(8자리)... 인데 10이고..

 

실시간 버스정보 조회서비스로 보인다

새벽에 작업하면 한건도 안나올듯... (실제로 안나옴)

 

출처: http://openapitraffic.daejeon.go.kr

 

근데 ROUTE_CD 노선 ID 표기할땐 언제고 명칭이 바꼈다

통일좀 시켜주지... 전체적으로 말이다 헷갈려서 다시 찾아봐야하니 귀찮다

작업하면 할수록 맘에 안들고 있음..

 

실시간(?) 제공인만큼 전체건수는 없을테고..

출근시간대, 퇴근시간대 2번에 걸처 환승 정류장이랑 파악해서 요걸로 평균산출하면 될듯..?

그래도 정류장 버스도착 정보 조회 서비스 가 있으니 일단 패스


*PS.

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

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

반응형

관련글 더보기

댓글 영역