实现从“环信”下载聊天记录,显示在本地项目页面的功能(二)—— 获取环信聊天记录
一、环信即时云简介网址:http://docs.easemob.com/doku.php?id=start:100serverintegration:30chatlog本项目通过“安卓客户端”进行专家和用户的聊天功能,聊天内容以json格式保存在环信即时云数据库中。格式大致如下:二、JavaBean设计:因为环信中实际的聊天内容是三层嵌套的模式,所以需要
·
一、环信即时云简介
网址:http://docs.easemob.com/doku.php?id=start:100serverintegration:30chatlog
本项目通过“安卓客户端”进行专家和用户的聊天功能,聊天内容以json格式保存在环信即时云数据库中。格式大致如下:
二、JavaBean设计:
因为环信中实际的聊天内容是三层嵌套的模式,所以需要建立三层级联的JavaBean来解析并保存数据,我这里设计的格式如下:
三、代码实现:
1、包结构:
项目使用 jeesite 框架,本质是 SpringMVC + Mybatis ,又融合了 Shiro 和 Activiti 的内容。可能因为 jeesite 架构的特殊性,所以需要按照 MVC模型建包,否则可能Spring 类扫描会失效,无法建立 service 层和 dao 层对象。包结构如下:
同时,项目中需要导入环信的jar包,因为jar包中包含了环信用户的一些配置特定的常量,在方法需要调用。否则,或显示没有权限下载数据。代码如下:
@Service
public class HXDownloadMessageService{
private static final String APPKEY = Constants.APPKEY;
/*
* 通过app的client_id和client_secret来获取app管理员token
*/
private static Credential credential = new ClientSecretCredential(Constants.APP_CLIENT_ID,
Constants.APP_CLIENT_SECRET, Roles.USER_ROLE_APPADMIN);
public void downloadHXMessage() {
String senvenDayAgo = String.valueOf(System.currentTimeMillis() - 15 * 24 * 60 * 60 * 1000);
ObjectNode queryStrNode1 = factory.objectNode();
queryStrNode1.put("ql", "select * where timestamp>" + senvenDayAgo);
queryStrNode1.put("limit", "1000");
ObjectNode messages1 = getChatMessages(queryStrNode1);
// 获取环信所有聊天记录
System.out.println("================================================");
System.out.println("环信所有聊天记录的json:" + messages1.toString());
System.out.println("================================================");
/*
* 获取环信数据库中对话实体 entities 的内容,保存在entities的JSONArray中
*/
JSONObject jsonObj = JSON.parseObject(messages1.toString());
JSONArray entities = jsonObj.getJSONArray("entities");
List<HXMessEntity> messEntities = JSON.parseArray(entities.toJSONString(), HXMessEntity.class);
}
}
/**
* 获取HX的json聊天消息
*
* @param queryStrNode
*/
public static ObjectNode getChatMessages(ObjectNode queryStrNode) {
ObjectNode objectNode = factory.objectNode();
// check appKey format
if (!HTTPClientUtils.match("^(?!-)[0-9a-zA-Z\\-]+#[0-9a-zA-Z]+", APPKEY)) {
LOGGER.error("Bad format of Appkey: " + APPKEY);
objectNode.put("message", "Bad format of Appkey");
return objectNode;
}
try {
String rest = "";
if (null != queryStrNode && queryStrNode.get("ql") != null
&& !StringUtils.isEmpty(queryStrNode.get("ql").asText())) {
rest = "ql=" + java.net.URLEncoder.encode(queryStrNode.get("ql").asText(), "utf-8");
}
if (null != queryStrNode && queryStrNode.get("limit") != null
&& !StringUtils.isEmpty(queryStrNode.get("limit").asText())) {
rest = rest + "&limit=" + queryStrNode.get("limit").asText();
}
if (null != queryStrNode && queryStrNode.get("cursor") != null
&& !StringUtils.isEmpty(queryStrNode.get("cursor").asText())) {
rest = rest + "&cursor=" + queryStrNode.get("cursor").asText();
}
URL chatMessagesUrl = HTTPClientUtils.getURL(Constants.APPKEY.replace("#", "/") + "/chatmessages?" + rest);
// System.out.println("访问网址url:"+chatMessagesUrl.toString());
objectNode = HTTPClientUtils.sendHTTPRequest(chatMessagesUrl, credential, null, HTTPMethod.METHOD_GET);
} catch (Exception e) {
e.printStackTrace();
}
return objectNode;
}
通过 alibaba-fastjson.jar 解析json数据到 HXMessEntity 集合。
更多推荐
已为社区贡献1条内容
所有评论(0)