微信“拍一拍”,只用一行代码就实现了?

近日,微信推出新功能“拍一拍”。这个风趣的功能一上线就炸了锅,冲上热搜。

当然,我们说的拍一拍,不是这个。

也不是这个拍一拍。

所谓“拍一拍”,是指在私聊或群聊的时候,双击对方头像,手机就会震动两下,同时,聊天框里就会提示“你拍了拍xxx”字样。虽然被拍的用户只能看到字样,手机不会震动,但聊天框却和收到消息一样,被显示到前排。


网友吐槽:这个功能真是鸡肋

很多网友抱怨,这个功能没起到提醒目的,却让人意识到自己时刻在线,增加了焦虑。还有网友吐槽,现在微信还有很多不完善的功能,推出这么个功能,没有实际用途,真是鸡肋。

这个新功能马上被玩得花样翻飞。一些网友将昵称改成马屁、钱包等,群里画风顿时诡谲异常。

有人说,这个功能终结了“在吗”的问候方式。但也会有尴尬的事情发生。比如,你在群里爬楼的时候,没忍住双击了领导的头像。

针对微信待开发的功能,很多媒体在微博上发起了投票活动。

image

支持者力挺:这是产品经理式的浪漫

有人反对,就必然有人赞同。有人将这个看似鸡肋功能看作“产品经理式”的浪漫情怀?这个功能有以下几个作用:

1. 缓解社交压力

拍一拍的存在,会缓解“在吗”引起的尴尬与不适;虽然,“拍一拍”和QQ的“抖一抖”、“戳一戳”类似,都属于向好友轻量级打招呼,但“拍一拍”很克制很微弱,并没有像“抖一抖”那样,将对话框突兀地到屏幕前,给对方造成干扰。

2. 熟人间互动游戏

实际上,“拍一拍”与其说是功能性的,不如说是娱乐性的。拍一拍这个动作,在现实生活中,只有熟人之间才会发生,通过这个小功能,能够增加熟人之间的互动感,而且对不同的人拍一拍,会得到不同回应。

3. 提高社群活跃度

微信产品经理张小龙这样评价“拍一拍”功能:

这个功能明显提升了微信活跃度,尤其是提高了微信群的活跃度。

大家都有很多微信群,但活跃的群不超过三分之一,有些群只是管理员每天发早报、广告,即便工作群,除了工作汇报,也很少热起来,根本没实现社群互动效果。“拍一拍”虽算不上酷炫,却为沉寂的社群提供了促活机会。


关于“拍一拍”的一行代码

很多人感兴趣实现“拍一拍”的这行代码长什么样,于是有大神贴出了下面这一行使用了 Lambda语法的C++代码:

head.onDoubleClick([&](e){ msgSender.send({.msgType= MSG_TYPE_SYSTEM_TEXT, .contentTemplate = fmt("%s拍了拍%s" , app.getCurrentUser(), e.target)}); });

这行代码,主要是在“拍了拍”前后传递你和好友的微信昵称参数,发送相应接口后,输出为一条小灰色条消息。但这程序里不包括双击抖动头像的效果,因为这个功能是之前版本中的。

另外,Python也能实现这个功能,步骤如下:

1. 用appium操控手机

安装appium后用Python打开微信,如下:


难点是desired_cap参数配置,下面介绍一下:

  • platformName:表示设备操作系统

  • deviceName:表示设备名称

  • apppackage:表示app程序包名

  • appActivity:表示app入口Activity名

手机连接电脑后,打开开发者模式,运行程序,手机里的微信就自动打开了。

2. 模拟双击头像

(1)原理介绍

微信“拍一拍”通过双击好友头像实现,如下图:

想双击头像,就要先获得头像在屏幕中的坐标。这里给大家介绍一个函数。

基于Python-opencv2的目标定位模块:Aircv使用其find_template函数,可以查找目标图像在原始图像中的坐标范围,用法如下:

  • imgsrc=原始图片路径

  • imgobj=待查找目标图片路径

若未找到,则match_result=None;若找到,则返回如下数据:

{'result':(570.0,2771.0),'rectangle':((30,1601),(30,3941),(1110,1601),(1110,3941)),'confidence':0.999999463558197}

其中:

  • result为匹配图片在原始图片上的中心坐标,即点击点;

  • rectangle为匹配图片在原始图像上四边形坐标;

  • confidence为匹配相似率

(2)如何在程序中自动获取好友头像坐标?

在appium中,头像在屏幕中像素为140×140。先保存好友头像,用PS将头像改为此像素。

在程序中创建1个while循环,在第一步基础上,手动进入好友聊天框(也可通过识别好友头像自动进入);

通过appium对手机屏幕截图,命名为src.png,将其和头像路径(obj.png)导入1中检测函数:

driver.save_screenshot('src.png')imgsrc='src.png'imgobj='obj.png'match_result=matchImg(imgsrc, imgobj)

若返回None,说明聊天窗口没检测到好友头像,继续循环;若检测到头像坐标,则解析返回的坐标数据,用for循环模拟双击坐标位置:

if match_result is not None:result = [match_result['rectangle'][0], match_result['rectangle'][3]] for i in range(2): driver.tap(result,100) print('拍成功')else: print('没找到头像')

以上就是实现“拍一拍”的过程,学会了吗?

如果学会了,就拍了拍你,送你四个字:

没学会,就赶紧学习去吧。


东软睿道数据结构系列课程,免费上线!

8堂课,近10小时课程,让你掌握数据结构重要考点。课堂中附源码及文档,便于反复学习。

请大家戳以下海报二维码收看。

image
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。