收藏 分享(赏)

Python微信库 itchat的用法详解.pdf

上传人:精品资料 文档编号:10018760 上传时间:2019-09-29 格式:PDF 页数:27 大小:552.93KB
下载 相关 举报
Python微信库 itchat的用法详解.pdf_第1页
第1页 / 共27页
Python微信库 itchat的用法详解.pdf_第2页
第2页 / 共27页
Python微信库 itchat的用法详解.pdf_第3页
第3页 / 共27页
Python微信库 itchat的用法详解.pdf_第4页
第4页 / 共27页
Python微信库 itchat的用法详解.pdf_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、在论坛上看到了用Python登录微信并实现自动签到,才了解到一个新的Python库: itchat库文档说明链接在这: itchat我存个档在我网站(主要是我打开很慢),以便以后阅读。g13g5Bg13g14g3g36g57g44g55g57最简单的回复通过如下代码,可以完成回复所有文本信息(包括群聊)。?12345678910importitchatfromitchat.content importTEXTitchat.msg_registerdefsimple_reply(msg):ifmsgType =TEXT:returnI received: %s%msgContentitchat.

2、auto_login()itchat.run()常用消息的配置itchat支持所有的消息类型与群聊,下面的示例中演示了对于这些消息类型简单的配置。?12345678910111213#coding=utf8importitchatfromitchat.content import*itchat.msg_register(TEXT, MAP, CARD, NOTE, 13141516171819202122232425262728NOTE, SHARING)deftext_reply(msg):itchat.send(%s: %s%(msgType, msgText), msgFromUserN

3、ame)# 以下四类的消息的Text键下存放了用于下载消息内容的方法,传入文件地址即可itchat.msg_register(PICTURE, RECORDING, ATTACHMENT, VIDEO)defdownload_files(msg):msgText(msgFileName)return%s%s%(Picture: img, Video: vid.get(msgType, fil), msgFileName)# 收到好# 收到好友邀请自动添加好友itchat.msg_register(FRIENDS)defadd_friend(msg):itchat.add_friend(*msg

4、Text) # 该操作会自动将新好友的消息录入,不需要重载通讯录itchat.send_msg(Nice to meet you!, msgRecommendInfoUserName)# 在注册时增加isGroupChat=True将判定为群聊回复itchat.msg_register(TEXT, isGroupChat =True)defgroupchat_reply(msg):ifmsgisAt:itchat.send(u%su2005I received: %s%s%(msgActualNickName, msgContent), msgFromUserName)itchat.auto_

5、login(True)itchat.run()当然这里不需要深究为什么这些东西可以这么写,我在这里放出了示例程序只是为了给你一个该sdk相关代码大概样子的概念。有了大概的模式的了解之后我们就可以进入下一部分的介绍。g13g5Bg13g15g3g2Fg52g4Ag4Cg51在上一部分中你看到了基本的注册与登陆,而显然登陆使用的是itchat提供了auto_login方法,调用即可完成登录。一般而言,我们都会在完成消息的注册后登陆。当然这里需要特别强调的是三点,分别是短时间关闭重连、命令行二维码与自定义登陆内容。 itchat提供了登陆状态暂存,关闭程序后一定时间内不需要扫码即可登录。 为了方便在

6、无图形界面使用itchat,程序内置了命令行二维码的显示。 * 如果你需要就登录状态就一些修改(例如更改提示语、二维码出现后邮件发送等)。*0x01-1 短时间关闭程序后重连*这样即使程序关闭,一定时间内重新开启也可以不用重新扫码。最简单的用法就是给 auto_login 方法传入值为真的 hotReload 。该方法会生成一个静态文件 itchat.pkl ,用于存储登陆的状态。?123456789importitchatfromitchat.content importTEXTitchat.msg_register(TEXT)defsimple_reply(msg):print(msgTe

7、xt)itchat.aut910itchat.auto_login(hotReload=True)itchat.run()itchat.dump_login_status()通过设置statusStorageDir可以将静态文件指定为其他的值。这一内置选项其实就相当于使用了以下两个函数的这一段程序:?12345678910111213importitchatfromitchat.content importTEXTifitchat.load_login_status():itchat.msg_register(TEXT)defsimple_reply(msg):print(msgText)it

