서울 지하철 open api 신청 방법

서울시 버스 도착 정보 조회

● API 사용 신청하기

1. 회원가입 후 로그인 진행

우선 아래의 공공데이터 포털에 접속 한 후 회원가입후 로그인을 합니다.

www.data.go.kr/

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

2. 원하는 Open API를 검색

로그인을 하고 난 이후에 맨 위 상단에 데이터찾기 -> 데이터목록 을 찾아 클릭 한 후 검색 조건을 지정하여 API를 검색할 것입니다. 이때 우리가 사용할 API는 서울시 버스 도착 정보 조회입니다.

그냥 검색하면 너무 많은 버스 관련 API들이 검색되기 때문에 제공기관별검색을 눌러 자치행정기관 - 서울특별시 - 서울특별시를 선택해줍시다.

그 후 검색창에 "버스 조회" 를 검색하면 중간 부분에 오픈 API가 검색이 되는데 버스도착정보조회 서비스가 우리가 사용할 API가 됩니다.

눌러서 들어가보면 4개의 API를 사용할 수가 있는 것을 볼 수 있습니다.

API에 대한 간단한 설명을 아래의 표로 정리하였습니다.

일련번호 

API명(국문) 

상세기능명(영문) 

상세기능명(국문) 

1 

버스도착정보조회 서비스 

getArrInfoByRouteAllList 

경유노선전체정류소별도착예정정보목록조회 

2 

버스도착정보조회 서비스 

getArrInfoByRouteList 

정류소노선별도착예정정보목록조회 

3 

버스도착정보조회 서비스 

getLowArrInfoByRouteList 

정류소의특정노선교통약자용도착예정정보목록조회 

4 

버스도착정보조회 서비스 

getLowArrInfoByStIdList 

정류소별교통약자용도착예정정보목록조회 

3. 활용신청

검색했다고 그냥 쓸 수 있는 것은 아니고 활용 신청하면 API를 사용할 수 있습니다. 오른쪽 활용신청을 클릭해줍니다.

여기서 활용목적은 앱개발이며 간단히 어떻게 사용할 것인지만 적어주면 됩니다. 밑에 시스템 유형은 일반으로 지정해주면 됩니다.

그리고 더 아래에는 일일 트래픽 1000을 허용하며 추후에 신청하여 늘릴 수 있다고 합니다.

이렇게 신청했다고 바로 API가 사용가능한 상황은 되지 않고 1~2시간 정도가 지나야 API를 사용할 수 있습니다.

4. API 테스트 해보기

우선 웹사이트상에서 미리보기를 확인할 수 있습니다. 저는 특정 노선 ID를 통해서 경우노선 전체를 확인해보고자 합니다. 110A 고려대 버스의 노선 정보가 궁금합니다. 이때 버스 노선 ID는 100100016입니다. 버스 노선 정보 역시 공공데이터포털에서 잘 검색하면 엑셀표로 된 것이 나오니까 찾아보시고 확인해보세요. 혹은 아래의 파일을 참고하시기 바랍니다.

서울시 버스노선ID 정보(20190508).csv

0.07MB

이것을 샘플데이터에 입력해주고 미리보기를 눌러보면 xml으로 정보를 잘 얻어오는 것을 확인해볼 수 있습니다.

API 사용해보기

1. 인터넷 사용권한 

AndroidManifest.xml에서 인터넷 사용권한을 지정해줍니다. 

<uses-permission android:name="android.permission.INTERNET" />

2. Traffic 허용

그리고 다음과 같이 xml을 지정하여 우리가 사용하는 api 사이트의 traffic을 허용해주어야합니다. 아래와 같이 network_security_config.xml을 파일을 만든 후에 내용을 입력해주세요.

network_security_config.xml

<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">ws.bus.go.kr</domain> </domain-config> </network-security-config>

이 파일을 다시 AndroidManifest.xml 파일에 지정해주어야 트래픽이 허용됩니다.

<application android:allowBackup="true" ... android:theme="@style/Theme.Chat" android:networkSecurityConfig="@xml/network_security_config">

3. HttpURLConnection으로 데이터 받기

네트워크를 사용할 것이니 Thread를 사용합니다. 아래는 공공데이터에서 제공하는 getArrInfoByRouteAll를 활용하는 자바 샘플 코드입니다. 

public class NetworkThread extends Thread{ @Override public void run() { try { StringBuilder urlBuilder = new StringBuilder("//ws.bus.go.kr/api/rest/arrive/getArrInfoByRouteAll"); Log.e("MY_TEST","urlBuilder"); urlBuilder.append("?" + URLEncoder.encode("ServiceKey", "UTF-8") + "=servicekey"); urlBuilder.append("&" + URLEncoder.encode("busRouteId", "UTF-8") + "=" + URLEncoder.encode("100100016", "UTF-8")); URL url = new URL(urlBuilder.toString()); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Content-type", "application/json"); BufferedReader rd; if (conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) { rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); } else { rd = new BufferedReader(new InputStreamReader(conn.getErrorStream())); } StringBuilder sb = new StringBuilder(); String line; while ((line = rd.readLine()) != null) { sb.append(line); } Log.e("BUS_API_TEST",sb.toString()); rd.close(); conn.disconnect(); }catch(Exception e){ e.printStackTrace(); } } }

위에서 보시면 ws.bus.go.kr이 우리가 트래픽을 허용한 주소라는 것을 알 수 있습니다. servicekey는 각자 자신이 받은 servicekey를 적어주시면 됩니다. 활용신청이 완료되었다면 인증키가 보일텐데 인코딩된 키를 이 부분에 사용하시면 됩니다.

이후 MainActivity에서는 그 쓰레드를 실행시키면 되지요.

public class MainActivity extends AppCompatActivity { private NetworkThread thread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); thread=new NetworkThread(); thread.start(); } }

이제 실행 후 확인해보면 정상적으로 값을 로그로 출력함을 확인해볼 수 있습니다.

이 후부터는 이제 xml 데이터를 파싱해서 알맞게 사용하시면 됩니다.

발생할 수 있는 오류

만약 SERVICE KEY IS NOT REGISTERED ERROR 가 발생했다면 등록한 Service ID가 틀렸거나 아직 서비스 ID가 등록되어있지 않았기 때문에 조금 더 기다렸다가 해보시기 바랍니다.

만약 응답을 아예 받아올 수 없는 경우에는 ws.bus.go.kr 에 트래픽 허용을 안해줘서 그렇습니다. 위 network_security_config.xml의 내용을 확인하여 주세요.

Toplist

최신 우편물

태그