[033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收(转)
我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜、怒、哀、乐等表达人物心情的小图片。本文重点要介绍的内容就是怎样在微信公众平台使用QQ表情,即在微信公众帐号开发模式下,怎样发送QQ表情给用户,以及怎样识别用户发来的是QQ表情。
QQ表情代码表
首先须要明确的是:QQ表情尽管呈现为一张张动态的表情图片,但在微信公众平台的消息接口中却是属于文本消息;也就是说当用户向公众帐号发送QQ表情时,公众帐号后台程序接收到的消息类型MsgType的值为text。仅仅要上面这点能理解了,以下的工作就好开展了。
对于QQ表情,发送的是文本消息,而呈现出来却是表情图片,那么每个QQ表情图片一定会有与之相相应的表情代码。以下是我已经整理好的微信公众帐号中使用的QQ表情代码对比表:
上面一共列出了105个QQ表情,每个表情都给出了与之相相应的文字代码与符号代码(或许这两种叫法并不恰当),至于这两种代码怎么来的以及怎样使用,以下立即会讲到。
用户向公众帐号发送QQ表情
在微信上使用公众帐号时,怎样发送QQ表情,我想这个非常少有人不会的。在输入框旁边有一个笑脸的图片button,点击它将会弹出表情选择界面,可选择的表情依次为“QQ表情”、“符号表情”和“动画表情”。当我们点击选择了某个QQ表情后,发如今输入框中会显示该表情的文字代码,这里是用一对中括号引起的,例如以下图所看到的:
事实上,当我们非常熟悉要使用QQ表情的文字代码时,也能够直接在输入框中输入表情的代码,而不须要弹出表情选择框。例如以下图所看到的:
从上图能够看出,在输入框中输入“[呲牙]”、“/呲牙”和“/::D”这三种代码的作用一样,都是发送呲牙的QQ表情。这个时候,大家再回过头去看文章最开始的QQ表情代码对比表,就明确是怎么回事了。
公众帐号向用户发送QQ表情
与用户向公众帐号发送QQ表情一样,在开发模式下,公众帐号也能够用相同的表情代码(文字代码或符号代码)向用户回复QQ表情。代码片段例如以下:
- // 文本消息
- if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
- // 回复文本消息
- TextMessage textMessage = new TextMessage();
- textMessage.setToUserName(fromUserName);
- textMessage.setFromUserName(toUserName);
- textMessage.setCreateTime(new Date().getTime());
- textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
- textMessage.setFuncFlag(0);
- textMessage.setContent("[难过] /难过 /::(");
- // 文本消息对象转换成xml字符串
- respMessage = MessageUtil.textMessageToXml(textMessage);
- }
上面代码片段的作用是:推断发送的消息类型,假设是文本消息(MsgType=text),则回复三个难过的QQ表情给用户。能够看出,无论是用户发给公众帐号,还是公众帐号发给用户,都能够使用QQ表情的文字代码(如:[难过] /难过)和符号代码(如 /::()。
公众帐号识别用户发送的QQ表情
在掌握了怎样发送QQ表情后,我们再来看看公众帐号怎样识别用户发送的是QQ表情。这是什么意思呢?当用户向公众帐号发送一个QQ表情,在后台程序中接收到的会是什么值,我们又怎么知道这个值就是一个QQ表情。
事实上,仅仅要做个简单的測试,比方:将接收到的文本消息输出到日志中(能够用log4j或者System.out.print),不难发现:向公众帐号发送一个QQ表情,在后台程序中接收到的是QQ表情的符号代码。
以下是我简单封装的一个方法,通过正則表達式实现的,用于推断用户发送的是否是单个QQ表情。
- /**
- * 推断是否是QQ表情
- *
- * @param content
- * @return
- */
- public static boolean isQqFace(String content) {
- boolean result = false;
- // 推断QQ表情的正則表達式
- String qqfaceRegex = "/::\\)|/::~|/::B|/::\\||/:8-\\)|/::<|/::$|/::X|/::Z|/::'\\(|/::-\\||/::@|/::P|/::D|/::O|/::\\(|/::\\+|/:--b|/::Q|/::T|/:,@P|/:,@-D|/::d|/:,@o|/::g|/:\\|-\\)|/::!|/::L|/::>|/::,@|/:,@f|/::-S|/:\\?|/:,@x|/:,@@|/::8|/:,@!|/:!!!|/:xx|/:bye|/:wipe|/:dig|/:handclap|/:&-\\(|/:B-\\)|/:<@|/:@>|/::-O|/:>-\\||/:P-\\(|/::'\\||/:X-\\)|/::\\*|/:@x|/:8\\*|/:pd|/:<W>|/:beer|/:basketb|/:oo|/:coffee|/:eat|/:pig|/:rose|/:fade|/:showlove|/:heart|/:break|/:cake|/:li|/:bome|/:kn|/:footb|/:ladybug|/:shit|/:moon|/:sun|/:gift|/:hug|/:strong|/:weak|/:share|/:v|/:@\\)|/:jj|/:@@|/:bad|/:lvu|/:no|/:ok|/:love|/:<L>|/:jump|/:shake|/:<O>|/:circle|/:kotow|/:turn|/:skip|/:oY|/:#-0|/:hiphot|/:kiss|/:<&|/:&>";
- Pattern p = Pattern.compile(qqfaceRegex);
- Matcher m = p.matcher(content);
- if (m.matches()) {
- result = true;
- }
- return result;
- }
以下是方法的使用,实现了这样一个简单的功能:用户发什么QQ表情给公众帐号,公众帐号就回复什么QQ表情给用户(xiaoqrobot就是这么做的)。实现代码例如以下:
- // 文本消息
- if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
- // 文本消息内容
- String content = requestMap.get("Content");
- // 推断用户发送的是否是单个QQ表情
- if(XiaoqUtil.isQqFace(content)) {
- // 回复文本消息
- TextMessage textMessage = new TextMessage();
- textMessage.setToUserName(fromUserName);
- textMessage.setFromUserName(toUserName);
- textMessage.setCreateTime(new Date().getTime());
- textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
- textMessage.setFuncFlag(0);
- // 用户发什么QQ表情,就返回什么QQ表情
- textMessage.setContent(content);
- // 将文本消息对象转换成xml字符串
- respMessage = MessageUtil.textMessageToXml(textMessage);
- }
- }
好了,关于微信公众帐号中QQ表情的使用就介绍这么多。事实上,我并不希望刚开始学习的人上来仅仅是简单拷贝我贴出的代码,实现了自己想要的功能就完事了,更希望初学的朋友能够通过此文章学会一种思考问题和解决这个问题的方法。
[033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收(转)的更多相关文章
- [033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收
我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜.怒.哀.乐等表达人物心情的小图片.本文重点要介绍的内容就是如何在微信公众平台使用QQ表情, ...
- [039] 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)
引言及内容概要 距离写上一篇文章<自定义菜单的创建及菜单事件响应>整整过了两个月的时间,那时公众平台还没有开放view类型的菜单.在不久前,微信公众平台悄悄开放了view类型的菜单,却没有 ...
- 微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java
欢迎加入群:347245650 345531810 进行讨论相互交流 我的微信号:572839485 我的微信公众账号 我的微社区欢迎关注 索取源码←请点击 图床:没有服务器 拖拽图片 外网即 ...
- [034] 微信公众帐号开发教程第10篇-解析接口中的消息创建时间CreateTime(转)
从微信公众平台的消息接口指南中能够看出,每种类型的消息定义中,都包括有CreateTime參数,它表示消息的创建时间,例如以下图所看到的: 上图是消息接口指南中4.1-文本消息的定义.注意Create ...
- 微信公众帐号开发。大家是用框架还是自己写的流程。现在遇到若干问题。请教各路大仙 - V2EX
微信公众帐号开发.大家是用框架还是自己写的流程.现在遇到若干问题.请教各路大仙 - V2EX 微信公众帐号开发.大家是用框架还是自己写的流程.现在遇到若干问题.请教各路大仙
- 微信公众帐号开发之一(java)
闲来没事,就记录一下微信公众平台的开发吧~ 其实微信公众平台开发没有想象中的那么困难,因为注册了微信公众平台帐号登录之后在开发者模式里有详细的文档,个人感觉介绍还是比较详细的. 微信公众平台订阅号和服 ...
- 微信公众帐号开发-消息创建时间long型与标准时间的互相转换
/** * */ package com.hd.admin.wxmeet.utils; /** * @author jymcpp * */ import java.text.DateFor ...
- 欢迎大家关注我的微信公众帐号小q机器人(xiaoqrobot)(转)
一个偶然的机会让我接触到了微信公众平台,赶紧加了几个交流群了解下相关情况,突然间发现好像全部的APP开发人员都在研究微信公众帐号的开发,而我显得有些落舞了.至于为什么热度会这么高,我想一个数字足以说明 ...
- SQLSERVER走起微信公众帐号已经开通搜狗微信搜索
SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...
随机推荐
- Java代码优化策略
1.生成对象时,合理分配空间和大小:new ArrayList(100); 2.优化for循环: Vector vect = new Vector(1000); For(int i=0; i<v ...
- Xcode 新版本如何设置ARC
在刚刚开始学习IOS开发时,最好不要开启ARC,这样有助于学习内存管理,但不少刚刚接触Xcode的朋友可能会发现,当你使用最新版本的Xcode时,敲入release等代码时会提示报错.这是因为系统默认 ...
- 「OC」类和对象
一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO ...
- Java基础之编程语法(一)
1.基本格式 所有Java代码都应该在一个class中. Java是严格区分大小写的. Java是一种自由格式的语言.Java代码分为结构定义语句和功能执行语句,功能执行语句最后必须以分号结束. 2. ...
- What is Webhook ( Introduction to Webhook )
A webhook in web development is a method of augmenting or altering the behavior of a web page, or we ...
- Objective-C 程序设计第四版 二
1,%@ 是用于输出OC里面的对象.例如 NSString *str = @“ls kd kd kf ”; NSLog(@“%@“, str); 2,NSInteger不是一个对象,而是基本数据类型 ...
- C语言之六大排序算法
排序算法 1.直接插入排序 直接插入排序是将原始数据依次从已排好序的序列的最右侧比较起,若小于则向前插,一直插到合适的位置即可. 源代码如下: #include<stdio.h> void ...
- SQL分页存储过程(不支持多表联合查询,不支持多字段排序)
CREATE PROCEDURE [dbo].[Pro_GetPageOfRecords] @PageSize INT=20, --分页大小 @CurrentPage INT, --第几页 @Clum ...
- HBase 几点思考
1. http://blog.csdn.net/yueyedeai/article/details/14648067 2. http://blog.csdn.net/pirateleo/article ...
- 一个简单的基于canvas小游戏
GDOI2016是我的退役战,不知道是题目画风不对,还是我自身的问题. 不过没关系啦,反正已经进过一次队OI生涯就没有什么遗憾的了. 这几天尝试着去做了个所谓的html5小游戏,略显简陋,但还是写个总 ...