实现从“环信”下载聊天记录,显示在本地项目页面的功能(二)—— 获取环信聊天记录

来源:互联网 发布:windows 错误恢复 编辑:程序博客网 时间:2024/05/17 00:54

一、环信即时云简介

网址: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包中包含了环信用户的一些配置特定的常量,在方法需要调用。否则,或显示没有权限下载数据。代码如下:

@Servicepublic 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 formatif (!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 集合。





0 0