본문 바로가기
개발/카카오톡 봇

카카오톡 봇 만들기 - 8 - 실시간 지하철 도착정보 받아오기

by 문둘기 2019. 10. 29.

현재 카톡방에서 사용하는 모습

 

 

아직 예외처리를 하나도 못해서 버그가 많기때문에 코드는 나중에 다 고치고 공개하겠다..
언제가 될지는 모름

 

개발관련 지식이있다면 아래 내가 뻘짓했던 글만 보고 쉽게 구현할수있을것이다

 

먼저 서울데이터열린광장에서 서울시 지하철 실시간 도착정보의 API를 이용해야한다 

 

서울 열린데이터광장

분류 교통 원본시스템 바로가기 [TOPIS] 서울시 교통정보과 저작권자 서울시 제공기관 서울특별시 제3저작권자 없음 담당자 오현민 () 원본형태 DB 데이터공개일자 2015.02.28 갱신주기 비정기(자료변경시) 제공부서 도시교통본부 교통정보과 태그 서울 , 지하철역 , 도착 , 상행선 , 하행선 , 내리는문 , 출입문 , 환승 , 노선 , 도착예정시간 , 열차번호 , 종착역 데이터수정일자 2018.05.02 이용허락조건 저작권자표시(BY) 이용이나 변경

data.seoul.go.kr

 

이용하려면 API 키를 발급받아야되는데 

일반 인증키로는 안되기때문에 삽질하지말고 실시간 지하철 인증키 신청하자..

 

근데 위치기반 서비스 사업 신고필증이나 이용신청서 작성이 필요하다 ..

 

 

키 신청할때 이렇게 신청서를 요구한다,, 그래서 일단 보류했다

 

하지만 이렇게 sample 키를 제공해준다 !

http://swopenapi.seoul.go.kr/api/subway/sample/xml/realtimeStationArrival/0/5/서울

난 이것을 이용해서 구현했다.. 반쪽짜리 구현인셈이다 

URL에 접속하면.. 

이런식으로 xml이 출력된다 

나는 json을 이용할것이기 때문에 url에서 xml 부분을 json으로 바꿨다 

 

요청인자들은 데이터광장 페이지에 이렇게 설명을 잘해놨으니 참고하면된다 

 

지하철역명은 만약 이수역일경우 

http://swopenapi.seoul.go.kr/api/subway/sample/xml/realtimeStationArrival/0/5/이수
이렇게 입력하면안되고 

http://swopenapi.seoul.go.kr/api/subway/sample/xml/realtimeStationArrival/0/5/총신대입구(이수)
이렇게 정확한 이름을 입력해줘야한다 

 

그 정확한 이름은 데이터광장에서 아래 File 탭을 가면 엑셀을 다운받을수있다 

 

 

파일을 열어보면 

이런식으로 정확한 역이름을 볼수있다 

 

 

그래서 결국 카카오톡봇에서는 어떻게 구현했나,..

 

/지하철 총신대입구(이수) 

이런식으로 메시지가 오면 

http://swopenapi.seoul.go.kr/api/subway/sample/json/realtimeStationArrival/0/5/총신대입구(이수) 

 API주소로 데이터 요청하고, 반환된 데이터에서 필요한 부분만 뽑아서 메시지를 출력하면된다 

현재 문제가 좀 많은데, 일단 샘플API키로 하기때문에 데이터를 5개까지만 뽑아올수있다

그이상을 요청하게될경우

{"status":500,"code":"ERROR-335","message":"샘플데이터(샘플키:sample) 는 한번에 최대 5건을 넘을 수 없습니다. 요청시작위치와 요청종료위치 값은 1 ~ 5 사이만 가능합니다.","link":"","developerMessage":"","total":0}

이런 에러 메시지를 볼수있을것이다

사당역이나 신도림역같은 환승역의 경우 실시간 도착정보가 8개이상이 되기도하는데, 
샘플키로는 그중 5개만 받아올수있어서 제대로된 구현에 한계가있으므로 다 받고싶으면 api키를 신청해야한다 
위에도 말했듯이 귀찮아서 일단 보류상태

 

또다른 문제는 json으로 데이터뽑아오는게 하드코딩된 상태라서
해당역의 지하철 도착정보가 5개이하일경우 에러가 뜨는것 , 이건 하드코딩으로 대충만들어서 나오는 에러라서 금방고칠수있다 

 

그리고 api 자체가 답을 안줄경우이다 

이런식으로 에러가 뜬다 , 가끔씩 나오는데 왜그러는지 정확히 파악은 못했다   
이또한 샘플키라서 그런것일수도.. 

 

여러모로 제대로 굴리려면 예외처리가 필요한상태이다