微信开发之图灵机器人


摘要:访问图灵机器人接口

开发步骤:
1.创建WebChatIoservlet,该serlvet是用来接收微信的xml文件,并将其处理完成后返回给微信端。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置数据的格式和编码格式
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("test/html;charset=utf-8");

//读取微信端post传过来的数据
InputStream is=request.getInputStream();
InputStreamReader isr=new InputStreamReader(is,"UTF-8");
BufferedReader br=new BufferedReader(isr);

String str="";
StringBuffer sb=new StringBuffer();

//安行读取内容
while(null!=(str=br.readLine())){
    sb.append(str);
}
String content=sb.toString();
//调用控制流程,获取微信处理结果
String result=new webchatcontorller().webchatProcess(content);

//返回完成处理的结果
OutputStream out=response.getOutputStream();
out.write(result.getBytes("utf-8"));
out.flush();
out.close();

super.doPost(request, response);
}

2.创建webchatcontorller微信控制流程

package com.webchat.util;
import com.webchat.entity.ReceiveXmlEntity;
import com.webchat.tuling.tulingController;

public class webchatcontorller {
public  String webchatProcess(String content){
//解析微信客户端传过来的xml文件,转化为实体类对象
ReceiveXmlEntity xml= ParseReceiveXml.getMsgEntity(content) ;
System.out.println("解析xml,转化为类对象");
//调用图灵机器人接口,来处理消息
String tlResult=new tulingController().getTulingRe(xml.getContent());

//封装xml接口的返回数据
String xmlResult=FormatXmlResult.getXmlResult(xml, tlResult);
return xmlResult;
}
}

3.webchatcontorller类中的方法实现
3.1实现解析微信端xml文件,并将其转化为实体类
a.创建其实体类对象entity,具体代码如下:

package com.webchat.entity;
/**
* 微信xml端数据对应的实体类对象
* @author lly
*
*/
public class ReceiveXmlEntity {
private String ToUserName="";
private String FromUserName ="";
private String CreateTime ="";
private String MsgType ="";
private String Content ="";
private String MsgId ="";
public String getToUserName() {
return ToUserName;
}
public void setToUserName(String toUserName) {
ToUserName = toUserName;
}
public String getFromUserName() {
return FromUserName;
}
public void setFromUserName(String fromUserName) {
FromUserName = fromUserName;
}
public String getCreateTime() {
return CreateTime;
}
public void setCreateTime(String createTime) {
CreateTime = createTime;
}
public String getMsgType() {
return MsgType;
}
public void setMsgType(String msgType) {
MsgType = msgType;
}
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
public String getMsgId() {
return MsgId;
}
public void setMsgId(String msgId) {
MsgId = msgId;
}
}

b.解析接收微信服务器消息

package com.webchat.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.webchat.entity.ReceiveXmlEntity;

/**
* 解析微信端的xml数据,将其转换为对象
* @author lly
*/
public class ParseReceiveXml {
/**
* 解析xml消息
* @param content 微信端接收过来的消息
* @return 转换之后的尸体对象
*/
public static ReceiveXmlEntity getMsgEntity(String content){
//method2利用反射机制来讲xml接收过来的消息转化成实体
ReceiveXmlEntity msg=method2(content);
return msg;
}

public static ReceiveXmlEntity method2(String content){
//创建实体
ReceiveXmlEntity msg=null;
try {
//得到微信端xml document对象
Document document=DocumentHelper.parseText(content);
//读取xml文件中的根节点
Element root=document.getRootElement();
//遍历根节点下面的所有子节点
Iterator<?> iter=root.elementIterator();
//利用反射机制调用set方法
Class<?> cls=Class.forName("com.webchat.entity.ReceiveXmlEntity");
//创建实体对象
msg=(ReceiveXmlEntity) cls.newInstance();
while(iter.hasNext()){
Element element=(Element) iter.next();
//Field该对象反映此 Class 对象所表示的类或接口的指定已声明字段
Field filed=cls.getDeclaredField(element.getName());
//获得set方法
Method method=cls.getDeclaredMethod("set"+filed.getName(), filed.getType());
//调用set方法
method.invoke(msg, element.getText());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return msg;
}
}

3.2创建图灵机器人接口控制流程,该流程的主要任务是请求图灵机器人接口,将接收到的消息发送给图灵机器人处理,再接收到处理完成的结果。
a.图灵机器人控制流程

package com.webchat.tuling;

import net.sf.json.JSONObject;
/**
* 图灵机器人接口控制类
* @author lly
*
*/
public class tulingController {
/**
* 调用图灵机器人接口,并返回所需要的内容
* @param info 
* @return
*/
public static String getTulingRe(String info){
System.out.println("info="+info);
//调用图灵机器人接口API
String url="http://www.tuling123.com/openapi/api?key=21f00a67730269aa177ce6ff281f5187&info="+info;
String tlResult=HttpGetRequest.get(url);
System.out.println(tlResult);
//解析图灵机器人接口返回来的内容
JSONObject json=JSONObject.fromObject(tlResult);
tlResult=(String) json.getString("text");
System.out.println("tlResult---"+tlResult);
return tlResult;
}
}

b.图灵机器人接口请求

package com.webchat.tuling;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
/**
* Http get请求
* @author lly
*/
public class HttpGetRequest {
/**
* get 请求
* @param url 请求的地址和参数
* @return 返回url的结果
*/
public static String get(String url){
try {
HttpGet request=new HttpGet(url);
//执行Http get请求
HttpResponse response=HttpClients.createDefault().execute(request);
//根据返回码来判断是否请求成功
String result="";
if(response.getStatusLine().getStatusCode()==200){
    result=EntityUtils.toString(response.getEntity());
}
return result;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
} 
}
}

3.3将图灵机器人接口的返回数据封装成xml文件,准备发送

package com.webchat.util;

import java.util.Date;
import com.webchat.entity.ReceiveXmlEntity;

public class FormatXmlResult {
public static String getXmlResult(ReceiveXmlEntity xml,String tlResult){
StringBuffer sb=new StringBuffer();
sb.append("<xml><ToUserName><![CDATA[");
sb.append(xml.getFromUserName());
sb.append("]]></ToUserName><FromUserName><![CDATA[");
sb.append(xml.getToUserName());
sb.append("]]></FromUserName><CreateTime>");
sb.append(new Date().getTime());
sb.append("</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[");
sb.append(tlResult);
sb.append("]]></Content></xml>");
return tlResult;
}
}

4模拟测试

package com.webchat.test;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.util.EntityUtils;


/**
* 测试
* @author lly
*
*/
public class Test {
/**
* post 请求
* @param url 求情的地址
* @param param 请求的内容
* return 接口返回的内容
*/
public static String post(String url,String param){
try{
System.out.println("发生post请求");
HttpPost request=new HttpPost(url);
request.setEntity(new StringEntity(param));
HttpResponse response=HttpClients.createDefault().execute(request);
//利用返回码来判断请求是否成功
if(200==response.getStatusLine().getStatusCode()){
return EntityUtils.toString(response.getEntity());
}
return "请求失败";
}catch(Exception e){
e.printStackTrace();
return "";
}
}

public static void main(String[] args) {
try {
String content=URLEncoder.encode("你是谁", "UTF-8");
String url="http://localhost:8080/WebChat/WebChatIo";
//param是模拟接收到的微信消息
String param="<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA["+content+"]]></Content><MsgId>1234567890123456</MsgId></xml>";
String result=post(url, param);
System.out.println(result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值