package com.fpcms.common.blog_post.impl; import java.util.HashMap; import java.util.Map; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fpcms.common.blog_post.BaseBlogPoster; import com.fpcms.common.util.FreemarkerUtil; /** * 可以配置的博客发送器, * 注意,Freemarker的变量引用可以为 @{},避免与spring ${}冲突 * * @author badqiu * */ public class ConfigableBlogPoster extends BaseBlogPoster{ private static Logger logger = LoggerFactory.getLogger(ConfigableBlogPoster.class); private String loginRequestBodyTemplate; private String postNewBlogRequestBodyTemplate; private String verifyLoginResultRegex; private String verifyPostNewBlogResultRegex; public void setLoginRequestBodyTemplate(String loginRequestBodyTemplate) { this.loginRequestBodyTemplate = trimAndReplaced(loginRequestBodyTemplate); } public void setPostNewBlogRequestBodyTemplate(String postNewBlogRequestBodyTemplate) { this.postNewBlogRequestBodyTemplate = trimAndReplaced(postNewBlogRequestBodyTemplate); } public void setVerifyLoginResultRegex(String verifyLoginResultRegex) { this.verifyLoginResultRegex = trimAndReplaced(verifyLoginResultRegex); } public void setVerifyPostNewBlogResultRegex(String verifyPostNewBlogResultRegex) { this.verifyPostNewBlogResultRegex = trimAndReplaced(verifyPostNewBlogResultRegex); } private static String trimAndReplaced(String verifyPostNewBlogResultRegex) { return StringUtils.replace(StringUtils.trim(verifyPostNewBlogResultRegex),"@{","${"); } @Override protected void setLoginRequestBody(String username, String password, PostMethod post) throws Exception { Map variables = newVariables(); variables.put("username", urlEncode(username)); variables.put("password", urlEncode(password)); String body = FreemarkerUtil.processByFreemarker(loginRequestBodyTemplate, "UTF-8", variables); post.setRequestBody(body); logger.info("login parameters:"+body); } @Override protected void setPostNewBlogRequestBody(String title, String content, String metaDescription, Map<String, String> ext, PostMethod post) throws Exception { Map variables = newVariables(); variables.putAll(ext); variables.put("title", urlEncode(title)); variables.put("content", urlEncode(content)); variables.put("metaDescription", urlEncode(metaDescription)); String body = FreemarkerUtil.processByFreemarker(postNewBlogRequestBodyTemplate, "UTF-8", variables); post.setRequestBody(body); logger.info("postNewBlogRequestBody:"+body); } private Map newVariables() { Map variables = new HashMap(); variables.put("StringUtils", new StringUtils()); variables.put("DigestUtils", new DigestUtils()); return variables; } @Override protected boolean verifyLoginResult(String responseString) { return verifyByContainsOrRegex(responseString,verifyLoginResultRegex); } @Override protected boolean verifyPostNewBlogResult(String responseString) { return verifyByContainsOrRegex(responseString,verifyPostNewBlogResultRegex); } private static boolean verifyByContainsOrRegex(String responseString,String regexOrContains) { if(StringUtils.isBlank(regexOrContains)) { return true; } if(responseString.contains(regexOrContains)) { return true; } if(responseString.matches(regexOrContains)) { return true; } return false; } @Override public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); logger.info("loginRequestBodyTemplate:"+loginRequestBodyTemplate); logger.info("postNewBlogRequestBodyTemplate:"+postNewBlogRequestBodyTemplate); logger.info("verifyLoginResultRegex:"+verifyLoginResultRegex); logger.info("verifyPostNewBlogResultRegex:"+verifyPostNewBlogResultRegex); } }