매일 눈팅만 하다가 처음으로 글을 써보네요.
지하철 도착정보, 수질/대기현황, 분실물, 문화, 일자리 정보 등등
서울시청에서 제공하는 공공정보 API 서비스 입니다.
한번도 안해본 soap을 사용하느라...
한나절동안 열심히 구글링만 했네요..
맞게 쓰고있는지는 모르겠고... 어쨋든 결과는 나오네요ㅡㅡ;
http://mobile.openapi.seoul.go.kr/
회원가입하고 인증키 발급신청하면 됩니다.
저는 신청하고 하루정도 걸렸네요.
위 사이트에 연동규격서도 제공하니 받아보시면 되겠습니다.
필요한 라이브러리는 ksoap과 commons-codec 라이브러리를 사용했습니다.
구글에서 ksoap 과 base64/connons-codec 검색하시면 쉽게 찾을수 있을겁니다.
reqeust와 response 소스입니다.
import org.apache.commons.codec.binary.Base64;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity implements OnClickListener{
private static final String METHOD_NAME = "searchSubwayArriveListByFrCode";
private static final String SOAP_ACTION = "http://schemas.xmlsoap.org/soap/envelope/SubwayArriveService?wsdl/"+METHOD_NAME;
private static final String NAMESPACE = "http://service.arrive.subway.openapi.ubizvalley.com";
private static final String URL = "http://115.84.165.130/SeoulOpenAPI/services/SubwayArriveService?wsdl";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.btn).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.btn :
test();
}
}
public void test(){
Element h = new Element().createElement(NAMESPACE, "authInfo");
Element username = new Element().createElement(NAMESPACE, "userId");
username.addChild(Node.TEXT, "YOUR ID");
h.addChild(Node.ELEMENT, username);
Element authkey = new Element().createElement(NAMESPACE, "authKey");
authkey.addChild(Node.TEXT, encodeBinary("YOUR AUTHKEY".getBytes()));
h.addChild(Node.ELEMENT, authkey);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.headerOut = new Element[1];
envelope.headerOut[0] = h;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("frCode", "P153");
request.addProperty("forGubun", "1");
envelope.setOutputSoapObject(request);
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
androidHttpTransport.debug = true;
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
System.out.println(androidHttpTransport.requestDump);
SoapObject sobj = (SoapObject)envelope.getResponse();
Log.e("xx",sobj.toString());
}catch (Exception e){
e.printStackTrace ();;
}
}
public static String encodeBinary(byte[] src) {
try {
return new String(Base64.encodeBase64(src));
} catch(Throwable e) {
e.printStackTrace();
}
return null;
}
}
파싱해서 쓰시면 됩니다..
개인적으로 지하철 도착정보를 제공하는게 참 좋으네요..
실제 정확하게 맞는지는 저도 모르겠습니다.
그럼 모두 즐프~~
지하철 도착 정보가 제공이 된다면 기존에 있던 지하철 어플들이 살짝(?) 견제가 될 수도 있겠네요 ㅋㅋ
역시 소프트웨어는 무한 경쟁임 ㅠㅠ