ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • eBest xing api RESTful 요청 예제
    프로그래밍/buycycle 2021. 3. 29. 00:06
    반응형
     

    buycycle.name

    'Buycycle'은 증권사 API를 HTTP Json으로 요청 및 응답 받을 수 있습니다. 요청 받은 Json 메시지를 증권사 API 양식에 맞게 변환해 주는 자바 기반의 오픈 소스 입니다. HTTP RESTful을 제공함으로써 사용자

    buycycle.name

      Buycycle 설치 후 모듈을 실행 하면 기본 localhost 7771번 포트로 바인딩 된다.  이 URL을 통해 HttpURLConnection를 활용하여 json 메시지로 요청 및 응답을 받아 보겠다.

     

    import com.google.common.net.HttpHeaders;
    
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.List;
    import java.util.Map;
    
    public class BuyCyclePostRequest {
    
        public static void main(String[] args){
            try {
                URL url = new URL("http://localhost:7771/data/ebest/query");
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
    
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setRequestProperty(HttpHeaders.CONTENT_TYPE, "application/json;charset=utf8");
                httpURLConnection.setDoInput(true);
                httpURLConnection.setDoOutput(true);
    
                String requestMessage =
                    "{" +
                    "  \"body\": {" +
                    "    \"trName\": \"t1511\"," +
                    "    \"bNext\": false," +
                    "    \"query\": {" +
                    "      \"upcode\": \"001\"" +
                    "    }" +
                    "  }," +
                    "   \"header\": {" +
                    "    \"uuid\": \"7b81c375-d9b9-43c1-8449-77e561a979f2\"" +
                    "  }" +
                    "}";
    
                OutputStream os = httpURLConnection.getOutputStream();
                os.write(requestMessage.getBytes());
                os.flush();
    
                for (Map.Entry<String, List<String>> header : httpURLConnection.getHeaderFields().entrySet()) {
                    for (String value : header.getValue()) {
                        System.out.println(header.getKey() + " : " + value);
                    }
                }
    
                InputStream is = httpURLConnection.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String readLine = null;
    
                while ((readLine = br.readLine()) != null) {
                    System.out.println(readLine);
                }
    
                br.close();
                os.close();
    
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
            }
        }
    
    }
    

      Buycycle의 api를 참조하여 http://localhost:7771/data/ebest/query URL 설정 후 메소드는 'POST' 헤더 값엔 Content-Type 을 application/json 으로 설정 후 요청 하였다.

      테스트 해 본 TR은 '업종현재가'이며 '001'은 종합을 뜻한다.

      해당 요청에 대한 응답은 다음 스크린샷과 같다. 

    응답 헤더 및 응답 바디

      HttpURLConnection을 활용하여 간단한 예제 코드를 구현 하였다.  json 메시지에 대한 부분은 편의를 위해 String으로 하였으나 jackson 이나 gson 등 라이브러리를 활요하면 손 쉽게 json 메시지 구현이 가능하다.

    반응형

    댓글 3

    • hamjii 2022.06.09 17:59

      와우,,,, 세상에나. 비트코인은 REST로 거래가 가능하던데 우리나라 증권사에서 이게 가능하려면 아마 부지하세월일 것이다... 하고 있었더니, 이걸 개인 차원에서 해결해 버리셨네여 !! 어차피 데모계좌에서 궁리 중이었지만, 당분간 스타디하느라 페달 좀 밟아봐야겠슴다. 파생에 해외까지 다 커버되는걸 보면 규모가 정말 어마어마해 보임다. 귀한걸 공개(MIT)해 주셔서 감사드려요 !

    • hamjii 2022.06.10 13:25

      파이썬의 requests로 응답을 얻는데 실패했네요... java는 언감생심 접근도 못 하겠구요, 혹시 Postman이나 Yarc로 응답을 얻는 예제를 하나 추가해주시면 초보자가 접근하기 훨씬 쉬워질거 같슴다만.

      ps. 계속 다음과 같은 에러를 뿜습니다 :

      response status 415
      response text '{"timestamp":"2022-06-13T08:46:16.320+00:00","status":415,"error":"Unsupported Media Type","message":"","path":"/ebest/queries"}'

      response status 500
      response text '{"timestamp":"2022-06-13T08:52:11.880+00:00","status":500,"error":"Internal Server Error","message":"","path":"/ebest/queries"}'

Designed by Tistory.