package com.myoa.engineering.crawl.ppomppu.processor.infrastructure.client; import com.myoa.engineering.crawl.ppomppu.support.webclient.factory.WebClientFilterFactory; import com.myoa.engineering.crawl.ppomppu.support.webclient.factory.WebFluxExchangeStragiesFactory; import com.myoa.engineering.crawl.ppomppu.support.dto.code.PpomppuBoardName; import lombok.extern.slf4j.Slf4j; import org.springframework.core.ParameterizedTypeReference; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientRequestException; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; /** * PpomppuBoardFeedRetriever * * @author Shin Woo-jin (woozu.shin@kakaoent.com) * @since 2021-09-08 */ @Slf4j @Component public class PpomppuBoardFeedRetriever { private final WebClient webClient; public PpomppuBoardFeedRetriever(WebClient.Builder webClientBuilder) { this.webClient = webClientBuilder.baseUrl(PpomppuBoardName.PPOMPPU_URL) .exchangeStrategies(WebFluxExchangeStragiesFactory.ofTextHtml()) .filter(WebClientFilterFactory.logRequest()) .filter(WebClientFilterFactory.logResponse()) .build(); } public Mono getHtml(String uri) { return webClient.get() .uri(uri) .exchangeToMono(e -> e.bodyToMono(String.class)) .publishOn(Schedulers.boundedElastic()) .onErrorResume(WebClientRequestException.class, t -> { log.info("Exception occured, ignoring. : {}", t.getClass().getSimpleName()); return Mono.empty(); }) .doOnNext(e -> log.info("[getHtml] {}", e)); } }