必发365官网

你好,游客 登录 注册 搜索
背景:
阅读新闻

Python微信itchat库简单介绍

[日期:2017-07-15] 来源:本站整理    作者:zhaozy.com [字体: ]

itchat是一个开源的个人号接口,使用python调用微信从未如此简单。

 
使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人。
 
当然,该api的使用远不止一个机器人,更多的功能等着你来发现,比如这些。
 
该接口与公众号接口itchatmp共享类似的操作方式,学习一次掌握两个工具。
 
如今微信已经成为了个人社交的很大一部分,希望这个项目能够帮助你扩展你的个人的微信号、方便自己的生活。
 
安装
 
可以通过本命令安装itchat:
 
pip install itchat
简单入门实例
 
有了itchat,如果你想要给文件传输助手发一条信息,只需要这样:
 
import itchat
 
itchat.auto_login()
 
itchat.send('Hello, filehelper', toUserName='filehelper')
如果你想要回复发给自己的文本消息,只需要这样:
 
import itchat
 
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
    return msg.text
 
itchat.auto_login()
itchat.run()
一些进阶应用可以在下面的开源机器人的源码和进阶应用中看到,或者你也可以阅览文档。
 
 
 
进阶应用
 
特殊的字典使用方式
 
通过打印itchat的用户以及注册消息的参数,可以发现这些值都是字典。
 
但实际上itchat精心构造了相应的消息、用户、群聊、公众号类。
 
其所有的键值都可以通过这一方式访问:
 
@itchat.msg_register(TEXT)
def _(msg):
    # equals to print(msg['FromUserName'])
    print(msg.fromUserName)
属性名为键值首字母小写后的内容。
 
author = itchat.search_friends(nickName='LittleCoder')[0]
author.send('greeting, littlecoder!')
各类型消息的注册
 
通过如下代码,微信已经可以就日常的各种信息进行获取与回复。
 
import itchat, time
from itchat.content import *
 
@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):
    msg.user.send('%s: %s' % (msg.type, msg.text))
 
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
    msg.download(msg.fileName)
    typeSymbol = {
        PICTURE: 'img',
        VIDEO: 'vid', }.get(msg.type, 'fil')
    return '@%s@%s' % (typeSymbol, msg.fileName)
 
@itchat.msg_register(FRIENDS)
def add_friend(msg):
    msg.user.verify()
    msg.user.send('Nice to meet you!')
 
@itchat.msg_register(TEXT, isGroupChat=True)
def text_reply(msg):
    if msg.isAt:
        msg.user.send(u'@%s\u2005I received: %s' % (
            msg.actualNickName, msg.text))
 
itchat.auto_login(True)
itchat.run(True)
命令行二维码
 
通过以下命令可以在登陆的时候使用命令行显示二维码:
 
itchat.auto_login(enableCmdQR=True)
部分系统可能字幅宽度有出入,可以通过将enableCmdQR赋值为特定的倍数进行调整:
 
# 如部分的linux系统,块字符的宽度为一个字符(正常应为两字符),故赋值为2
itchat.auto_login(enableCmdQR=2)
默认控制台背景色为暗色(黑色),若背景色为浅色(白色),可以将enableCmdQR赋值为负值:
 
itchat.auto_login(enableCmdQR=-1)
退出程序后暂存登陆状态
 
通过如下命令登陆,即使程序关闭,一定时间内重新开启也可以不用重新扫码。
 
itchat.auto_login(hotReload=True)
用户搜索
 
使用search_friends方法可以搜索用户,有四种搜索方式:
 
仅获取自己的用户信息
获取特定UserName的用户信息
获取备注、微信号、昵称中的任何一项等于name键值的用户
获取备注、微信号、昵称分别等于相应键值的用户
其中三、四项可以一同使用,下面是示例程序:
 
# 获取自己的用户信息,返回自己的属性字典
itchat.search_friends()
# 获取特定UserName的用户信息
itchat.search_friends(userName='@abcdefg1234567')
# 获取任何一项等于name键值的用户
itchat.search_friends(name='littlecodersh')
# 获取分别对应相应键值的用户
itchat.search_friends(wechatAccount='littlecodersh')
# 三、四项功能可以一同使用
itchat.search_friends(name='LittleCoder机器人', wechatAccount='littlecodersh')
关于公众号、群聊的获取与搜索在文档中有更加详细的介绍。
 
附件的下载与发送
 
itchat的附件下载方法存储在msg的Text键中。
 
发送的文件的文件名(图片给出的默认文件名)都存储在msg的FileName键中。
 
下载方法接受一个可用的位置参数(包括文件名),并将文件相应的存储。
 
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
    msg.download(msg.fileName)
    itchat.send('@%s@%s' % (
        'img' if msg['Type'] == 'Picture' else 'fil', msg['FileName']),
        msg['FromUserName'])
    return '%s received' % msg['Type']
如果你不需要下载到本地,仅想要读取二进制串进行进一步处理可以不传入参数,方法将会返回图片的二进制串。
 
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
    with open(msg.fileName, 'wb') as f:
        f.write(msg.download())
用户多开
 
使用如下命令可以完成多开的操作:
 
import itchat
 
newInstance = itchat.new_instance()
newInstance.auto_login(hotReload=True, statusStorageDir='newInstance.pkl')
 
@newInstance.msg_register(itchat.content.TEXT)
def reply(msg):
    return msg.text
 
newInstance.run()
退出及登陆完成后调用特定方法
 
登陆完成后的方法需要赋值在loginCallback中。
 
而退出后的方法需要赋值在exitCallback中。
 
import time
 
import itchat
 
def lc():
    print('finish login')
def ec():
    print('exit')
 
itchat.auto_login(loginCallback=lc, exitCallback=ec)
time.sleep(3)
itchat.logout()
若不设置loginCallback的值,则将会自动删除二维码图片并清空命令行显示。
 
常见问题与解答
 
Q: 为什么中文的文件没有办法上传?
 
A: 这是由于requests的编码问题导致的。若需要支持中文文件传输,将fields.py(py3版本见这里)文件放入requests包的packages/urllib3下即可
 
Q: 如何通过这个包将自己的微信号变为控制器?
 
A: 有两种方式:发送、接受自己UserName的消息;发送接收文件传输助手(filehelper)的消息
 
Q: 为什么我发送信息的时候部分信息没有成功发出来?
 
A: 有些账号是天生无法给自己的账号发送信息的,建议使用filehelper代替。
 
作者
 
LittleCoder: 构架及维护Python2 Python3版本。
 
tempdban: 协议、构架及日常维护。
 
Chyroc: 完成第一版本的Python3构架。
收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻      
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
AD
AD
热门评论