티스토리 뷰

안녕하세요


지난 포스팅에서 API 키를 발급받았으니 직접 활용하는 예제를 작성해보도록 하겠습니다!





먼저 필요한 요구사항은 Node.js가 설치되어있어야합니다!


http://codevkr.tistory.com/12








API에 대한 사용방법(메뉴얼)을 확인해봅시다.






워드파일로 첨부되어있는 파일을 열어보시면 메뉴얼을 확인하실 수 있습니다.







확인해보니 위와 같은 방법으로 요청하면 됩니다.


http://openapi.gbis.go.kr/ws/rest/busarrivalservice/station?serviceKey=키값&stationId=정류소ID





또한 경기 버스정보 홈페이지에서도 메뉴얼을 확인하실 수 있습니다.


http://www.gbis.go.kr/gbis2014/publicService.action?cmd=openApiRest








테스트 부분에 가서 테스트해보니

아래와 같이 XML로 데이터가 응답되는 모습을 확인하실 수 있습니다.



위와 같은 데이터를 필요한 부분만 추출하여 활용하면 됩니다!


원하는 폴더에서 npm init 명령으로 package.json 파일을 생성합시다.


그리고 모듈 2개를 설치해야합니다.


request 모듈과 cheerio 모듈입니다.


npm install request --save

npm install cheerio --save


설치가 완료되었으면 js 파일을 하나 생성하고 코드를 작성해봅시다.






위와같이 첫번 째 줄에 두줄을 추가해줍니다.


방금 설치한 request와 cheerio 모듈을 변수에 불러오는 코드입니다.





3개의 변수를 선언해줍니다.


$url 에는 메뉴얼에 나와있는 REST API 경로를 넣어주시면 됩니다.

$KEY 에는 발급받은 API키를 넣어주시면 되구요

$station에는 임시 테스트용 정류소 ID를 넣어줍니다.





http://openapi.gbis.go.kr/ws/rest/busarrivalservice/station?serviceKey=키값&stationId=정류소ID

와 같은 형식으로 만들기 위해 변수와 문자열을 합쳐서 하나의 문자열로 만들어줍니다.


아래에서 console.log로 콘솔에 출력해보는 모습입니다.




그리고 위의 코드도 추가해줍니다.


