20.12.30 Disqus api 적용 - 댓글수, 추천수 동기화 기능 추가( + 이모지 적용)(feat.jackson)

2020. 12. 30. 22:26JAVA/Blog 사이트 프로젝트

<BuildService.java>

public void builSite() {
		System.out.println("= site 폴더 생성 =");

		// Util.rmdir("site"); // 기존 site 폴더 삭제
		Util.mkdir("site"); // 신규 site 폴더 생성

		// site_template에 있는 app.css(원본)를 복사해 site폴더 생성시 그 안에 복사본 붙여넣기
		Util.copy("site_template/app.css", "site/app.css");
		Util.copy("site_template/app.js", "site/app.js");

		// site_template에 있는 images(원본)폴더를 복사해 site폴더 생성시 그 안에 복사본 붙여넣기
		Util.copyDir("site_template/images", "site/images");

		// 사이트 생성 전 Discus Data 가져오기
		loadDiscusData();

		buildIndexPage(); // 인덱스 페이지 생성
		buildArticleListPages(); // 각 게시판 별 게시물리스트 페이지 생성
		buildArticleDetailPages(); // 게시판 별 게시물 상세페이지 생성

	}

	// Discus Data 가져오기
	private void loadDiscusData() {
		List<Article> articles = articleService.getArticlesForPrint();

		for (Article article : articles) {
			Map<String, Object> discusArticleData = discusApiService.getArticleData(article);
			
			if (discusArticleData != null) {
				int likesCount = (int) discusArticleData.get("likesCount");
				int commentsCount = (int) discusArticleData.get("commentsCount");
				
				Map<String, Object> modifyArgs = new HashMap<>();
				modifyArgs.put("id", article.id);
				modifyArgs.put("likesCount", likesCount);
				modifyArgs.put("commentsCount", commentsCount);

				articleService.articleModify(modifyArgs);
				
			}

		}

	}

 

<DiscusApiService.java>

package com.sbs.example.mysqlTextBoard.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.sbs.example.mysqlTextBoard.apiDto.DisqusApiDataListThread;
import com.sbs.example.mysqlTextBoard.container.Container;
import com.sbs.example.mysqlTextBoard.dto.Article;
import com.sbs.example.mysqlTextBoard.util.Util;

public class DiscusApiService {

	public Map<String, Object> getArticleData(Article article) {
		String fileName = Container.buildService.getArticleFileName(article);
		String url = "https://disqus.com/api/3.0/forums/listThreads.json";

		DisqusApiDataListThread disqusApiDataListThread = (DisqusApiDataListThread) Util.callApiResponseTo(DisqusApiDataListThread.class,
				url, "api_key=" + Container.appConfig.getDisqusApiKey(), "forum=" + Container.appConfig.getDisqusForumName(),
				"thread:ident=" + fileName);
		
		if(disqusApiDataListThread == null) {
			return null;
		}
		
		Map<String, Object> rs = new HashMap<>();
		rs.put("likesCount", disqusApiDataListThread.response.get(0).likes);
		rs.put("commentsCount", disqusApiDataListThread.response.get(0).posts);
		System.out.println(rs);
		
		return rs;
	}

}

 

<DisqusApiDataListThread.java>

package com.sbs.example.mysqlTextBoard.apiDto;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class DisqusApiDataListThread {
	
	public int code;
	public List<Response> response;
	
	@JsonIgnoreProperties(ignoreUnknown = true)
	public static class Response{
		public int likes;
		public int posts;
	}
}

 

<AppConfig.java>

package com.sbs.example.mysqlTextBoard;

public class AppConfig {

	public String getSiteDomain() {
		return "blog.devj.me";
	}
	
	
	public String getDisqusApiKey() {
		return "mr5Mv3I4DJ893SADMVmxOu7iUzXrkL3GvNnWxJ4dBy5ZBHvd32lKlEw0qYI5x76F";
		
	}
	
	public String getDisqusForumName() {
		return "devj-blog";
		
	}

}