8、chat.run()itchat.dump_login_status()else:itchat.auto_login()itchat.dump_login_status()print(Config stored, so exit.)其中load_login_status与dump_login_status分别对应读取与导出设置。通过设置传入的fileDir的值可以设定导入导出的文件。*0x01-2 命令行二维码显示*通过以下命令可以在登陆的时候使用命令行显示二维码:?1itchat.auto_login(enableCmdQR=True)部分系统可能字幅宽度有出入,可以通过将enableCmd

9、QR赋值为特定的倍数进行调整:?12# 如部分的linux系统,块字符的宽度为一个字符(正常应为两字符),故赋值为2itchat.auto_login(enableCmdQR=2)默认控制台背景色为暗色(黑色),若背景色为浅色(白色),可以将enableCmdQR赋值为负值:?1itchat.auto_login(enableCmdQR=-1)*0x01-2 自定义登录过程*如果需要控制登录的过程,可以阅读下面的内容。同时itchat也提供了登陆所需的每一步的方法,登陆的过程按顺序为: 获取二维码uuid-获取二维码-判断是否已经登陆成功-获取初始化数据-更新微信相关信息(通讯录、手机登陆状态

10、)-循环扫描新信息(开启心跳)g39E7gA06g4BCg3524g2E31g58g58g4Cg47获取生成二维码所需的uuid,并返回。方法名称: get_QRuuid所需值:无返回值:成功-uuid,失败-Noneg39E7gA06g4BCg3524g2E31根据uuid获取二维码并打开,返回是否成功。方法名称: get_QR所需值:uuid返回值:成功-True,失败-Falseg854g1BDDg1C5FgA56g1422g34FFg2CABg4C76g1840g8CF判断是否已经登陆成功,返回扫描的状态码。方法名称: check_login所需值:uuid返回值:登陆成功-200,已

11、扫描二维码-201,二维码失效-408,未获取到信息-0g39E7gA06g84DgFFBg946g1BA0g199E获取微信用户信息以及心跳所需要的数据。方法名称: web_init所需值:无返回值:存储登录微信用户信息的字典g39E7gA06g15DEg611g464Ag41DFg1585获取微信的所有好友信息并更新。方法名称: get_contract所需值:无返回值:存储好友信息的列表g1D24g1BE0g15DEg611g187Bg1D6Ag2CABg4C76g28E6g1631在手机上显示登录状态。方法名称: show_mobile_login所需值:无返回值:无g15DAg29D

12、Fg189Bg19FFg1BE0g611g169Fg2C4g1530gA5Fg15F3g4423g2C5循环扫描是否有新的消息,开启心跳包。方法名称: start_receiving所需值:无返回值:无g28g2Ag2D6一个登录例子:?1234importitchat, time, sysdefoutpu4567891011121314151617181920212223242526272829303132333435363738394041424344defoutput_info(msg):print(INFO %s%msg)defopen_QR():forget_count inrang

13、e(10):output_info(Getting uuid)uuid =itchat.get_QRuuid()whileuuid isNone: uuid =itchat.get_QRuuid();time.sleep(1)output_info(Getting QR Code)ifitchat.get_QR(uuid): breakelifget_count =9:output_info(Failed to get QR Code, please restart the program)sys.exit()output_info(Please scan the QR Code)return

14、uuidduuid =open_QR()waitForConfirm =Falsewhile1:status =itchat.check_login(uuid)ifstatus =200:breakelifstatus =201:ifwaitForConfirm:output_info(Please press confirm)waitForConfirm =Trueelifstatus =408:output_info(Reloading QR Code)uuid =open_QR()waitForConfirm =FalseuserInfo =itchat.web_init()itchat

