본문 바로가기

카테고리 없음

[SpringBoot] Naver API이용 뉴스 취득

반응형

Spring Boot 응용 프로그램에서 네이버 API를 사용하여 뉴스 목록을 가져오려면 다음과 같은 일반적인 단계를 수행할 수 있습니다:

1. 네이버 API 계정을 등록하고 API 키를 받으세요.
2. Spring Boot 프로젝트를 만들고 spring-boot-starter-web 및 jackson-databind와 같은 HTTP 클라이언트 및 JSON 구문 분석에 필요한 종속성을 추가합니다.
3. Spring의 RestTemplate 또는 다른 HTTP 클라이언트 라이브러리를 사용하여 네이버 API와 통신할 REST 클라이언트를 정의합니다.
4. 네이버 API에서 반환되는 데이터를 나타내는 모델 클래스를 정의합니다. Jackson의 주석을 사용하여 JSON 속성을 클래스의 필드에 매핑할 수 있습니다.
5. REST 클라이언트를 호출하여 뉴스 데이터를 가져와 모델 클래스에 매핑하는 서비스 클래스를 정의합니다.
6. 서비스 클래스를 호출하고 뉴스 데이터를 JSON 형식으로 클라이언트에 반환하는 Spring 컨트롤러의 끝점을 표시합니다.

다음은 시작하기 위한 몇 가지 코드의 예입니다.

// 1. Register for a Naver API account and get an API key.

// 2. Create a Spring Boot project and add dependencies.

// 3. Define a REST client using RestTemplate.
@Service
public class NaverApiClient {
    private final RestTemplate restTemplate;

    public NaverApiClient(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplate = restTemplateBuilder.build();
    }

    public NaverNewsList getNewsList(String query) {
        String url = "https://openapi.naver.com/v1/search/news.json?query=" + query;
        HttpHeaders headers = new HttpHeaders();
        headers.set("X-Naver-Client-Id", "your-client-id");
        headers.set("X-Naver-Client-Secret", "your-client-secret");
        HttpEntity<?> entity = new HttpEntity<>(headers);
        ResponseEntity<NaverNewsList> response = restTemplate.exchange(
                url,
                HttpMethod.GET,
                entity,
                NaverNewsList.class
        );
        return response.getBody();
    }
}

// 4. Define a model class to represent the news data.
public class NaverNewsItem {
    private String title;
    private String link;
    private String description;
    // ... getters and setters
}

public class NaverNewsList {
    private List<NaverNewsItem> items;
    // ... getters and setters
}

// 5. Define a service class that calls the REST client and maps the data to the model class.
@Service
public class NaverNewsService {
    private final NaverApiClient naverApiClient;

    public NaverNewsService(NaverApiClient naverApiClient) {
        this.naverApiClient = naverApiClient;
    }

    public List<NaverNewsItem> getNewsList(String query) {
        NaverNewsList newsList = naverApiClient.getNewsList(query);
        return newsList.getItems();
    }
}

// 6. Expose an endpoint in a Spring controller.
@RestController
public class NaverNewsController {
    private final NaverNewsService naverNewsService;

    public NaverNewsController(NaverNewsService naverNewsService) {
        this.naverNewsService = naverNewsService;
    }

    @GetMapping("/news")
    public List<NaverNewsItem> getNewsList(@RequestParam String query) {
        return naverNewsService.getNewsList(query);
    }
}
반응형