( ' 따옴표가 아닌 ` 백틱 문자입니다! - 숫자 1옆에 있음)



먼저 busArrivalList태그로 구분하여 데이터를 나눈 후 하나하나씩 돌며

no1, no2 변수에 도착할 버스의 차량 번호를 추출하는 모습입니다.


차량번호는 plateNo1, plateNo2태그 안에 저장되어있습니다.


find("찾을 태그, 또는 클래스, 아이디 등")


find 함수로 해당 영역을 찾을 후 text() 함수를 통해 텍스트만 추출하는 모습입니다.


JQuery와 사용하는법이 매우 비슷한걸 아실 수 있습니다.


태그 구성은 아래에서 확인하실 수 있습니다.


busArrivalList로 구분지어보면 아래 사진에서는 2개의 데이터로 나눌 수 있습니다.


그리고 각각 plateNo1, plateNo2가 있는것을 확인하실 수 있습니다.

predictTime1, predictTime2는 버스의 도착시간입니다. (단위는 분)



자세한 사항은 경기버스정보 홈페이지의 메뉴얼에서 확인가능합니다

(아래 이미지 참고)





실행시켜봅시다.


node 파일이름.js



변수와 문자열을 이은 URL이 처음으로 출력되고, 그 아래로 버스 정보가 출력되는 모습을 확인하실 수 있습니다.


버스 차량번호뿐만 아니라 predictTime1, predictTime2 태그의 데이터를 파싱하여 도착시간까지 확인해볼 수 있습니다.




아래는 그에 대한 예제입니다.









이와같이 오픈 API를 이용하여 공공데이터를 조회하여 활용할 수 있습니다!


버스 API는 이뿐만이 아니라 정류장 조회, 버스 정보 조회 등 여러 API가 있으니 API를 혼합하여 더욱 완성도 높게


개발해보실 수 있습니다!





감사합니다.





댓글
  • 프로필사진 :AMD: consloe log 할때 ` 이거 몰라서 한참 고민했네유 ㅠ
    좋은글 감사합니다
    2018.08.29 11:55
  • 프로필사진 BlogIcon 이근둥 감사합니다 ㅜㅜ,, 본문에 내용 추가했습니다 2018.08.30 16:17 신고
  • 프로필사진 꾸액 cannot find module require 이라 뜨는데 이건 어떻게 해결하나요ㅜㅜ? 2018.09.10 01:16
  • 프로필사진 BlogIcon 이근둥 require 라는 모듈을 찾지 못한다는 오류입니다. 아마 request를 작성하셔야하는데 require로 잘못 쓰신것같습니다. 2018.09.10 16:20 신고
  • 프로필사진 남쓰 혹시 라즈베리파이에 버스도착정보를 확인하려하는데 어떻게 해야하나요? 2019.04.27 09:35
  • 프로필사진 BlogIcon 이근둥 라즈베리파이에 노드를 설치하고 본문 과정과 같이 코드를 실행시키면 됩니다. 정보를 제공하는 방식에는 웹 페이지, 챗봇 등이 있으므로 상황에 맞는 방식을 선택하여 개발하시면 될 것 같습니다~! 2019.04.27 10:23 신고
  • 프로필사진 비밀댓글입니다 2019.07.01 00:21
  • 프로필사진 BlogIcon 이근둥 최종적으로 합친 URL을 API 서버로 Request 해야 합니다. 코드에서 request(url, ...) 부분 참고해주세요 2019.07.01 09:02 신고
  • 프로필사진 비밀댓글입니다 2019.07.01 10:09
  • 프로필사진 kyb syntaxError: C:\project\NodeJS\blog\bus.json: Unexpected token l in JSON at position 0
    이게 계속 뜨는데 어떻게 해결해야 할까요?? ㅠㅠ
    2019.08.14 23:34
  • 프로필사진 BlogIcon 이근둥 파일명을 .json이 아닌 .js 파일로 변경해주시면 될 것 같습니다. 2019.08.16 09:47 신고
  • 프로필사진 비밀댓글입니다 2019.08.14 23:35
  • 프로필사진 BlogIcon 이근둥 파일명을 .json이 아닌 .js 파일로 변경해주시면 될 것 같습니다. 2019.08.16 09:45 신고
  • 프로필사진 비밀댓글입니다 2019.09.06 19:41
  • 프로필사진 BlogIcon 이근둥 공공데이터 포털에 다른 지역 버스 API도 있는걸로 압니다. API 명세는 조금 다를 수 있지만 본문과 같은 방식으로 데이터를 받아오고, 가공해서 사용하시면 될 것 같습니다 :) 2019.09.06 19:45 신고
  • 프로필사진 홍은표 TypeError: Cannot read property 'parent' of undefined
    이 오류는 무엇이죠??
    2020.02.20 20:47
  • 프로필사진 BlogIcon 이근둥 참조하고자 하는 객체에 parent 속성이 없는 경우 발생합니다. 참조한 객체를 확인해주세요! 2020.11.19 22:19 신고
  • 프로필사진 . 안녕하세요. 좋은 글 잘 읽고 적용하고 있습니다. 감사합니다. 혹시 받아온 데이터를 변수에 담아 콘솔에 출력하는 건 성공했는데 해당 데이터를 html같은 템플릿에 출력하는 방법에 간단한 힌트라도 알 수 있을까요? 추가적인 작업이 더 필요한지 궁금해서 댓글 남겨봅니다. 2020.11.13 16:43
  • 프로필사진 BlogIcon 이근둥 pug(구 jade)와 같은 템플릿 파일에 변수를 지정하고, 현재 가져온 데이터를 템플릿에 선언한 변수로 주입하면 됩니다. 관련 내용은 쉽게 찾아보실 수 있습니다 :) 2020.11.19 22:21 신고
댓글쓰기 폼