15、.show_mobile_login()itchat.get_contract()output_info(Login successfully as %s%userInfoNickInfoNickName)itchat.start_receiving()# Start auto-replyingitchat.msg_registerdefsimple_reply(msg):ifmsgType =Text:returnI received: %s%msgContentitchat.run()g13g5Bg13g16g3g35g48g4Ag4Cg56g57g48g55注册消息方法itchat将根据

16、接收到的消息类型寻找对应的已经注册的方法。如果一个消息类型没有对应的注册方法,该消息将会被舍弃。在运行过程当中也可以动态注册方法,注册方式与结果不变。注册你可以通过两种方式注册消息方法?12345678910111213importitchatfromitchat.content import*# 不带参数注册,所有消息类型都将调用该方法(包括群消息)itchat.msg_registerdefsimple_reply(ms_reply(msg):ifmsgType =Text:returnI received: %s%msgText# 带参数注册,该类消息类型将调用该方法itchat.msg

17、_register(TEXT, MAP, CARD, NOTE, SHARING)deftext_reply(msg):itchat.send(%s: %s%(msgType, msgText), msgFromUserName)g23B8g169Fg32ABgDBB向注册方法传入的msg包含微信返回的字典的所有内容。本api增加Text、Type(也就是参数)键值,方便操作。itchat.content中包含所有的消息类型参数,内容如下表所示:比如你需要存储发送给你的附件:?123itchat.msg_register(ATTACHMENT)defdownload_files(msg):ms

