微信公众账号实现翻译、快递、股票信息功能

废话少说,先上图,大家加了用了试试。

目前实现微信在线翻译(英-》汉)、快递单、股票信息、天气\PM2.5等功能,当然还有好多彩蛋功能。


下面上主要代码:2个XML,一个是存文字,一个是图片信息。

private final  static String menuString="天气:发送地名或者位置。\r\n" +
			"PM2.5:发送地名或者位置\r\n" +
			"股票行情:发送股票名称或者是代码 \r\n" +
			"快递单号:发送快递单号\r\n" +
			"英文翻译:发送英文单词\r\n";
	private static Logger log = Logger.getLogger(ChaXunZhuShouServlet.class
			.getName());
	private static final String RESPONSE_TXT = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";
	private static final String RESPONSE_IMAGE = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType></xml>";

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String signature = req.getParameter("signature");
		String timestamp = req.getParameter("timestamp");
		String nonce = req.getParameter("nonce");
		String echostr = req.getParameter("echostr");
		System.out.println("get Method running :" + signature + " : "
				+ timestamp + " : " + nonce + " : " + echostr);
		PrintWriter out = resp.getWriter();
		out.write(echostr);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String signature = req.getParameter("signature");
		String timestamp = req.getParameter("timestamp");
		String nonce = req.getParameter("nonce");
		String echostr = req.getParameter("echostr");
		Scanner scanner = new Scanner(req.getInputStream(), "utf-8");
		resp.setContentType("application/xml");
		resp.setCharacterEncoding("UTF-8");
		PrintWriter out = resp.getWriter();
		log.info(signature + " : " + timestamp + " : " + nonce + " : "
				+ echostr);
		try {
			// 1、获取用户发送的信息
			StringBuffer sb = new StringBuffer(100);
			while (scanner.hasNextLine()) {
				sb.append(scanner.nextLine());
			}
			System.out.println("获取用户输入的数据!" + sb.toString());
			// 2、解析用户的信息
			JAXBContext jc = JAXBContext.newInstance(WeChatReqBean.class);
			Unmarshaller u = jc.createUnmarshaller();
			WeChatReqBean reqBean = (WeChatReqBean) u
					.unmarshal(new StringReader(sb.toString()));
			WeChatRespBean respBean=null;
			if (reqBean.getMsgType().equals(WeixinConstants.MSGTYPE_EVENT)) {
				// 这是新用户关注时默认发的一条信息。可以做一个欢迎处理。
				respBean=new WeChatRespBean();
				respBean.setMsgType(WeixinConstants.MSGTYPE_TEXT);
				respBean.setContent("感谢您关注手机查询助手," + menuString);
			} else if (reqBean.getMsgType().equals(WeixinConstants.MSGTYPE_TEXT)) {
				String keyword = reqBean.getContent();
				respBean=CommonInfoGet.getContent(keyword);
			}else if(reqBean.getMsgType().equals(WeixinConstants.MSGTYPE_LOCATION)){
				respBean=LocaltionInfo.getLocaltionInfo(reqBean);
			}else {
				respBean=new WeChatRespBean();
				respBean.setMsgType(WeixinConstants.MSGTYPE_TEXT);
				respBean.setContent("我暂时还不懂您的意思\r\n" + menuString);
			}
			String reponseXml=RESPONSE_TXT;
			String type="text";
			if(null!=respBean.getMsgType()){
				if( respBean.getMsgType().equals(WeixinConstants.MSGTYPE_IMAGE)){
					String xml=XmlUtil.appendXmlInNode(RESPONSE_IMAGE,respBean.getArticles());
					reponseXml=xml;
					type="news";
				}
			}else{
				respBean.setMsgType(WeixinConstants.MSGTYPE_TEXT);
				respBean.setContent("我暂时还不懂您的意思\r\n" + menuString);
			}
			out.printf(reponseXml, reqBean.getFromUserName(), reqBean
					.getToUserName(), System.currentTimeMillis(), type,
					respBean.getContent());
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (scanner != null) {
				scanner.close();
				scanner = null;
			}
			if (out != null) {
				out.close();
				out = null;
			}
		}

	}

 
 

核心数据取值类:

public class CommonInfoGet {
	public static WeChatRespBean getContent(String keyword) throws IOException {
		WeChatRespBean responseBean=new WeChatRespBean();
		if(keyword.length()>=FetchExpressInfo.minLength && keyword.length()<=FetchExpressInfo.maxLength){
			String expressStr=FetchExpressInfo.getExpressInfo(keyword);
			if(!"".equals(expressStr)){
				responseBean.setContent(expressStr);
				responseBean.setMsgType(WeixinConstants.MSGTYPE_TEXT);
				return responseBean;
			}
		}
		if(IsChineseOrEnglish.strIsEnglish(keyword)){
			String translate=TranslateInfo.getTranslateInfo(keyword);
			if(!"".equals(translate)){
				responseBean.setContent(translate);
				responseBean.setMsgType(WeixinConstants.MSGTYPE_TEXT);
				return responseBean;
			}
		}
		StringBuffer returnStr=new StringBuffer();
		StringReader read = new StringReader(keyword);
		IKSegmenter ik = new IKSegmenter(read, true);
		Lexeme lex = null;
		boolean stock=false;
		boolean area=false;
		String stockCode="";
		SingleInfo info=SingleInfo.getStockSingleInfo();
		System.out.println("SingleInfo="+info);
		Map<String,String> stockMap=info.getStockMap();
		Map<String,String> areaMap=info.getAreaMap();
		String mapAreaName="";
		while((lex=ik.next())!=null){
			String str = lex.getLexemeText();
			System.out.println(str + "\t");
			if(stockMap.containsKey(str)){
				stockCode=stockMap.get(str);
				stock=true;
			}
			if(areaMap.containsKey(str)){
				area=true;
				mapAreaName=areaMap.get(str);
			}
		}
		
		if(stock){
			returnStr.append(FetchStockInfo.findStockInfo(stockCode));
			returnStr.append("\r\n");
			responseBean.setContent(returnStr.toString());
			responseBean.setMsgType(WeixinConstants.MSGTYPE_TEXT);
		}
		if(area){
			WeatherInfo.getWeatherInfo(keyword,mapAreaName,responseBean);
			PMInfo.getPMInfo(keyword,mapAreaName,responseBean);
			
		}
		return responseBean;
	}
}

欢迎大家关注提意见。谢谢。

猜你喜欢

转载自liyufu86.iteye.com/blog/1884411