package edu.fudan.weixin.model.processor;
import java.net.URLEncoder;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.fudan.eservice.common.utils.CommonUtil;
import edu.fudan.weixin.model.message.JSONMessageBuilder;
import edu.fudan.weixin.model.message.NewsJSONMessageBuilder;
/**
* 知识库查询处理
* @author wking
*
*/
public class KBMessageProcessor extends LongTermProcessor {
private Log log=LogFactory.getLog(KBMessageProcessor.class);
private static Pattern p = Pattern.compile("(kb|bst|知识库|百事通)(.+)",
Pattern.CASE_INSENSITIVE);
public Map<String, Object> process(Map<String, Object> message) {
String content=null;
content = String.valueOf(message.get("Content"));
if(!CommonUtil.isEmpty(content)&&p.matcher(content).matches())
return super.process(message);
else
return null;
}
@Override
public JSONMessageBuilder _process(Map<String, Object> message) {
String content = String.valueOf(message.get("Content"));
Matcher m = p.matcher(content.trim());
if (m.matches()) {
content = m.group(2);
try {
String urlstr = "http://baishitong.fudan.edu.cn/index.php?limit=10&fulltext=Search&search="
+ URLEncoder.encode(content, "utf-8");
StringBuffer ret=CommonUtil.getWebContent(urlstr);
int pos=ret.indexOf("mw-search-result-heading");
NewsJSONMessageBuilder mb=new NewsJSONMessageBuilder();
int atcount=0;
while(pos>0&&atcount<10)
{
pos=ret.indexOf("href=", pos);
String ttitle="",turl="",tcontent="";
int pos2=-1;
if(pos>0)
{
pos=ret.indexOf("\"",pos+1);
pos2=ret.indexOf("\"",pos+1);
turl="http://baishitong.fudan.edu.cn"+ret.substring(pos+1,pos2 );
}
pos=ret.indexOf("title=", pos2);
if(pos>0)
{
pos=ret.indexOf("\"",pos+1);
pos2=ret.indexOf("\"",pos+1);
ttitle=ret.substring(pos+1, pos2);
}
pos=ret.indexOf("searchresult",pos2);
if(pos>0)
{
pos=ret.indexOf(">",pos+1);
pos2=ret.indexOf("</div>",pos+1);
tcontent=ret.substring(pos+1, pos2);
tcontent=tcontent.replaceAll("(<.+>|\\[|\\])", "");
}
atcount++;
mb.addArticle(ttitle, tcontent, turl, "");
pos=ret.indexOf("mw-search-result-heading",pos2);
}
if(atcount==0)
mb.addArticle("没有查询到相关内容", "Nothing was found", "", "");
mb.setContent(null);
return mb;
} catch (Exception ex) {
log.error(ex);
}
}
return null;
}
}