前言
itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人。当然,该api的使用远不止一个机器人,更多的功能等着你来发现,比如这些。该接口与公众号接口itchatmp共享类似的操作方式,学习一次掌握两个工具。如今微信已经成为了个人社交的很大一部分,希望这个项目能够帮助你扩展你的个人的微信号、方便自己的生活。
安装
1
|
sudo pip install itchat |
登录
1
|
itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短时间的登录,并不会保留登录的状态,也就是下次登录时还是需要扫描二维码,如果加上hotReload==True,那么就会保留登录的状态,至少在后面的几次登录过程中不会再次扫描二维码,该参数生成一个静态文件itchat.pkl用于存储登录状态 |
退出及登录完成后调用的特定的方法
1
|
这里主要使用的是灰调函数的方法,登录完成后的方法需要赋值在 loginCallback 中退出后的方法,需要赋值在 exitCallback 中.若不设置 loginCallback 的值, 将会自动删除二维码图片并清空命令行显示. |
1
2
3
4
5
6
7
8
9
|
import itchat, time def lc(): print ( "Finash Login!" ) def ec(): print ( "exit" ) itchat.auto_login(loginCallback = lc, exitCallback = ec) time.sleep() itchat.logout() #强制退出登录 |
回复消息
send
1
|
send(msg = "Text Message" , toUserName = None ) |
参数:
msg : 文本消息内容
@fil@path_to_file : 发送文件
@img@path_to_img : 发送图片
@vid@path_to_video : 发送视频
toUserName : 发送对象, 如果留空, 将发送给自己.
返回值
1
|
True or False |
实例代码
1
2
3
4
5
6
7
|
# coding-utf-8 import itchat itchat.auto_login() itchat.send( "Hello World!" ) ithcat.send( "@fil@%s" % '/tmp/test.text' ) ithcat.send( "@img@%s" % '/tmp/test.png' ) ithcat.send( "@vid@%s" % '/tmp/test.mkv' ) |
send_msg
1
|
send_msg(msg='Text Message', toUserName=None),其中的的msg是要发送的文本,toUserName是发送对象, 如果留空, 将发送给自己,返回值为True或者False |
实例代码
1
2
3
|
import itchat itchat.auto_login() itchat.send_msg( "hello world." ) |
send_file
1
|
send_file(fileDir, toUserName=None) fileDir是文件路径, 当文件不存在时, 将打印无此文件的提醒,返回值为True或者False |
实例代码
1
2
3
4
|
import itchat itchat.auto_login() itchat.send_file( "/tmp/test.txt" ) |
send_image
1
|
send_image(fileDir, toUserName=None) 参数同上 |
实例代码
1
2
3
4
|
import itchat itchat.auto_login() itchat.send_img( "/tmp/test.txt" ) |
send_video
1
|
send_video(fileDir, toUserName=None) 参数同上 |
实例代码
1
2
3
4
|
import itchat itchat.auto_login() itchat.send_video( "/tmp/test.txt" ) |
注册消息方法
1
2
3
|
itchat 将根据接受到的消息类型寻找对应的已注册的方法. 如果一个消息类型没有对应的注册方法, 该消息将会被舍弃. 在运行过程中也可以动态注册方法, 注册方式与结果不变. |
注册方法
1
|
不带具体对象注册, 将注册为普通消息的回复方法. |
1
2
3
4
5
6
7
|
import itchat from itchat.content import * @itchat .msg_register(TEXT) #这里的TEXT表示如果有人发送文本消息,那么就会调用下面的方法 def simple_reply(msg): #这个是向发送者发送消息 itchat.send_msg( '已经收到了文本消息,消息内容为%s' % msg[ 'Text' ],toUserName = msg[ 'FromUserName' ]) return "T reveived: %s" % msg[ "Text" ] #返回的给对方的消息,msg["Text"]表示消息的内容 |
带对象参数注册, 对应消息对象将调用该方法,其中isFriendChat表示好友之间,isGroupChat表示群聊,isMapChat表示公众号
1
2
3
4
5
6
|
import itchat from itchat.content import * @itchat .msg_register(TEXT, isFriendChat = True , isGroupChat = True ,isMpChat = True ) def text_reply(msg): msg.user.send( "%s : %s" % (mst. type , msg.text)) |
消息类型
向注册方法传入的 msg 包含微信返回的字典的所有内容.itchat 增加 Text, Type(也就是参数) 键值, 方便操作.
itcaht.content 中包含所有的消息类型参数, 如下表
参数 | l类型 | Text 键值 |
---|---|---|
TEXT | 文本 | 文本内容(文字消息) |
MAP | 地图 | 位置文本(位置分享) |
CARD | 名片 | 推荐人字典(推荐人的名片) |
SHARING | 分享 | 分享名称(分享的音乐或者文章等) |
PICTURE 下载方法 | 图片/表情 | |
RECORDING | 语音 | 下载方法 |
ATTACHMENT | 附件 | 下载方法 |
VIDEO | 小视频 | 下载方法 |
FRIENDS | 好友邀请 | 添加好友所需参数 |
SYSTEM | 系统消息 | 更新内容的用户或群聊的UserName组成的列表 |
NOTE | 通知 | 通知文本(消息撤回等) |
附件的下载与发送
itchat 的附件下载方法存储在 msg 的 Text 键中.
发送的文件名(图片给出的默认文件名), 都存储在 msg 的 FileName 键中.
下载方法, 接受一个可用的位置参数(包括文件名), 并将文件响应的存储.
注意:下载的文件存储在指定的文件中,直接将路径与FileName连接即可,如msg["Text"]('/tmp/weichat'+msg['FileName'])
1
2
3
4
5
6
|
@itchat .msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): #msg.download(msg['FileName']) #这个同样是下载文件的方式 msg[ 'Text' ](msg[ 'FileName' ]) #下载文件 #将下载的文件发送给发送者 itchat.send( '@%s@%s' % ( 'img' if msg[ 'Type' ] = = 'Picture' else 'fil' , msg[ "FileName" ]), msg[ "FromUserName" ]) |
群消息
增加了三个键值,如下:
1
2
3
|
isAt 判断是否 @ 本号 ActualNickName : 实际 NickName(昵称) Content : 实际 Content |
测试程序
1
2
3
4
5
6
7
8
9
10
11
|
import itcaht from itchat.content import TEXT @itchat .msg_register(TEXT, isGroupChat = True ) def text_reply(msg): if (msg.isAt): #判断是否有人@自己 #如果有人@自己,就发一个消息告诉对方我已经收到了信息 itchat.send_msg( "我已经收到了来自{0}的消息,实际内容为{1}" . format (msg[ 'ActualNickName' ],msg[ 'Text' ]),toUserName = msg[ 'FromUserName' ]) itchat.auto_login() itchat.run() |
注册消息的优先级
总的来说就是后面注册同种类型的消息会覆盖之前注册的消息。
消息内容
注意:所有的消息内容都是可以用键值对来访问的,如msg["FromUserName]就是查看发送者,itchat.search_friends(userName=msg['FromUserName'])['NickName']查看的是当发送者昵称
一般消息
一般的消息都遵循以下的内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
{ "FromUserName" : "", "ToUserName" : "", "Content" : "", "StatusNotifyUserName" : "", "ImgWidth" : 0 , "PlayLength" : 0 , "RecommendInfo" : {}, "StatusNotifyCode" : 0 , "NewMsgId" : "", "Status" : 0 , "VoiceLength" : 0 , "ForwardFlag" : 0 , "AppMsgType" : 0 , "Ticket" : "", "AppInfo" : {}, "Url" : "", "ImgStatus" : 0 , "MsgType" : 0 , "ImgHeight" : 0 , "MediaId" : "", "MsgId" : "", "FileName" : "", "HasProductId" : 0 , "FileSize" : "", "CreateTime" : 0 , "SubMsgType" : 0 } |
初始化消息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
MsgType: 51 FromUserName: 自己 ID ToUserName: 自己 ID StatusNotifyUserName: 最近联系的联系人 ID Content: <msg> <op id = '4' > <username> # 最近联系的联系人 filehelper,xxx@chatroom,wxid_xxx,xxx,... < / username> <unreadchatlist> <chat> <username> # 朋友圈 MomentsUnreadMsgStatus < / username> <lastreadtime> 1454502365 < / lastreadtime> < / chat> < / unreadchatlist> <unreadfunctionlist> # 未读的功能账号消息,群发助手,漂流瓶等 < / unreadfunctionlist> < / op> < / msg> |
文本消息
1
2
3
4
|
MsgType: 1 FromUserName: 发送方ID ToUserName: 接收方ID Content: 消息内容 |
图片消息
1
|
itchat 增加了 Text 键, 键值为 下载该图片的方法. |
1
2
3
4
5
6
7
8
9
|
MsgType: 3 FromUserName: 发送方ID ToUserName: 接收方ID MsgId: 用于获取图片,用于表示每一条消息 Content: <msg> <img length="6503" hdlength="0" /> <commenturl></commenturl> </msg> |
拓展:如果想要得到Content中的具体内容可以使用正则表达式匹配出来
视频消息
1
|
*itchat 增加了 Text 键, 键值为 下载该视频的方法.* |
1
2
3
4
5
6
7
8
9
|
MsgType: 62 FromUserName: 发送方ID ToUserName: 接收方ID MsgId: 用于获取小视频 Content: <msg> <img length="6503" hdlength="0" /> <commenturl></commenturl> </msg> |
地理位置消息
itchat 增加了 Text 键, 键值为 该地点的文本形式.
1
2
3
4
5
6
7
8
9
|
MsgType: 1 FromUserName: 发送方ID ToUserName: 接收方ID Content: http://weixin.qq.com/cgi-bin/redirectforward?args=xxx OriContent:<?xml version="1.0"?> <msg> <location x="34.195278" y="117.177803" scale="16" label="江苏省徐州市铜山区新区海河路" maptype="0" poiname="江苏师范大学大学生公寓园区" /> </msg> |
名片消息
itchat 增加了Text 键, 键值为 该调用 add_friend 需要的属性.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
MsgType: 42 FromUserName: 发送方 ID ToUserName: 接收方 ID Content: <?xml version = "1.0" ?> <msg bigheadimgurl = " " smallheadimgurl=" " username=" " nickname=" " shortpy=" " alias=" " imagestatus=" 3 " scene=" 17 " province=" " city=" " sign=" " sex=" 1 " certflag=" 0 " certinfo=" " brandIconUrl=" " brandHomeUrl=" " brandSubscriptConfigUrl=" " brandFlags=" 0 " regionCode=" " / > RecommendInfo: { "UserName" : "xxx" , # ID,这里的是昵称 "Province" : "xxx" , "City" : "xxx" , "Scene" : 17 , "QQNum" : 0 , "Content" : "", "Alias" : "xxx" , # 微信号 "OpCode" : 0 , "Signature" : "", "Ticket" : "", "Sex" : 0 , # 1:男, 2:女 "NickName" : "xxx" , # 昵称 "AttrStatus" : 4293221 , "VerifyFlag" : 0 } |
下面是添加好友的测试代码
1
2
3
4
5
6
7
|
@itchat .msg_register(itchat.content.CARD,isFriendChat = True ) def simply(msg): print msg[ 'Text' ] print msg[ 'Content' ] itchat.add_friend(userName = msg[ 'Text' ][ 'UserName' ]) #添加推荐的好友 print msg[ 'RecommendInfo' ] print msg[ 'RecommendInfo' ][ 'UserName' ] |
语音消息
*itchat增加了Text键,键值为下载该语音文件的方法,下载下来的是MP3的格式
1
2
3
4
5
6
7
8
|
MsgType: 34 FromUserName: 发送方ID ToUserName: 接收方ID MsgId: 用于获取语音 Content: < msg > < voicemsg endflag = "1" cancelflag = "0" forwardflag = "0" voiceformat = "4" voicelength = "1580" length = "2026" bufid = "216825389722501519" clientmsgid = "49efec63a9774a65a932a4e5fcd4e923filehelper174_1454602489" fromusername = "" /> </ msg > |
下载方法:msg['Text'](msg['FileName'])
动画表情
itchat添加了Text键,键值为下载该图片表情的方法。
注意:本人亲测对于一些微信商店提供的表情是不能下载成功的,这里的自带的表情emoji是属于TEXT类别的,因此如果将其注册为PICTURE消息类型的话是不可以监测到的
1
2
3
4
5
6
7
8
|
MsgType: 47 FromUserName: 发送方ID ToUserName: 接收方ID Content: <msg> <emoji fromusername = "" tousername = "" type="2" idbuffer="media:0_0" md5="e68363487d8f0519c4e1047de403b2e7" len = "86235" productid="com.tencent.xin.emoticon.bilibili" androidmd5="e68363487d8f0519c4e1047de403b2e7" androidlen="86235" s60v3md5 = "e68363487d8f0519c4e1047de403b2e7" s60v3len="86235" s60v5md5 = "e68363487d8f0519c4e1047de403b2e7" s60v5len="86235" cdnurl = "http://emoji.qpic.cn/wx_emoji/eFygWtxcoMF8M0oCCsksMA0gplXAFQNpiaqsmOicbXl1OC4Tyx18SGsQ/" designerid = "" thumburl = "http://mmbiz.qpic.cn/mmemoticon/dx4Y70y9XctRJf6tKsy7FwWosxd4DAtItSfhKS0Czr56A70p8U5O8g/0" encrypturl = "http://emoji.qpic.cn/wx_emoji/UyYVK8GMlq5VnJ56a4GkKHAiaC266Y0me0KtW6JN2FAZcXiaFKccRevA/" aeskey= "a911cc2ec96ddb781b5ca85d24143642" ></emoji> <gameext type="0" content="0" ></gameext> </msg> |
普通链接或应用分享消息
主要针对的是分享的文章等等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
MsgType: 49 AppMsgType: 5 FromUserName: 发送方 ID ToUserName: 接收方 ID Url: 链接地址 FileName: 链接标题 Content: <msg> <appmsg appid = " " sdkver=" 0 "> <title>< / title> <des>< / des> < type > 5 < / type > <content>< / content> <url>< / url> <thumburl>< / thumburl> ... < / appmsg> <appinfo> <version>< / version> <appname>< / appname> < / appinfo> < / msg> |
音乐链接消息
主要针对的是音乐
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
MsgType: 49 AppMsgType: 3 FromUserName: 发送方 ID ToUserName: 接收方 ID Url: 链接地址 FileName: 音乐名 AppInfo: # 分享链接的应用 { Type : 0 , AppID: wx485a97c844086dc9 } Content: <msg> <appmsg appid = "wx485a97c844086dc9" sdkver = "0" > <title>< / title> <des>< / des> <action>< / action> < type > 3 < / type > <showtype> 0 < / showtype> <mediatagname>< / mediatagname> <messageext>< / messageext> <messageaction>< / messageaction> <content>< / content> <contentattr> 0 < / contentattr> <url>< / url> <lowurl>< / lowurl> <dataurl> http: / / ws.stream.qqmusic.qq.com / C100003i9hMt1bgui0.m4a?vkey = 6867EF99F3684 &guid = ffffffffc104ea2964a111cf3ff3edaf&fromtag = 46 < / dataurl> <lowdataurl> http: / / ws.stream.qqmusic.qq.com / C100003i9hMt1bgui0.m4a?vkey = 6867EF99F3684 &guid = ffffffffc104ea2964a111cf3ff3edaf&fromtag = 46 < / lowdataurl> <appattach> <totallen> 0 < / totallen> <attachid>< / attachid> <emoticonmd5>< / emoticonmd5> <fileext>< / fileext> < / appattach> <extinfo>< / extinfo> <sourceusername>< / sourceusername> <sourcedisplayname>< / sourcedisplayname> <commenturl>< / commenturl> <thumburl> http: / / imgcache.qq.com / music / photo / album / 63 / 180_albumpic_143163_0 .jpg < / thumburl> <md5>< / md5> < / appmsg> <fromusername>< / fromusername> <scene> 0 < / scene> <appinfo> <version> 29 < / version> <appname>摇一摇搜歌< / appname> < / appinfo> <commenturl>< / commenturl> < / msg> |
群消息
itchat 增加了三个群聊相关的键值:
1
2
3
|
isAt : 判断是否 @ 本号 ActualNickName : 实际 NickName Content : 实际 Content |
1
2
3
4
5
|
MsgType: 1 FromUserName: @@xxx ToUserName: @xxx Content: @xxx :<br / >xxx |
红包消息
1
2
3
4
5
|
MsgType: 49 AppMsgType: 2001 FromUserName: 发送方 ID ToUserName: 接收方 ID Content: 未知 |
系统消息
1
2
3
4
5
6
7
|
MsgType: 10000 FromUserName: 发送方 ID ToUserName: 自己 ID Content: "你已添加了 xxx ,现在可以开始聊天了。" "如果陌生人主动添加你为朋友,请谨慎核实对方身份。" "收到红包,请在手机上查看" |
账号类型
1
|
tchat 为三种账号都提供了 整体获取方法与搜索方法. |
好友
get_friends
itchat.get_friends() 返回完整的好友列表
每个好友为一个字典, 其中第一项为本人的账号信息;
传入 update=True, 将更新好友列表并返回, get_friends(update=True)
search_friends
itchat.get_friends() 好友搜索,有以下四种方式
仅获取自己的用户信息
1
2
|
# 获取自己的用户信息,返回自己的属性字典 itchat.search_friends() |
获取特定 UserName 的用户信息
1
2
3
4
5
6
7
8
9
|
# 获取特定UserName的用户信息 itchat.search_friends(userName = '@abcdefg1234567' ) ## 获取发送信息的好友的详细信息 @itchat .msg_register(itchat.content.TEXT,isFriendChat = True ) def reply(msg): print msg[ 'FromUserName' ] print itchat.search_friends(userName = msg[ 'FromUserName' ]) #详细信息 print itchat.search_friends(userName = msg[ 'FromUserName' ])[ 'NickName' ] #获取昵称 |
获取备注,微信号, 昵称中的任何一项等于name键值的用户. (可以与下一项配置使用.)
比如在我的微信中有一个备注为autolife的人,我可以使用这个方法搜索出详细的信息
1
2
|
# 获取任何一项等于name键值的用户 itchat.search_friends(name = 'autolife' ) |
获取备注,微信号, 昵称分别等于相应键值的用户. (可以与上一项配置使用.)
1
2
3
4
|
# 获取分别对应相应键值的用户 itchat.search_friends(wechatAccount = 'littlecodersh' ) # 三、四项功能可以一同使用 itchat.search_friends(name = 'LittleCoder机器人' , wechatAccount = 'littlecodersh' ) |
update_friend
主要用于好友更新
特定用户: 传入用户UserName, 返回指定用户的最新信息.
用户列表: 传入 UserName 组成的列表, 返回用户最新信息组成的列表
1
|
memberList = itchat.update_friend( '@abcdefg1234567' ) |
公众号
get_mps
将返回完整的工作号列表
每个公众号为一个字典,
传入 update=True 将更新公众号列表, 并返回.
search_mps
获取特定UserName的公众号
1
2
|
# 获取特定UserName的公众号,返回值为一个字典 itchat.search_mps(userName = '@abcdefg1234567' ) |
获取名字中还有特定字符的公众号.
1
2
|
# 获取名字中含有特定字符的公众号,返回值为一个字典的列表 itchat.search_mps(name = 'LittleCoder' ) |
当两项都是勇士, 将仅返回特定UserName的公众号.
群聊
get_chatrooms : 返回完整的群聊列表.
search_chatrooms : 群聊搜索.
update_chatroom : 获取群聊用户列表或更新该群聊.
群聊在首次获取中不会获取群聊的用户列表, 所以需要调用该命令才能获取群聊成员.
传入群聊的 UserName , 返回特定群聊的详细信息.
传入UserName组成的列表, 返回指定用户的最新信息组成的列表.
1
|
memberList = itchat.update_chatroom( '@@abcdefg1234567' , detailedMember = True ) |
创建群聊,增加/删除群聊用户:
由于之前通过群聊检测是否被好友拉黑的程序, 目前这三个方法都被严格限制了使用频率.
删除群聊需要本账号为管理员, 否则无效.
将用户加入群聊有直接加入与发送邀请, 通过 useInvitation 设置.
超过 40 人的群聊无法使用直接加入的加入方式.
1
2
3
4
5
6
7
|
memberList = itchat.get_frients()[ 1 :] # 创建群聊, topic 键值为群聊名称. chatroomUserName = itchat.create_chatroom(memberList, "test chatroom" ) # 删除群聊内的用户 itchat.delete_member_from_chatroom(chatroomUserName, memberList[ 0 ]) # 增加用户进入群聊. itchat.add_member_into_chatroom(chatroomUserName, memberList[ 0 ], useInvitation = False ) |
方法汇总
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
itchat.add_friend itchat.new_instance itchat.add_member_into_chatroom itchat.originInstance itchat.auto_login itchat.returnvalues itchat.check_login itchat.run itchat.components itchat.search_chatrooms itchat.config itchat.search_friends itchat.configured_reply itchat.search_mps itchat.content itchat.send itchat.core itchat.send_file itchat.Core itchat.send_image itchat.create_chatroom itchat.send_msg itchat.delete_member_from_chatroom itchat.send_raw_msg itchat.dump_login_status itchat.send_video itchat.get_chatrooms itchat.set_alias itchat.get_contact itchat.set_chatroom_name itchat.get_friends itchat.set_logging itchat.get_head_img itchat.set_pinned itchat.get_mps itchat.show_mobile_login itchat.get_msg itchat.start_receiving itchat.get_QR itchat.storage itchat.get_QRuuid itchat.update_chatroom itchat.instanceList itchat.update_friend itchat.load_login_status itchat.upload_file itchat.log itchat.utils itchat.login itchat.VERSION itchat.logout itchat.web_init itchat.msg_register |
实例
下面是博主写的一个程序,该程序的主要功能是监控撤回消息,并且如果有消息撤回就会撤回的消息发送给你,以后再也不用担心看不到好友的撤回的消息了,由于注释写的很详细,因此这里就不在详细的讲解了,直接贴代码
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# coding:utf-8 import itchat from itchat.content import TEXT from itchat.content import * import sys import time import re reload (sys) sys.setdefaultencoding( 'utf8' ) import os msg_information = {} face_bug = None #针对表情包的内容 @itchat .msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP , SHARING, RECORDING, ATTACHMENT, VIDEO],isFriendChat = True , isGroupChat = True , isMpChat = True ) def handle_receive_msg(msg): global face_bug msg_time_rec = time.strftime( "%Y-%m-%d %H:%M:%S" , time.localtime()) #接受消息的时间 msg_from = itchat.search_friends(userName = msg[ 'FromUserName' ])[ 'NickName' ] #在好友列表中查询发送信息的好友昵称 msg_time = msg[ 'CreateTime' ] #信息发送的时间 msg_id = msg[ 'MsgId' ] #每条信息的id msg_content = None #储存信息的内容 msg_share_url = None #储存分享的链接,比如分享的文章和音乐 print msg[ 'Type' ] print msg[ 'MsgId' ] if msg[ 'Type' ] = = 'Text' or msg[ 'Type' ] = = 'Friends' : #如果发送的消息是文本或者好友推荐 msg_content = msg[ 'Text' ] print msg_content #如果发送的消息是附件、视屏、图片、语音 elif msg[ 'Type' ] = = "Attachment" or msg[ 'Type' ] = = "Video" \ or msg[ 'Type' ] = = 'Picture' \ or msg[ 'Type' ] = = 'Recording' : msg_content = msg[ 'FileName' ] #内容就是他们的文件名 msg[ 'Text' ]( str (msg_content)) #下载文件 # print msg_content elif msg[ 'Type' ] = = 'Card' : #如果消息是推荐的名片 msg_content = msg[ 'RecommendInfo' ][ 'NickName' ] + '的名片' #内容就是推荐人的昵称和性别 if msg[ 'RecommendInfo' ][ 'Sex' ] = = 1 : msg_content + = '性别为男' else : msg_content + = '性别为女' print msg_content elif msg[ 'Type' ] = = 'Map' : #如果消息为分享的位置信息 x, y, location = re.search( "<location x=\"(.*?)\" y=\"(.*?)\".*label=\"(.*?)\".*" , msg[ 'OriContent' ]).group( 1 , 2 , 3 ) if location is None : msg_content = r "纬度->" + x.__str__() + " 经度->" + y.__str__() #内容为详细的地址 else : msg_content = r"" + location elif msg[ 'Type' ] = = 'Sharing' : #如果消息为分享的音乐或者文章,详细的内容为文章的标题或者是分享的名字 msg_content = msg[ 'Text' ] msg_share_url = msg[ 'Url' ] #记录分享的url print msg_share_url face_bug = msg_content ##将信息存储在字典中,每一个msg_id对应一条信息 msg_information.update( { msg_id: { "msg_from" : msg_from, "msg_time" : msg_time, "msg_time_rec" : msg_time_rec, "msg_type" : msg[ "Type" ], "msg_content" : msg_content, "msg_share_url" : msg_share_url } } ) ##这个是用于监听是否有消息撤回 @itchat .msg_register(NOTE, isFriendChat = True , isGroupChat = True , isMpChat = True ) def information(msg): #这里如果这里的msg['Content']中包含消息撤回和id,就执行下面的语句 if '撤回了一条消息' in msg[ 'Content' ]: old_msg_id = re.search( "\<msgid\>(.*?)\<\/msgid\>" , msg[ 'Content' ]).group( 1 ) #在返回的content查找撤回的消息的id old_msg = msg_information.get(old_msg_id) #得到消息 print old_msg if len (old_msg_id)< 11 : #如果发送的是表情包 itchat.send_file(face_bug,toUserName = 'filehelper' ) else : #发送撤回的提示给文件助手 msg_body = "告诉你一个秘密~" + "\n" \ + old_msg.get( 'msg_from' ) + " 撤回了 " + old_msg.get( "msg_type" ) + " 消息" + "\n" \ + old_msg.get( 'msg_time_rec' ) + "\n" \ + "撤回了什么 ⇣" + "\n" \ + r"" + old_msg.get( 'msg_content' ) #如果是分享的文件被撤回了,那么就将分享的url加在msg_body中发送给文件助手 if old_msg[ 'msg_type' ] = = "Sharing" : msg_body + = "\n就是这个链接➣ " + old_msg.get( 'msg_share_url' ) # 将撤回消息发送到文件助手 itchat.send_msg(msg_body, toUserName = 'filehelper' ) # 有文件的话也要将文件发送回去 if old_msg[ "msg_type" ] = = "Picture" \ or old_msg[ "msg_type" ] = = "Recording" \ or old_msg[ "msg_type" ] = = "Video" \ or old_msg[ "msg_type" ] = = "Attachment" : file = '@fil@%s' % (old_msg[ 'msg_content' ]) itchat.send(msg = file , toUserName = 'filehelper' ) os.remove(old_msg[ 'msg_content' ]) # 删除字典旧消息 msg_information.pop(old_msg_id) itchat.auto_login(hotReload = True ) itchat.run() |
总结
以上就是本文关于python实现微信接口(itchat)详细介绍的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:基于Python和Scikit-Learn的机器学习探索等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!
原文链接:https://segmentfault.com/a/1190000009420701