18、gText(msgFileName)值得注意的是,群消息增加了三个键值: isAt: 判断是否本号 ActualNickName: 实际NickName * Content: 实际Content可以通过本程序测试:?123456789importitchatfromitchat.content importTEXTitchat.msg_register(TEXT, 91011ster(TEXT, isGroupChat =True)deftext_reply(msg):print(msgisAt)print(msgActualNickName)print(msgContent)itchat.a

19、uto_login()itchat.run()g2318g7BCg23B8g169Fg2CB4g548g778g34D7优先级分别为:后注册消息先于先注册消息,带参数消息先于不带参数消息。以下面的两个程序为例:?1234567891011121314importitchatfromitchat.content import*itchat.auto_login()itchat.msg_register(TEXT)deftext_reply(msg):returnThis is the old registeritchat.msg_register(TEXT)deftext_reply(msg):

20、returnThis is a new oneoneitchat.run()在私聊发送文本时将会回复This is a new one。?1234567891011121314importitchatfromitchat.content import*itchat.auto_login()itchat.msg_registerdefgeneral_reply(msg):returnI received a %s%msgTypeitchat.msg_register(TEXT)deftext_reply(msg):returnYou said to me one to one: %s%msgTe

21、xtitchat.run()仅在私聊发送文本时将会回复You said to me one to one,其余情况将会回复I received a .。g8D8g1631g2318g7BCg23B8g169F动态注册时可以选择将 itchat.run() 放入另一线程或使用 configured_reply() 方法处理消息。两种方法分别是:?1234# 使用另一线程,但注意不要让程序45678910要让程序运行终止importthreadthread.start_new_thread(itchat.run, ()# 使用configured_reply方法while1:itchat.conf

22、igured_reply()# some other functionstime.sleep(1)以下给出一个动态注册的例子:?123456789101112131415161718192021222324252627#coding=utf8importthreadimportitchatfromitchat.content import*replyToGroupChat =TruefunctionStatus =Falsedefchange_function():ifreplyToGroupChat !=functionStatus:ifreplyToGroupChat:2728293031

23、3233at:itchat.msg_register(TEXT, isGroupChat =True)defgroup_text_reply(msg):ifu关闭inmsgText:replyToGroupChat =Falsereturnu已关闭elifu开启inmsgText:returnu已经在运行returnu输入“关闭“或者“开启“测试功能else:itchat.msg_register(TEXT, isGroupChat =True)defgroup_text_reply(msg):ifu开启inmsgText:replyToGroupChat =Truereturnu重新开启成功

24、functionStatus =replyTo=replyToGroupChatthread.start_new_thread(itchat.run, ()while1:change_function()time.sleep(.1)g13g5Bg13g17g3g35g48g53g4Fg5C回复itchat提供五种回复方法,建议直接使用send方法。g56g48g51g47g1BE9g2305方法:?1send(msg=Text Message, toUserName=None)所需值:1.msg:消息内容2.fil文件地址将会被识别为传送文件,img图片地址将会被识别为传送图片,vid视频地址

25、将会被识别为小视频3.toUserName:发送对象,如果留空将会发送给自己返回值:发送成功-True, 失败-False?123456#coding=utf8importitchatitchat.auto_login()itchat.send(Hello world!)# 请确保该程序目录下存在:gz.gif以及xlsx.xlsxitchat.sen6789itchat.send(img%s% gz.gif)itchat.send(fil%s% xlsx.xlsx)itchat.send(vid%s% demo.mp4)g56g48g51g47g42g50g56g4Ag1BE9g2305方法

26、:?1send_msg(msg=Text Message, toUserName=None)所需值:msg:消息内容toUserName:发送对象,如果留空将会发送给自己返回值:发送成功-True, 失败-False程序示例:?12345importitchatitchat.auto_login()itchat.send_msg(Hello world)g56g48g51g47g42g49g4Cg4Fg48g1BE9g2305方法:?1send_file(fileDir, toUserName=None)所需值:fileDir:文件路径(不存在该文件时将打印无此文件的提醒)toUserName

27、:发送对象,如果留空将会发送给自己返回值:发送成功-True, 失败-False?123456789#coding=utf8importitchatitchat.auto_login()#请确保该程序目录下存在:xlsx.xlsxitchat.send_file(xlsx.xlsx)g56g48g51g47g42g4Cg50g4Ag1BE9g2305方法:?1 send_img(fileDir, toUserName=None)所需值:fileDir:文件路径(不存在该文件时将打印无此文件的提醒)toUserName:发送对象,如果留空将会发送给自己返回值:发送成功-True, 失败-Fals

28、e?123456#coding=utf8importitchatitchat.auto_login()# 请确保该程序目录下存在:gz.gifitchat.send_img(gz.gif)g56g48g51g47g42g59g4Cg47g48g52g1BE9g2305方法:?1send_video(fileDir, toUserName=None)所需值:fileDir:文件路径(不存在该文件时将打印无此文件的提醒)toUserName:发送对象,如果留空将会发送给自己返回值:发送成功-True, 失败-False需要保证发送的视频为一个实质的mp4文件?123456789#coding=ut

29、f8importitchatitchat.auto_login()#请确保该程序目录下存在:demo.mp4itchat.send_file(demo.mp4)g13g5Bg13g18g3g30g48g50g50g45g48g55g3g56g57g58g49g49在使用个人微信的过程当中主要有三种账号需要获取,分别为: 好友 公众号 * 群聊itchat为这三种账号都提供了整体获取方法与搜索方法。而群聊多出获取用户列表方法以及创建群聊、增加、删除用户的方法。这里我们分这三种分别介绍如何使用。gFADg9FB好友的获取方法为 get_friends ,将会返回完整的好友列表。 其中每个好友为一个

30、字典 列表的第一项为本人的账号信息 * 传入update键为True将可以更新好友列表并返回好友的搜索方法为 search_friends ,有四种搜索方式: 1. 仅获取自己的用户信息 2. 获取特定 UserName 的用户信息 3. 获取备注、微信号、昵称中的任何一项等于 name 键值的用户 4. 获取备注、微信号、昵称分别等于相应键值的用户其中三、四项可以一同使用,下面是示例程序:?12345678910# 获取自己的用户信息,返回自己的属性字典itchat.search_friends()# 获取特定UserName的用户信息itchat.search_friends(userNa

31、me=abcdefg1234567)# 获取任何一项等于name键值的用户itchat.search_friends(name=littlecodersh)# 获取分别对应相应键值的用户itchat.search_friends(wechatAccount=littlecodersh)# 三、四项功能可以一同使用itchat.search_friends(name=LittleCoder机器人, wechatAccount=littlecodersh)g79Cg547gA27公众号的获取方法为 get_mps ,将会返回完整的公众号列表。 其中每个公众号为一个字典 传入update键为True

32、将可以更新公众号列表并返回公众号的搜索方法为 search_mps ,有两种搜索方法: 1. 获取特定 UserName 的公众号 2. 获取名字中含有特定字符的公众号如果两项都做了特定,将会仅返回特定 UserName 的公众号,下面是示例程序:?123456# 获取特定UserName的公众号,返回值为一个字典itchat.search_mps(userName=abcdefg1234567)# 获取名字中含有特定字符的公众号,返回值为一个字典的列表itcaht.search_mps(name=LittleCoder)# 以下方法相当于仅特定了UserNameitchat.search_m

33、ps(userName=abcdefg1234567, name=LittleCoder)g35D4g367A群聊的获取方法为 get_chatrooms ,将会返回完整的群聊列表。 其中每个群聊为一个字典 传入update键为True将可以更新群聊列表并返回群聊的搜索方法为 search_chatrooms ,有两种搜索方法: 1. 获取特定UserName的群聊 2. 获取名字中含有特定字符的群聊如果两项都做了特定,将会仅返回特定UserName的群聊,下面是示例程序:?123456# 获取特定UserName的群聊,返回值为一个字典itchat.search_chatrooms(user

34、Name=abcdefg1234567)# 获取名字中含有特定字符的群聊,返回值为一个字典的列表itcaht.search_chatrooms(name=LittleCoder)# 以下方法相当于仅特定了UserNameitchat.search_chatrooms(userName=abcdefg1234567, name=LittleCoder)群聊用户列表的获取方法为 update_chatroom 。 群聊在首次获取中不会获取群聊的用户列表,所以需要调用该命令才能获取群聊的成员 该方法需要传入群聊的UserName,返回特定群聊的用户列表?1memberList =itchat.upd

