반응형
네이버 오픈 소스를 사용하여 News API를 개발해볼려한다.
Spring boot 3.x 버전이다.
1. Naver Devplopers 오픈소스 페이지에 들어간다.
https://developers.naver.com/main/
NAVER Developers
네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음
developers.naver.com
2.Application -> 내 에플리케이션을 들어간다,

3.회원가입 후 다시 돌아와 내 애플리케이션 클릭 -> 클릭 후 playground(Beta) 클릭

4. API선택에서 search- 기본 검색 클릭 후 API 호출



5. applcation.properties 추가
naver.client-id =내ID
naver.client-secret=내KEY
naver.base-url= https://openapi.naver.com
6. Service 및 컨트롤러 생성
//컨트롤러
package com.test.gw.controller.news;
import com.test.gw.service.news.NaverNewsService;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import java.util.Objects;
@Validated
@RestController
@RequestMapping("/api/in/news")
@Tag(name = "Naver News Controller", description = "Naver News API")
public class NaverNewsController {
@Autowired
private final NaverNewsService naverNewsService;
public NaverNewsController(NaverNewsService naverNewsService) {
this.naverNewsService = naverNewsService;
}
@PostMapping("/list")
public ResponseEntity<String> postNews(
@RequestBody Map<String, Object> body
) {
String query = Objects.toString(body.getOrDefault("query", ""), "");
int display = Integer.parseInt(Objects.toString(body.getOrDefault("display", "20")));
int start = Integer.parseInt(Objects.toString(body.getOrDefault("start", "1")));
String sort = Objects.toString(body.getOrDefault("sort", "date"));
String normalizedSort = "sim".equalsIgnoreCase(sort) ? "sim" : "date";
return naverNewsService.search(query, display, start, normalizedSort);
}
}
//service
package com.test.gw.service.news;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClient;
@Service
public class NaverNewsService {
private final RestClient rest;
public NaverNewsService(
@Value("${naver.base-url}") String baseUrl,
@Value("${naver.client-id}") String clientId,
@Value("${naver.client-secret}") String clientSecret
) {
this.rest = RestClient.builder()
.baseUrl(baseUrl) // https://openapi.naver.com
.defaultHeader("X-Naver-Client-Id", clientId)
.defaultHeader("X-Naver-Client-Secret", clientSecret)
.build();
}
public ResponseEntity<String> search(String query, int display, int start, String sort) {
return rest.get()
.uri(uri -> uri.path("/v1/search/news.json")
.queryParam("query", query)
.queryParam("display", display)
.queryParam("start", start)
.queryParam("sort", sort)
.build())
.retrieve()
.toEntity(String.class);
}
}
반응형
'JAVA' 카테고리의 다른 글
| [JAVA] @JsonProperty 사용 이유 (0) | 2025.12.30 |
|---|---|
| [Java] Exception Error message Front-end error message로 뿌리기. (0) | 2025.12.22 |
| [Java] 이미지 미리보기 C: 경로에 있는 파일 불러오기 (1) | 2025.07.04 |
| [JAVA] application.properties에서 log 설정 (1) | 2025.05.27 |
| [JAVA] 파일 다운로드 API 간단하게 구현 + Front End 다운로드 기능 까지. (0) | 2025.04.21 |