-
想查看微信好友撤回的消息?Python帮你搞定
2019-12-01 13:50:59这样,就可以指定发送给任意好友,通过好友的昵称在好友列表中进行检索,找到的话,就获取该好友的UserName,然后发送消息,也可以通过对好友的备注名(RemarkName)查找,大家可以自己尝试。 4、装饰器 关于...要说微信最让人恶心的发明,消息撤回绝对能上榜。
比如你现在正和女朋友用微信聊着天,或者跟自己喜欢的女孩子聊着天,一个不留神,你没注意到对方发的消息就被她及时撤回了,这时你很好奇,好奇她到底发了什么?于是你打算问问她发了什么,结果她回一句"没什么"。这一回复,让你的好奇心更加强烈了,顿时就感觉消息撤回这一功能就是用来折磨人的。
那么有没有什么办法能够知道你心爱的她(他)到底撤回了什么呢?不要着急,Python帮你搞定。
模块介绍
本篇文章将用Python实现微信的防撤回功能,针对微信操作,Python有一个十分强大的库:itchat。相信没有使用过也有所耳闻吧。官方是这样描述它的:
Project description itchat is a open souce wechat api project for personal account. It enables you to access your personal wechat account through command line.
翻译过来就是:itchat是一个针对个人帐户的开放式微信api项目,它使您可以通过命令行访问您的个人微信帐户。
既然是针对微信的开发,我们就离不开这个模块的协助,所以,首先下载该模块:
pip install itchat
也可以在开发工具Pycharm中直接导入该模块,Pycharm会提示你下载。
模块初体验
考虑到应该有些人从来没有使用过该模块,这里对该模块进行一个简单的入门。
1、如何登陆微信
既然要操作微信,那么摆在我们面前的问题就是如何登录微信,登录微信非常简单,直接看代码:
import itchat itchat.login()
没错,一句代码即可完成登录,运行之后就会弹出一个二维码,扫描之后在手机上授权登录,控制台就会提示是否登录成功。
Login successfully as Y
这样就说明登录成功了。
这里需要注意一个问题,就是你会发现每次运行程序都要扫描二维码登录,这样未免太麻烦,有没有办法只扫描一次,以后就自动登录了呢?这当然是可以的。
import itchat itchat.auto_login(hotReload=True)
通过函数名也能知道该方法可以实现自动登录,运行程序,扫码登录之后会在项目路径下创建一个itchat.pkl文件,该文件用于存储登录的状态,所以千万不要动它,如果你想换一个微信账号登录,就要先把这个文件删除,因为该文件记录的是上一个微信的状态,删除之后即可登录。
需要注意:这种方式只能保证你在短时间内无需重复登录,时间长了,还是需要重新扫码登录的。
进行到这里,有些人可能会发现自己的微信登录不上的情况,据我所知,有些新注册的微信和长期不使用的微信是无法登录网页版微信的,所以这里也会导致登录不上。如果登录不上,那也是没有办法的,下面的内容也就没有意义了。
2、获取好友列表
登录上微信之后,我们来用一用itchat模块提供的一些api,比如获取好友列表。
import itchat itchat.auto_login(hotReload=True) friends = itchat.get_friends() # 好友列表 print(friends)
使用get_friends()函数即可获取到好友列表的所有好友信息,包括昵称、备注名、地址、个性签名、性别等等。
这里我随意地复制了一个好友的个人信息,当然由于隐私问题,这里的部分信息我用"*"号代替了,我们重点是分析一下这些信息的内容。比如最开始的UserName,这是用户的唯一标识,相当于身份证号码,你的每个好友都会有这样一个标识,每个好友之间肯定都是不一样的;然后是NickName,这是好友的昵称;HeadImgUrl是好友的头像地址;RemarkName是你对好友的备注名;Province是省份等等,这里就不一一介绍了,感兴趣的话可以自己去了解一下。
3、如何发送消息给好友
如何发送一条消息给指定的好友呢?也非常简单:
import itchat itchat.auto_login(hotReload=True) itchat.send('Hello World', toUserName='@f9e42aafa1175b38b60a0be4d651a34c77f2528d9b7784e7aaf415090eca8fa6')
此时的UserName就派上用场了,也就是好友的唯一标识,这样,我们就给该标识对应的好友发送了一条消息,所以,我们可以这样改进程序:
import itchat itchat.auto_login(hotReload=True) friends = itchat.get_friends() nickName = '诚信通授权渠道商-老曾' for i in friends: if '诚信通授权渠道商-老曾' == i['NickName']: itchat.send('Hello World', toUserName=i['UserName']) break
这样,就可以指定发送给任意好友,通过好友的昵称在好友列表中进行检索,找到的话,就获取该好友的UserName,然后发送消息,也可以通过对好友的备注名(RemarkName)查找,大家可以自己尝试。
4、装饰器
关于itchat模块还有很多功能,这里就不作过多讲解了,我们只讲关于这次程序的知识点,这里是最后一个内容,装饰器。
关于装饰器,一时半会还讲不清楚,这里只是简单介绍一下,装饰器的作用就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。
例如现在有一个函数fun(),你并不知晓函数的实现原理,你肯定也不能去修改这个函数的代码,而你需要给该函数添加一个输出开始运行时间和结束运行时间的功能,该如何实现呢?这个时候就可以使用装饰器。
import time def show_time(fun): def inner(): print(time.time()) fun() print(time.time()) return inner @show_time def fun(): pass fun()
该如何理解这段程序呢?首先@show_time即是使用一个装饰器show_time,此时会将装饰的函数,也就是fun()作为参数传递给装饰器show_time(),我们知道函数作为返回值的话,执行的其实是该函数,所以程序会执行内部函数inner(),此时输出开始运行时间,然后调用fun()函数(原有的功能不能丢),最后输出结束运行时间。这样就通过装饰器实现了一个函数的功能扩展,这也是典型的面向切面编程思想。
如何获取好友发送的消息
准备工作做完了,接下来就进入正题了,对于上面的知识点,大家一定要掌握,如果不懂的话,接下来的代码你可能会很懵。
首先,我们看看该如何获取到好友发送的消息。
import itchat itchat.auto_login(hotReload=True) @itchat.msg_register(itchat.content.TEXT) def resever_info(msg): print(msg) itchat.run() #保持运行
itchat模块提供了@itchat.msg_register装饰器来监听消息,比如这里我们自定义了一个resever_info()函数,并用装饰器对消息进行监听,装饰器中传入了itchat.content.TEXT类型,这样监听的就是文本消息,监听到输入之后,装饰器就会将文本消息传入resever_info()的参数中。所以,msg就是监听到的消息内容。
对于@itchat.msg_register装饰器,它不仅可以监听文本,还可以监听语音、图片、地图、名片、视频等等,为了方便,这里我们导入itchat模块下的content模块中的全部内容,因为这些消息类型都是在该模块下声明的。
TEXT = 'Text' MAP = 'Map' CARD = 'Card' NOTE = 'Note' SHARING = 'Sharing' PICTURE = 'Picture' RECORDING = VOICE = 'Recording' ATTACHMENT = 'Attachment' VIDEO = 'Video' FRIENDS = 'Friends' SYSTEM = 'System' INCOME_MSG = [TEXT, MAP, CARD, NOTE, SHARING, PICTURE, RECORDING, VOICE, ATTACHMENT, VIDEO, FRIENDS, SYSTEM]
还有要注意的地方,最后记得调用itchat的run()函数,保持程序运行,否则程序就直接结束了。
接下来我们就可以测试一下了,我让我的好友发了一条消息给我,控制台就输出了如下内容:
内容很多,我们只挑重要的看。例如FromUserName,这是发送者的标识;ToUserName,这是接收者的标识;Content,这当然就是文本内容了;CreateTime,这是发送时间;注意最后的两个值:Type,这是消息类型,这里是文本类型Text,然后Text也是文本内容,所以如果想取出好友发送的消息内容的话,用Content和Text都可以。分析过后,取出内容就很简单了:
import itchat import time from itchat.content import * # 导入itchat下的content模块 itchat.auto_login(hotReload=True) @itchat.msg_register(TEXT) def resever_info(msg): info = msg['Text'] # 取出文本消息 info_type = msg['Type'] # 取出消息类型 fromUser = itchat.search_friends(userName=msg['FromUserName'])['NickName'] ticks = msg['CreateTime'] # 获取信息发送的时间 time_local = time.localtime(ticks) dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local) # 格式化日期 print("发送人:" + fromUser + '\n消息类型:' + info_type + '\n发送时间:' + dt + '\n消息内容:' + info) itchat.run()
这里用到了time模块,用于格式化日期。
为了测试方便,我就自己发了一条消息给别人,自己发的消息也是会被监听的,看运行结果:
发送人:Y 消息类型:Text 发送时间:2019-11-28 16:19:13 消息内容:土鳖
再来试试语音和图片能获取到吗?我们回到刚才的代码:
import itchat from itchat.content import * # 导入itchat下的content模块 itchat.auto_login(hotReload=True) @itchat.msg_register(TEXT) def resever_info(msg): print(msg) itchat.run()
运行之后,发送语音和图片试试,不管怎么发,控制台就是没反应,这是当然的了,我们还没对语音和图片进行监听呢,修改代码:
import itchat from itchat.content import * # 导入itchat下的content模块 itchat.auto_login(hotReload=True) @itchat.msg_register([TEXT, PICTURE, RECORDING]) #添加了对图片和语音的监听 def resever_info(msg): print(msg) itchat.run()
再运行试试,先发送一张图片,再发送一段语音,控制台输出了两段内容,由于篇幅过长,就不贴出来了,无非还是那些信息,发送者,接收者,日期,消息内容等等,这里只需注意图片和语音的内容:
'Type': 'Picture', 'Text': <function get_download_fn.<locals>.download_fn at 0x0000000003574158> 'Type': 'Recording', 'Text': <function get_download_fn.<locals>.download_fn at 0x0000000002CFED08>
这是一段地址,通过它我们就能够将图片和语音保存起来。
如何保存好友发送的图片和语音
下面我们对好友发送的图片和语音进行保存。
import itchat import os from itchat.content import * # 导入itchat下的content模块 itchat.auto_login(hotReload=True) temp = 'C:/Users/Administrator/Desktop/CrawlerDemo' + '/' + '撤回的消息' # 如果不存在该文件夹,就创建 if not os.path.exists(temp): os.mkdir(temp) @itchat.msg_register([TEXT, PICTURE, RECORDING]) def resever_info(msg): info = msg['Text'] # 取出文本消息 info_type = msg['Type'] # 取出消息类型 name = msg['FileName'] # 取出语音(图片)文件名 if info_type == 'Recording': # 保存语音 info(temp + '/' + name) elif info_type == 'Picture': # 保存图片 info(temp + '/' + name) itchat.run()
运行起来,然后发送一张图片和一条语音,就会在指定目录下生成两个文件:
如何监听好友撤回了消息
到这里,我们其实已经完成了消息监听,只需要稍加修改即可,但是这个程序是有缺陷的,因为不是所有消息我们都需要去保存的,好友正常发送过来的消息我们直接就能看到,保存下来不是多此一举吗?我们的目的是想知道好友撤回了什么内容,这就涉及到如何监听好友是否撤回了消息这一问题了。其实也非常简单,Content模块为我们提供了NOTE类型,该类型指的是系统消息。
所以我们可以自定义一个函数用来监听系统消息:
import itchat from itchat.content import * # 导入itchat下的content模块 itchat.auto_login(hotReload=True) @itchat.msg_register(NOTE) def note_info(msg): # 监听系统消息 print(msg) itchat.run()
运行程序,我们撤回一条消息测试一下,输出结果如下:
...... 'DisplayName': '', 'ChatRoomId': 0, 'KeyWord': '', 'EncryChatRoomId': '', 'IsOwner': 0}>, 'Type': 'Note', 'Text': '你撤回了一条消息'} ......
这里截取了部分内容,会发现,撤回消息的文本内容为"你撤回了一条消息",所以要想知道好友是否撤回了消息就非常简单了,判断
msg['Text'] == '你撤回了一条消息'
即可。实现微信防撤回程序
关于程序每个步骤的代码到这里就分析完了,接下来是对所有代码的汇总,也是整个程序的完整代码:
import itchat from itchat.content import * import os import time import xml.dom.minidom # 解析xml模块 # 这是保存撤回消息的文件目录(如:图片、语音等),这里已经写死了,大家可以自行修改 temp = 'C:/Users/Administrator/Desktop/CrawlerDemo' + '/' + '撤回的消息' if not os.path.exists(temp): os.mkdir(temp) itchat.auto_login(True) # 自动登录 dict = {} # 定义一个字典 # 这是一个装饰器,给下面的函数添加新功能 # 能够捕获好友发送的消息,并传递给函数参数msg @itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, SHARING, RECORDING, ATTACHMENT, VIDEO]) # 文本,语音,图片 def resever_info(msg): global dict # 声明全局变量 info = msg['Text'] # 取出消息内容 msgId = msg['MsgId'] # 取出消息标识 info_type = msg['Type'] # 取出消息类型 name = msg['FileName'] # 取出消息文件名 # 取出消息发送者标识并从好友列表中检索 fromUser = itchat.search_friends(userName=msg['FromUserName'])['NickName'] ticks = msg['CreateTime'] # 获取信息发送的时间 time_local = time.localtime(ticks) dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local) # 格式化日期 # 将消息标识和消息内容添加到字典 # 每一条消息的唯一标识作为键,消息的具体信息作为值,也是一个字典 dict[msgId] = {"info": info, "info_type": info_type, "name": name, "fromUser": fromUser, "dt": dt} @itchat.msg_register(NOTE) # 监听系统提示 def note_info(msg): # 监听到好友撤回了一条消息 if '撤回了一条消息' in msg['Text']: # 获取系统消息中的Content结点值 content = msg['Content'] # Content值为xml,解析xml doc = xml.dom.minidom.parseString(content) # 取出msgid标签的值 result = doc.getElementsByTagName("msgid") # 该msgId就是撤回的消息标识,通过它可以在字典中找到撤回的消息信息 msgId = result[0].childNodes[0].nodeValue # 从字典中取出对应消息标识的消息类型 msg_type = dict[msgId]['info_type'] if msg_type == 'Recording': # 撤回的消息为语音 recording_info = dict[msgId]['info'] # 取出消息标识对应的消息内容 info_name = dict[msgId]['name'] # 取出消息文件名 fromUser = dict[msgId]['fromUser'] # 取出发送者 dt = dict[msgId]['dt'] # 取出发送时间 recording_info(temp + '/' + info_name) # 保存语音 # 拼接提示消息 send_msg = '【发送人:】' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回了一条语音' itchat.send(send_msg, 'filehelper') # 将提示消息发送给文件助手 # 发送保存的语音 itchat.send_file(temp + '/' + info_name, 'filehelper') del dict[msgId] # 删除字典中对应的消息 print("保存语音") elif msg_type == 'Text': text_info = dict[msgId]['info'] # 取出消息标识对应的消息内容 fromUser = dict[msgId]['fromUser'] # 取出发送者 dt = dict[msgId]['dt'] # 取出发送时间 # 拼接提示消息 send_msg = '【发送人:】' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回内容:' + text_info # 将提示消息发送给文件助手 itchat.send(send_msg, 'filehelper') del dict[msgId] # 删除字典中对应的消息 print("保存文本") elif msg_type == 'Picture': picture_info = dict[msgId]['info'] # 取出消息标识对应的消息内容 fromUser = dict[msgId]['fromUser'] # 取出发送者 dt = dict[msgId]['dt'] # 取出发送时间 info_name = dict[msgId]['name'] # 取出文件名 picture_info(temp + '/' + info_name) # 保存图片 # 拼接提示消息 send_msg = '【发送人:】' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回了一张图片' itchat.send(send_msg, 'filehelper') # 将图片发送给文件助手 # 发送保存的语音 itchat.send_file(temp + '/' + info_name, 'filehelper') del dict[msgId] # 删除字典中对应的消息 print("保存图片") itchat.run()
这样,一个完整的防撤回程序就完成了,如果你对于前面的铺垫能够掌握得很好的话,这个程序对你来说就是小菜一碟,每一句代码的注释我都有写,应该很容易看懂。
测试程序
到了激动人心的测试环节,我们来测试一下这个程序是否编写成功了。
我向我的好友发送了三条消息,分别是文本、图片和语音,接着我一一撤回,然后,微信程序就自动向文件传输助手发送了三条消息:
到这里,这个程序就基本完成了。你们在测试的时候也可以叫自己的好友、同学发给你几条消息,然后撤回看看是否能够成功获取到撤回的消息。
撤回的消息发给别人肯定不行,这样不仅泄露了隐私,也会骚扰到别人,所以这里我选择将撤回的消息发送给文件传输助手,如何将消息发送给文件传输助手也很简单:
itchat.send(send_msg, toUserName='filehelper')
toUserName传入filehelper即可,这样,如果对方撤回了消息,你就可以前往文件传输助手查看对方究竟撤回了什么。
说说我遇到的一些坑
这个程序说它难,其实并不难,但我也在编写的过程中遇到了一些坑,一开始我是一条消息一条消息地进行测试,发现程序是正常的,但我连续撤回几条消息,却发现程序出现了Bug。比如我一开始发送了一张图片和一段文字,结果我撤回这两条消息后,得到的却是两段文字。后面我才醒悟过来,是后面的消息覆盖了前面的消息,导致了这个结果,所以在程序中,我定义了一个字典,用于存放好友输入的消息,当监听到消息被撤回时,就通过撤回消息产生的内容中的msgId去和字典中的匹配,匹配到的就是被撤回的消息,然后进行操作即可。
使用教程
想使用该程序非常简单,实现微信防撤回程序节点下有程序的完整代码,直接复制粘贴到你自己的python文件,然后运行该文件即可,运行后会产生一个二维码,用手机验证登录即可。
当然,你也可以选择将该程序打包成可执行的exe文件,这样运行更加方便,打包方式:
首先打开cmd窗口,下载pyinstaller模块,有的话就不用下载了,下载指令:pip insall pyinstaller
,此时我们通过cmd窗口进入到python文件目录,比如我这里
那就进入到该目录下:
然后执行下面这条指令:pyinstaller -F wechat.py
后面是需要打包的文件名,执行命令后,就会在文件同级目录下生成一个dist文件夹。
进入该文件夹,就看到我们的.exe文件了,然后双击执行即可。最后
这个程序目前只实现了监听好友的文本、图片、语音类型的消息,对于其它类型的消息,还有群聊的消息都是无法监听到的,感兴趣的话大家可以自己试着实现一下。
因为自己也是刚刚接触这个模块,文中的程序可能会出现一些意想不到的Bug,但目前我测试来看是没有问题的,如有问题,欢迎评论区留言。
-
网页点击链接,跳转qq添加好友
2018-09-17 10:46:44一、网页版本点击跳转到添加好友界面:(直接用下面的链接地址,将qq号改成自己的即可) ...二、调用客户端,添加好友(直接用下面的链接地址,将qq号改成自己的即可) tencent://AddContact/?fr...一、网页版本点击跳转到添加好友界面:(直接用下面的链接地址,将qq号改成自己的即可)
http://wpa.qq.com/msgrd?v=3&uin=1570915261&site=qq&menu=yes
测试:点击添加qq
效果:
二、调用客户端,添加好友(直接用下面的链接地址,将qq号改成自己的即可)
tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=1570915261&website=www.oicqzone.com
测试: 点击添加qq
效果:
注意:点击添加好友如果出现以下这种情况,请检跳转的对应链接对不对,看链接地址中tencent后面是否少一个半角冒号,正确的应该为“tencent://”。
错误地址:
正确地址:欢迎加入 CSDN技术交流群2:(点击即可加群)QQ群:456543087
CSDN技术交流群(已满员):(点击即可加群)QQ群:681223095。
因经常有人留言,未能及时查看到和回复,所以特建此群,以方便交流。方便问题讨论,有问题和没有问题的小伙伴均可加入,用作自我学习和共同进步。本博主不一定长期在线,但是qq群里会有很多热心的小伙伴,大家一起讨论解决问题。
右边的二维码是公众号。关注公众号,更多学习内容给予推送,争取每日更新 -
Facebook获取好友数据,好友的好友的数据
2016-02-18 03:23:34然后获取这10W账户的个人信息/好友信息/推文信息/推文评论等,频率为即时获取。不知道Facebook是否提供相应的接口,希望亲测过后再回复,或有相应文档的请发我邮箱1062215393@qq.com,悬赏的分数可以追加。多谢各位... -
微信SDK可以获取到好友列表么?添加好友呢?QQ查询好友列表和添加好友呢?
2015-11-04 03:20:59微信SDK可以获取到好友列表么?添加好友呢?QQ查询好友列表和添加好友呢? -
unity功能开发——好友系统
2020-09-11 14:09:24游戏中设计好友系统主要目的是增加游戏的互动性 问题 首先介绍一下好友系统的功能: 1.好友列表展示; 2.添加好友;删除好友;一键操作等; 3.黑名单; 4.同意好友申请;拒绝好友申请; 解决 1.好友系统在数据获取...推荐阅读:
前言
游戏中设计好友系统主要目的是增加游戏的互动性
问题
首先介绍一下好友系统的功能:
1.好友列表展示;
2.添加好友;删除好友;一键操作等;
3.黑名单;
4.同意好友申请;拒绝好友申请;解决
1.好友系统在数据获取方面采取和邮件一样的方式。点击进入取获取好友数据,初始化。
请求打开邮箱界面但界面还未打开时去向服务器请求数据network.request("getFriendList")
成功后返回好友数据,为了使逻辑严密一些,这里我们通常还需要做一步操作,从好友列表中去掉玩家自己的信息.
因为玩家不可能与自己成为好友.当然,如果你非得和自己成为好友,那也是没问题的.展示好友列表的时候和邮件一样,推荐使用循环列表,原因我就不多说了,你懂的~2.有了好友列表,当然接下来就是你的主场了,你可以尽情的去操作.你可以去搜索你暗恋的人,添加她为好友.可以的话还可以表白一下,如果不幸被拒绝也不用担心,你可以把她删除或者拉黑.
首先介绍一下查找功能的实现:
搜索功能通过玩家输入的名字,向服务器请求数据,请求之前为了造成不必要的请求,我们还需要判断是否输入了文本;是否是玩家自己。local name = ui.input.text if name == "" then labelpopup.show("请输入好友的名字或ID") return end local user = commonmodel.user if name == user.uid or name == user.nickname then labelpopup.show("不能添加自己") return end network.request("friend_find", {name=name})
从服务器拿到数据后,根据需求展示搜索结果
添加好友:network.request("friend_apply", {uid=uid})
请求添加好友成功后,应当将添加按钮切换已申请状态,防止玩家短时间内重复申请
删除好友:删除成功后需刷新好友列表network.request("friend_find", {uid=uid})
3.拉黑好友:返回成功后,刷新黑名单列表和和好友列表(将该玩家从好友列表移除并添加到黑名单列表)
network.request("friend_black_add", {uid=uid})
4.同意好友申请
network.request("friend_apply_consent", {uid=uid})
拒绝好友申请
network.request("friend_apply_refuse", {uid=uid})
-
03环信好友管理 - 添加好友(好友申请)
2016-02-13 10:32:15(1)添加好友 (2)从本地获取好友列表 (3)从服务器获取最新好友列表 (4)接收好友添加请求 (5)删除好友 (6)被好友从名单上删除 1.搭建界面,创建相关控制器 2.在AddFriendViewController控制器里:/...EMChatManagerBuddyDelegate
Ø上面的协议的实现了对用户的基本操作,如(1)添加好友(2)从本地获取好友列表(3)从服务器获取最新好友列表(4)接收好友添加请求(5)删除好友(6)被好友从名单上删除
1.搭建界面,创建相关控制器
2.在AddFriendViewController控制器里:
3.演示/** * 添加好友 */ - (IBAction)addFriend:(UIButton *)sender { // 1. 获取输入的名称 NSString *username = self.inputField.text; if (username.length == 0) { return; } // 2.向服务器发送一个添加好友的请求 NSString *loingUsername = [[EaseMob sharedInstance].chatManager loginInfo][@"username"]; NSString *message = [@"我是" stringByAppendingString:loingUsername]; EMError *error = nil; [[EaseMob sharedInstance].chatManager addBuddy:username message:message error:&error]; if (!error) { // 提示(添加好友申请成功) UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"添加好友申请成功" preferredStyle:UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleCancel handler:nil]]; [self presentViewController:alert animated:YES completion:nil]; } }
查看环信后台,我们现在用test用户登录,添加test1
-
社交网络中的共同好友计算(一度好友与二度好友)
2016-05-24 16:46:36社交网络中经常存在求共同好友的需求,比如最常见的求一度好友与二度好友,如上图所示。package bit.edu.cn;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;... -
爬取QQ好友列表或定位QQ好友秘密
2020-03-16 16:56:05爬取QQ好友列表或定位QQ好友秘密 可用于爬取QQ好友的列表,或者对QQ好友进行对比找出发秘密的那个人 version 1 github地址 记得Star哦 介绍 通过selenium对模拟浏览器操作,然后获取QQ好友的列表。 在多个好友的... -
怎么加好友,是否支持好友分享
2015-12-09 02:58:08csdn中怎么加好友关注,可不可以支持好友分享?在线求回复,大神们!!! -
Android Smack 加好友后重新登录好友不见了
2017-03-13 02:31:35各位大佬,麻烦解答一下,为什么我有时候会出现smack加好友后重新登录好友不见了 加完好友当时显示是加成功了,双方订阅状态也变成both了,可是重新登陆后这个好友就不见了呢 -
案例二:推荐好友的好友
2018-07-08 12:05:37需求分析是简单的好友列表的差集吗?最应该推荐的好友TopN,如何排名?tom hello hadoop catworld hadoop hello hivecat tom hivemr hive hellohive cat hadoop world hello mrhadoop tom hive worldhello tom world... -
获取所有QQ好友列表以及好友信息
2018-06-25 15:22:33记得将访问空间权限改为QQ好友 接口地址: https://h5.qzone.qq.com/proxy/domain/base.qzone.qq.com/cgi-bin/right/get_entryuinlist.cgi?uin=741047261&amp;fupdate=1&amp;action=1&... -
ExpandableList类似QQ好友列表
2012-08-20 16:33:33ExpandableList类似QQ好友列表 -
MapReduce--8--求互为好友的好友对
2017-10-25 18:52:03MapReduce面试题2--求互为好友的好友对 1、数据格式 A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M G:A,C,D,E,F H:A,C,D,E,O I:A,O J:B,O K:A,C,D L:D,E,F M:E,F,G O:A,H,I,J,K数据的... -
xmpp 添加好友 好友状态监听
2015-11-24 18:31:51xmpp 添加好友 好友状态监听1.1 a + b b delete a a 监听到 unsubscribed1.2 b + a b delete a a 监听到 unsubscrib1.3 a + b 或者 b + a 被加方收到 subscrib 1.4 a 同意 b 的添加请求 b 收到 subscribedsubscribe ... -
python好友管理系统
2020-11-05 21:02:56# 添加好友功能,输入好友名字,添加到好友列表 # 删除好友功能,输入好友的名字,将好友从列表中删除 # 备注好友功能,输入好友的名字,给好友修改名称 # 展示好友,打印输出好友列表 # 退出程序 print("1:添加... -
wxid怎么加好友,原始id加好友的方法
2020-04-26 22:53:58什么是wxid? 当一个新用户注册后,他的...但却是服务器的唯一标志,所以还是可以凭借wxid_获取添加方式加好友的。 wxid开头的账号加好友就是直接用原始id直接来加好友 关于这个问题因为目前系统屏蔽了搜索接口,... -
关于好友(社交)关系的数据库设计
2018-06-15 17:30:14比如QQ或者一些社交网站,好友关系的数据库应该如何设计?于是我自己大概的进行了一些尝试。 【正文开始】 一开始,好友关系比较简单,比如: 这样1,2,3,4互为好友,它的数据库可以这样设计: CREATE ... -
好友表设计
2019-05-21 16:22:311.好友上限300人 预计用户数:50000 假设每人都有300个好友,数据总条数:50000*300=1500W ddb_user_relactionship 字段名 类型 长度 主键 可否为空 备注 USER_ID varchar 50 是 否 用户ID(sso_user表的外键) ... -
设计mysql表实现 好友列表、昵称设置、好友分组
2019-01-24 16:56:35今天在实现功能时遇到设计mysql表格实现 好友列表,本来感觉好友之间关系互相关联不好设计,后来把思路理清后实现了此功能,包括好友列表、昵称设置、好友分组,基本可以满足各个项目中关于好友列表设计的需求了 ... -
获取QQ好友共同好友列表信息
2015-11-21 21:48:21QQ推出过可以了解你和你的好友之间有多少个共同好友的功能。有时候,我会好奇。咦,这个共同好友都会有谁呢,咱们的交际圈子相互认识的都会有谁呢?这是一个好玩的问题哈。会不会觉得很神奇。是的,我们活在圈子下,... -
好友推荐算法
2018-02-23 14:37:38社交网络中,好友推荐随处可见,这里探讨好友推荐是如何做的。1、三元闭包理论 说到好友推荐,就不得不谈三元闭包理论。 三元闭包定义:在一个社交圈内,若两个人有一个共同好友,则这两个人在未来成为好友的可能... -
微信好友检测助手App
2019-06-21 10:08:10微信好友检测助手App 最近几周,写了个微信好友检测助手App,写这个的初衷是为了低成本的让用户检测自己微信上删除或拉黑自己的好友,不考虑用xposed插件的方式实现,主要还是普通用户玩不了这么复杂的东西,定位于... -
通过MapReduce寻找好友列表数据中的共同好友
2018-08-27 11:23:07以下是qq的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的) A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E:B,C,D,M,L F:A,B,C,D,E,O,M 求出哪些人两两之间有共同... -
qq好友列表获取之动态爬虫清洗爬取好友列表数据 - 获取qq好友、群、群成员列表
2019-03-04 12:14:32qq好友列表获取之动态爬虫清洗爬取qq好友列表数据 - 获取qq好友ip、群、群成员列表。我们的好友列表要从 qzone 获取,现在打开 qzone 的链接https://h5.qzone.qq.com/mqzone/index并且登陆。 具体步骤: 1、分析... -
用 Python 分析了所有微信好友,发现了一个秘密...
2019-06-19 08:50:00真爱,请置顶或星标 ...最近研究了一下itchat和matplotlib,目前实现了对微信好友头像、性别、区域、个性签名的采集及展示。 本文就来详细介绍一下这个库的用法和一些核心逻辑实现。 1.微信登录 importit... -
十度好友
2012-09-29 03:17:37在社交网络里(比如 LinkedIn),如果A和B是好友,B和C是好友,但是A和C不是好友,那么C是A的二度好友,给定一个社交网络的关系图,如何找到某一个人的所有十度好友。 分析: 如果想找到一个人的十度好友,马上... -
爬虫实现:获取微信好友列表爬取进行好友分析
2019-03-07 11:59:35这个Demo是利用HttpWebRequest和HttpWebResponse来爬取微信好友列表,讲信息存入数据库,并对信息进行分析,用图标画出来。 如何获得微信好友列表信息 首先前往https://wx.qq.com/登录自己的微信账号,打开浏览器... -
python 爬取微信好友信息,并分析微信好友信息
2019-06-21 14:53:201、python想要获取微信好友信息,必须用python登陆微信,以下代码可以打开微信登陆二维码,使用手机扫码登陆 itchat.auto_login(True) ...# 获取除自己以外的好友信息,update=True字段标识储存微信登陆信息到i...