35、ate_chatroom(abcdefg1234567)创建群聊、增加、删除群聊用户的方法如下所示: 由于之前通过群聊检测是否被好友拉黑的程序,目前这三个方法都被严格限制了使用频率 删除群聊需要本账号为群管理员,否则会失败?1234567memberList =itchat.get_friends()1:# 创建群聊,topic键值为群聊名chatroomUserName =itchat.create_chatroom(memberList, test chatroom)# 删除群聊内的用户itchat.delete_member_from_chatroom(chatroomUserName,

36、 memberList0)ist0)# 增加用户进入群聊itchat.add_member_into_chatroom(chatroomUserName, memberList0)g13g5Bg13g19g3g34g24g34Q: 为什么我在设定了itchat.auto_login()的enableCmdQR为True后还是没有办法在命令行显示二维码?A: 这是由于没有安装可选的包 pillow ,可以使用右边的命令安装: pip install pillowg13g5Bg13g1Ag3g28g4A?12345678910111213141516171819defsignin():# 查找公众

37、号,进行签到user =itchat.search_mps(name=Nulll.me)UserName =user0UserNameitchat.send(msg=u3, toUserName=UserName)itchat.dump_login_status()pickleDumps(flag, localDay) # 如果执行成功写入标致文件件exit()if_name_ =_main_:# 如果不是在登陆状态,就循环登陆whilenotitchat.load_login_status():sendMail()itchat.auto_login(hotReload=True)itchat

38、.dump_login_status()signin() # 签到time.sleep(3600)signin() # 签到以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。g16D8gA1Fg372Dg174Fg7A4g43D3g2CB4g1BB7g3110g1Dpython使用itchat库实现微信机器人(好友聊天、群聊天)Python利用itchat对微信中好友数据实现简单分析的方法python实现微信接口(itchat)详细介绍python itchat实现微信自动回复的示例代码python itchat实现微信好友头像拼接图的示例代码利用python微信库itchat实现微信自动回复功能python基于itchat实现微信群消息同步机器人python3操作微信itchat实现发送图片原文链接:http:/www.nulll.me/index.php/archives/72.html滥情s Blog微信公众号搜索 “ 脚本之家 ” ,选择关注程序猿的那些事、送书等活动等着你

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报