[leaflet] 네이버 뉴스 받아오기

Yuni·2023년 6월 16일
1

지도

목록 보기
12/12
post-thumbnail

뉴스를 받아와서 아래 넣어줄껀데
뉴스 api는 검색어가 필요한거 밖에 없는거같아
네이버 뉴스 api로 가져오기로 하였다

1

NewsService

@Service
public class NewsService {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());


    // 네이버 검색 API 요청
    public List<NewsVO> search() {

        // 네이버 검색 API 요청
        String clientId = Key.clientId;
        String clientSecret = Key.clientSecret;
        String text = "이슈"; //LocalDate.now().toString()

        //String apiURL = "https://openapi.naver.com/v1/search/blog?query=" + text;    // JSON 결과
        URI uri = UriComponentsBuilder
                .fromUriString("https://openapi.naver.com")
                .path("/v1/search/news.json")
                .queryParam("query", text)
                .queryParam("display", 30)
                .queryParam("start", 1)
                .queryParam("sort", "sim")
                .encode()
                .build()
                .toUri();

        // Spring 요청 제공 클래스
        RequestEntity<Void> req = RequestEntity
                .get(uri)
                .header("X-Naver-Client-Id", clientId)
                .header("X-Naver-Client-Secret", clientSecret)
                .build();

        // Spring 제공 restTemplate
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> resp = restTemplate.exchange(req, String.class);

        // JSON 파싱 (Json 문자열을 객체로 만듦, 문서화)
        ObjectMapper om = new ObjectMapper();
        IndexVO resultVO = null;

        try {
            resultVO = om.readValue(resp.getBody(), IndexVO.class);
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        List<NewsVO> News =resultVO.getItems();	// News를 html에 출력 -> model 선언

        logger.info("뉴스정보: "+ News);

        return News;
    }

Controller

@Autowired
	private NewsService newsService;
  @Controller
  public class Controller {
	model.addAttribute("News", newsService.search());
    return "index";
  }

jsp

<div id="news">
	<table>
		<c:forEach var="News" items="${News}">
			<tr>
				<td><a target="_blank" href="${News.link}">${News.title}</a></td>
			</tr>
		</c:forEach>
	</table>
</div>

간단하게 불러오는 방법을 사용하였다
그냥 컨트롤러에서 호출해서 간단하게 보고만 싶다고 하시는분은

2

Controller

@Controller
public class NewsController {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    // 네이버 검색 API 요청
    @GetMapping("/news")
    public @ResponseBody List<NewsVO> search() {

        // 네이버 검색 API 요청
        String clientId = Key.clientId;
        String clientSecret = Key.clientSecret;
        String text = "이슈"; //LocalDate.now().toString()

        URI uri = UriComponentsBuilder
                .fromUriString("https://openapi.naver.com")
                .path("/v1/search/news.json")
                .queryParam("query", text)
                .queryParam("display", 30)
                .queryParam("start", 1)
                .queryParam("sort", "sim")
                .encode()
                .build()
                .toUri();

        // Spring 요청 제공 클래스
        RequestEntity<Void> req = RequestEntity
                .get(uri)
                .header("X-Naver-Client-Id", clientId)
                .header("X-Naver-Client-Secret", clientSecret)
                .build();

        // Spring 제공 restTemplate
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> resp = restTemplate.exchange(req, String.class);

        // JSON 파싱 (Json 문자열을 객체로 만듦, 문서화)
        ObjectMapper om = new ObjectMapper();
        IndexVO resultVO = null;

        try {
            resultVO = om.readValue(resp.getBody(), IndexVO.class);
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        List<NewsVO> News =resultVO.getItems();	// News를 html에 출력 -> model 선언

        logger.info("뉴스정보: "+ News);

        return News;
    }
}

이렇게 확인해 볼 수 있다

profile
backend developers

0개의 댓글