79 lines
2.8 KiB
Java
79 lines
2.8 KiB
Java
package com.myoa.engineering.crawl.ppomppu.processor.dto;
|
|
|
|
import org.jsoup.nodes.Element;
|
|
import org.jsoup.select.Elements;
|
|
|
|
import com.myoa.engineering.crawl.ppomppu.processor.domain.PpomppuArticle;
|
|
import com.myoa.engineering.crawl.ppomppu.support.dto.code.PpomppuBoardName;
|
|
|
|
/**
|
|
* PpomppuArticleTransformer
|
|
*
|
|
* @author Shin Woo-jin (woozu.shin@kakaoent.com)
|
|
* @since 2021-09-08
|
|
*/
|
|
public final class PpomppuArticleParser {
|
|
|
|
private PpomppuArticleParser() {}
|
|
|
|
public static PpomppuArticle toArticle(Elements articleElement) {
|
|
final String articleIdString = PpomppuArticleParser.parseArticleId(articleElement.get(0));
|
|
final String title = PpomppuArticleParser.parseTitle(articleElement.get(2));
|
|
final String articleUrl = PpomppuArticleParser.parseArticleUrl(articleElement.get(2));
|
|
final String thumbnailUrl = PpomppuArticleParser.parseThumbnailUrl(articleElement.get(3));
|
|
final Integer recommended = PpomppuArticleParser.parseRecommended(articleElement.get(6));
|
|
final String hitString = PpomppuArticleParser.parseHit(articleElement.get(7));
|
|
final String registeredAtString = PpomppuArticleParser.parseRegisteredAt(articleElement.get(5));
|
|
|
|
return PpomppuArticleParseDTO.builder()
|
|
.articleId(articleIdString)
|
|
.title(title)
|
|
.articleUrl(articleUrl)
|
|
.thumbnailUrl(thumbnailUrl)
|
|
.recommended(recommended)
|
|
.hit(hitString)
|
|
.registeredAt(registeredAtString)
|
|
.build()
|
|
.convert();
|
|
}
|
|
|
|
public static String parseArticleId(Element td) {
|
|
return td.text().trim();
|
|
}
|
|
|
|
public static String parseTitle(Element td) {
|
|
return td.getElementsByTag("a").text();
|
|
}
|
|
|
|
public static String parseArticleUrl(Element td) {
|
|
return PpomppuBoardName.ofViewPageUrl(td.getElementsByTag("a").attr("href"));
|
|
}
|
|
|
|
public static String parseThumbnailUrl(Element td) {
|
|
return "https:" + td.getElementsByTag("img").get(0).attr("src");
|
|
}
|
|
|
|
public static Integer parseRecommended(Element td) {
|
|
final String voteString = td.text();
|
|
final int recommended;
|
|
|
|
if (voteString.isEmpty()) {
|
|
recommended = 0;
|
|
} else {
|
|
final int voteUp = Integer.parseInt(td.text().split(" - ")[0]);
|
|
final int voteDown = Integer.parseInt(td.text().split(" - ")[1]);
|
|
recommended = voteUp - voteDown;
|
|
}
|
|
return recommended;
|
|
}
|
|
|
|
public static String parseHit(Element td) {
|
|
return td.text();
|
|
}
|
|
|
|
public static String parseRegisteredAt(Element td) {
|
|
return td.attr("title");
|
|
}
|
|
|
|
}
|