Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[Server] Odsay 대중교통 api 연동 본문

Project/대중교통 길찾기

[Server] Odsay 대중교통 api 연동

Seung__ 2022. 1. 17. 00:02

1. url, 파라미터, 출력정보 확인.


 

ODsay LAB

버스노선 조회(Bus Route) 버스노선 리스트를 리턴합니다. 매서드 요청 URI 출력 포맷 GET/POST https://api.odsay.com/v1/api/searchBusLane json, xml • 파라미터(Parameter) 번호 파라미터 필수값 설명 예시 공통 apiKey

lab.odsay.com

  • URI
메서드 요청 URI 포맷
GET/POST https://api.odsay.com/v1/api/searchPubTransPathT json, xml

 

  • Parameter
번호 파라미터 필수값 설명 예시
공통 apiKey Y 발급된 키 apiKey=xxxxxxxxxxx
공통 lang N 결과 언어 선택
(국문:0 , 영문:1, 일문:2, 중문(간체):3,
중문(번체):4 , 베트남어:5)
* 베트남어의 경우 수도권에 한하여 제공
default = 0
lang=1
공통 output N 출력포맷(json, xml)
default = json
output=xml
1 SX Y 출발지 X좌표 (경도좌표) SX=126.926493082645
2 SY Y 출발지 Y좌표 (위도좌표) SY=37.6134436427887
3 EX Y 도착지 X좌표 (경도좌표) EX=127.126936754911
4 EY Y 도착지 Y좌표 (위도좌표) EY=37.5004198786564
5 OPT N 경로검색결과 정렬방식
0: 추천경로, 1 타입별정렬
ex) 지하철, 버스, 버스+지하철, 지하철+버스,
버스+지하철+버스
OPT = 0
6 SearchType N 도시간 이동/도시내 이동을 선택한다. 도시내 이동/도시간 이동을 구분검색한다.
0 입력시 도시내검색
(도시내검색에서 도시간검색결과 있을경우 활용)
7 SearchPathType N 도시 내 경로수단을 지정한다. 0: 모두(default)
1: 지하철
2: 버스

 

해당 uri에 parameter를 붙여서 get방식으로 보내면 데이터를 받을 수 있음.

 

 

 

2. Application.yml


uri와 apiKey는 값이 고정된다.

application.yml에 등록하여 불러서 사용하면 편리하다.

odsay:
  uri: https://api.odsay.com/v1/api/searchPubTransPathT
  key: xxxxxxxxxxxxxxxxxx

 

 

 

3. SearchRouteReq


  • Request로 보낼 정보를 모아둠.
  • DTO
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SearchRouteReq {

    private String SX;
    private String SY;
    private String EX;
    private String EY;


    private MultiValueMap<String, String> makeQuery(){

        LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<>();

        map.add("SX", SX);
        map.add("SY", SY);
        map.add("EX", EX);
        map.add("EY", EY);

        return map;
    }

}

 

 

4. OdsayClient


  • OdSay API를 호출하고 값을 받아오는 역할을 한다.
  • @Component를 통해 스프링 빈으로 등록한다.
  • @Value를 사용하여 application.yml에 등록한 값을 가져온다.
  • ResTemplate를 사용하여 간단하게 처리함.
@Slf4j
@Component
public class OdSayClient {

    @Value("${odsay.key}")
    private String key;
    @Value(("${odsay.uri}"))
    private String routeSearchUri;

   public String searchRoute(SearchRouteReq searchRouteReq){

       URI uri = UriComponentsBuilder.fromUriString(routeSearchUri)
               .queryParam("SX", searchRouteReq.getSX())
               .queryParam("SY", searchRouteReq.getSY())
               .queryParam("EX", searchRouteReq.getEX())
               .queryParam("EY", searchRouteReq.getEY())
               .queryParam("apiKey", key)
               .build().encode().toUri();

       log.info("[request api] uri = {}", uri);
       //Http Entity
       var httpEntity = new HttpEntity<>(new HttpHeaders());
       var responseType = new ParameterizedTypeReference<String>(){};

       //ResponseEntity
        var responseEntity= new RestTemplate().exchange(
                uri, HttpMethod.GET, httpEntity, responseType
        );

        return responseEntity.getBody();
   }
}

 

 

5. ApiController


@Slf4j
@Controller
@RequiredArgsConstructor
public class ApiController {

    private final OdSayClient odSayClient;

    @GetMapping("/route")
    public String searchRoute(){
        //서율역
        String SX ="126.9707979959352";
        String SY = "37.5547020732267";
        //잠실역
        String EX = "127.10012275846414";
        String EY = "37.513264531390575";

        SearchRouteReq searchRouteReq = new SearchRouteReq(SX, SY, EX, EY);

        return odSayClient.searchRoute(searchRouteReq);
    }


}

 

6. Test - postman


  • postman으로 잘 동작하는지 확인해 보자.

흐으으으음....

  • 인증이 안된다.
  • 발급된 key에 오류는 없는데.. ㅜㅜ

 

7. GitHub: 220116 Request OdsayAPI


 

GitHub - bsh6463/commuteMap

Contribute to bsh6463/commuteMap development by creating an account on GitHub.

github.com

 

'Project > 대중교통 길찾기' 카테고리의 다른 글

[Server] return 값 분석  (0) 2022.01.20
[Server] Odsay API호출 문제 해결  (0) 2022.01.18
[Server] 회원 도메인 개발  (0) 2022.01.15
[Server] 회원 도메인 설계  (0) 2022.01.15
[Server] 도메인 분석 설계  (0) 2022.01.15
Comments