半瘦金山 發表於 2019-5-31 00:05:00

Python微信操控(itchat)

<p>itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。</p>
<p>开源地址</p>
<p>https://github.com/littlecodersh/ItChat</p>
<p>文档:</p>
<p>https://itchat.readthedocs.io/zh/latest/</p>
<p>安装:</p>
<div class="cnblogs_code">
<pre>pip3 install itchat</pre>
</div>
<h2>登入与登出</h2>
<p>登入并向文件助手发送一句话,登入时会经过扫码操作,类似于电脑微信登入</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> itchat
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">登入并保存登入状态,实现第一次运行时扫码,一定时间内再次运行就不用扫码了,手机微信上将显示:网页微信已登入.....</span>
<span style="color: rgba(0, 128, 128, 1)">3</span> itchat.auto_login(hotReload=<span style="color: rgba(0, 0, 0, 1)">True)
</span><span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">发送文本数据到文件助手</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> itchat.send(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">东小东你好123</span><span style="color: rgba(128, 0, 0, 1)">"</span>,toUserName=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">filehelper</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p>登出:</p>
<div class="cnblogs_code">
<pre>itchat.logout() </pre>
</div>
<p>注册登入登出的回调方法</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> ldong():
</span><span style="color: rgba(0, 128, 128, 1)">2</span>   <span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">微信登入</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> edong():
</span><span style="color: rgba(0, 128, 128, 1)">4</span>   <span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">微信登出</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">登入</span>
<span style="color: rgba(0, 128, 128, 1)">6</span> itchat.auto_login(hotReload=True,loginCallback=ldong, exitCallback=edong)</pre>
</div>
<p>命令行二维码</p>
<p align="left">通过以下命令可以在登陆的时候使用命令行显示二维码:</p>
<div class="cnblogs_code">
<pre>itchat.auto_login(enableCmdQR=True)</pre>
</div>
<p align="left">部分系统可能字幅宽度有出入,可以通过将enableCmdQR赋值为特定的倍数进行调整:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">如部分的linux系统,块字符的宽度为一个字符(正常应为两字符),故赋值为2</span>
itchat.auto_login(enableCmdQR=2)</pre>
</div>
<p align="left">默认控制台背景色为暗色(黑色),若背景色为浅色(白色),可以将enableCmdQR赋值为负值:</p>
<div class="cnblogs_code">
<pre>itchat.auto_login(enableCmdQR=-1)</pre>
</div>
<h2>可接受监听的数据类型</h2>
<p><strong>消息分类:</strong></p>
<p>图片或表情(PICTURE)、录制(RECORDING)、附件(ATTACHMENT)、小视频(VIDEO)、文本(TEXT),地图(MAP),名片(CARD),通知(NOTE),分享(SHARING),好友邀请(FRIENDS)、语音(RECORDING)、系统消息(SYSTEM)</p>
<p><strong>获取消息内容:</strong></p>
<p>可以通过print(msg)方法查看消息里的所有数据,然后进行提取</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">@itchat.msg_register(itchat.content.TEXT)
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> text_reply(msg):
    </span><span style="color: rgba(0, 0, 255, 1)">print</span>(msg)</pre>
</div>
<h2>消息捕获</h2>
<p align="left"><strong>针对朋友的消息捕获</strong></p>
<p>登入时不适用于hotReload=True,因为多次运行会多次注册自动回复,比如在没有登出的情况下运行3次程序,就会出现1次接受3次发送的效果</p>
<p>监听函数只有在对方发送数据时进入</p>
<p>文本</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> itchat
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">自动回复</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">@itchat.msg_register(itchat.content.TEXT)
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> text_reply(msg):
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">东小东回复数据:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+msg[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">登入</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">itchat.auto_login()
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">保持运行</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> itchat.run()</pre>
</div>
<p>文件下载</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> itchat
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 图片、录制、附件、视频、文本</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">from</span> itchat.content <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">@itchat.msg_register()
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> download_files(msg):
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>   filedpx=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">./filex/</span><span style="color: rgba(128, 0, 0, 1)">"</span>+msg[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">FileName</span><span style="color: rgba(128, 0, 0, 1)">"</span>] <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">得到文件路径,目录需要手动创建</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>   msg.download(filedpx) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">下载</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">你发送的文件类型</span><span style="color: rgba(128, 0, 0, 1)">"</span>+msg[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Type</span><span style="color: rgba(128, 0, 0, 1)">'</span>]+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">保存地址为:filex/</span><span style="color: rgba(128, 0, 0, 1)">"</span>+msg.fileName</pre>
</div>
<p><strong>针对群聊的自动监测</strong></p>
<p>如果想添加针对群聊的监测,则在监听函数加入isGroupChat=True</p>
<p>监听函数只要有数据发送就会进入,包括自己发送的数据</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> itchat
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">只对群消息有效</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> @itchat.msg_register(itchat.content.TEXT,isGroupChat=<span style="color: rgba(0, 0, 0, 1)">True)
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> text_reply(msg):
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   <span style="color: rgba(0, 0, 255, 1)">if</span>(msg[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(128, 0, 0, 1)">"</span>]==<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">11</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">):
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">东小东回复数据xx:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+msg[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">只对个人用户有效</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">@itchat.msg_register(itchat.content.TEXT)
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> text_reply(msg):
</span><span style="color: rgba(0, 128, 128, 1)">10</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">东小东回复数据:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+msg[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">登入</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">itchat.auto_login()
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">保持运行</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> itchat.run()</pre>
</div>
<p>@我信息监测</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> itchat
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">只对群消息有效</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> @itchat.msg_register(itchat.content.TEXT,isGroupChat=<span style="color: rgba(0, 0, 0, 1)">True)
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> text_reply(msg):
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>         <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">判断是否是@本人</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> msg[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Text</span><span style="color: rgba(128, 0, 0, 1)">"</span>].find(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@</span><span style="color: rgba(128, 0, 0, 1)">"</span>+usermsgx[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">NickName</span><span style="color: rgba(128, 0, 0, 1)">"</span>])==<span style="color: rgba(0, 0, 0, 1)">0:
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>             <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@</span><span style="color: rgba(128, 0, 0, 1)">"</span>+msg.actualNickName+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"> 东你发的信息为:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)">msg.text
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> itchat.auto_login()<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">登入</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> usermsgx=itchat.search_friends()<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">得到当前用户的信息</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> itchat.run()<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">保持运行</span></pre>
</div>
<p><strong>针对所有信息来源信息监听</strong></p>
<p>朋友、群聊、公众号</p>
<div class="cnblogs_code">
<pre>@itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True, isMpChat=<span style="color: rgba(0, 0, 0, 1)">True)
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> simple_reply(msg):
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">I received: %s</span><span style="color: rgba(128, 0, 0, 1)">'</span> % msg.text</pre>
</div>
<h2>数据发送</h2>
<p><strong>return</strong></p>
<p>在接收数据函数里的return “数据” 则是自动确认为回复当前发送用户数据,可以删除该句,则不进行数据回复</p>
<p><strong>itchat.send,可以一次性发送多条</strong></p>
<p>参数:(内容,用户)</p>
<p>返回值:发送结果,是否发送成功,json数据</p>
<p>注意:文件地址不可为中文</p>
<p>内容:可为单独的字符串内容,其他有【@类型@地址】,类型有图片(img)、文件(fil)、视频(vid)</p>
<p>用户:省略则发个自己,不稳定,msg['FromUserName']表示指定用户为触发用户</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> res=itchat.send(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">文本信息的发送......!</span><span style="color: rgba(128, 0, 0, 1)">'</span>, toUserName=msg[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">FromUserName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">])
</span><span style="color: rgba(0, 128, 128, 1)">2</span> res=itchat.send(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@img@%s</span><span style="color: rgba(128, 0, 0, 1)">'</span> % <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./filex/zcy.gif</span><span style="color: rgba(128, 0, 0, 1)">'</span>, toUserName=msg[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">FromUserName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">])
</span><span style="color: rgba(0, 128, 128, 1)">3</span> res=itchat.send(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@fil@%s</span><span style="color: rgba(128, 0, 0, 1)">'</span> % <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./filex/tt.txt</span><span style="color: rgba(128, 0, 0, 1)">'</span>, toUserName=msg[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">FromUserName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">])
</span><span style="color: rgba(0, 128, 128, 1)">4</span> res=itchat.send(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@vid@%s</span><span style="color: rgba(128, 0, 0, 1)">'</span> % <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./filex/videox.mp4</span><span style="color: rgba(128, 0, 0, 1)">'</span>, toUserName=msg[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">FromUserName</span><span style="color: rgba(128, 0, 0, 1)">'</span>])</pre>
</div>
<p><strong>指定类型发送2</strong></p>
<p>参数:(地址,用户)</p>
<p>返回值:发送结果,是否发送成功,json数据</p>
<p>注意:文件地址不可为中文</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> bb = itchat.send_msg(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">文字信息2</span><span style="color: rgba(128, 0, 0, 1)">'</span>, toUserName=msg[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">FromUserName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">])
</span><span style="color: rgba(0, 128, 128, 1)">2</span> bb = itchat.send_image(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./filex/zcy.gif</span><span style="color: rgba(128, 0, 0, 1)">'</span>, toUserName=msg[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">FromUserName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">])
</span><span style="color: rgba(0, 128, 128, 1)">3</span> bb = itchat.send_file(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./filex/tt.txt</span><span style="color: rgba(128, 0, 0, 1)">'</span>, toUserName=msg[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">FromUserName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">])
</span><span style="color: rgba(0, 128, 128, 1)">4</span> bb = itchat.send_video(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./filex/videox.mp4</span><span style="color: rgba(128, 0, 0, 1)">'</span>, toUserName=msg[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">FromUserName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">])
</span><span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">返回值:</span><span style="color: rgba(128, 0, 0, 1)">"</span>,bb)</pre>
</div>
<p><strong>msg.user.send()</strong></p>
<p>使用与itchat.send()相同,但是可以已经确定toUserName=msg['FromUserName'],不可更换</p>
<p><strong>指定用户(toUserName):</strong></p>
<p>文件助手(发送给自己,必备):toUserName="filehelper"</p>
<p>发送者:toUserName=msg['FromUserName']</p>
<p><strong>例子:</strong></p>
<p>通过群名向群里发送内容,该微信群需要在运行代码前进行手动添加到通讯录</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> itchat
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>         
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">登入</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">itchat.auto_login()
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> chatroomName=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">傻逼群</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">群名</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> itchat.get_chatrooms(update=<span style="color: rgba(0, 0, 0, 1)">True)
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> chatrooms = itchat.search_chatrooms(name=<span style="color: rgba(0, 0, 0, 1)">chatroomName)
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 255, 1)">if</span> len(chatrooms)==<span style="color: rgba(0, 0, 0, 1)">0 :
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>   <span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">没有找到群聊:</span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> chatroomName)
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">    exit(0)
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">12</span>   <span style="color: rgba(0, 0, 255, 1)">print</span>(chatrooms[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">UserName</span><span style="color: rgba(128, 0, 0, 1)">'</span>])<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">输出群聊标识符</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>   itchat.send_msg(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">大家好,这是发送的内容</span><span style="color: rgba(128, 0, 0, 1)">'</span>, toUserName=chatrooms[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">UserName</span><span style="color: rgba(128, 0, 0, 1)">'</span>])<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">发送消息</span>
<span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">保持运行</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> itchat.run()</pre>
</div>
<h2>个人的基本信息</h2>
<p align="left">获取本人信息</p>
<div class="cnblogs_code">
<pre>usermsgx=<span style="color: rgba(0, 0, 0, 1)">itchat.search_friends()
</span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(usermsgx)
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(usermsgx[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">NickName</span><span style="color: rgba(128, 0, 0, 1)">"</span>]) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">得到昵称</span></pre>
</div>
<p>获取所有朋友信息</p>
<div class="cnblogs_code">
<pre>friendx=<span style="color: rgba(0, 0, 0, 1)">itchat.get_friends()
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(friendx)</pre>
</div>
<p>条件获取朋友或者自己信息</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取特定UserName的用户信息</span>
<span style="color: rgba(0, 128, 128, 1)">2</span> itchat.search_friends(userName=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@abcdefg1234567</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取任何一项等于name键值的用户</span>
<span style="color: rgba(0, 128, 128, 1)">4</span> itchat.search_friends(name=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">littlecodersh</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获取分别对应相应键值的用户</span>
<span style="color: rgba(0, 128, 128, 1)">6</span> itchat.search_friends(wechatAccount=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">littlecodersh</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 三、四项功能可以一同使用</span>
<span style="color: rgba(0, 128, 128, 1)">8</span> itchat.search_friends(name=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">LittleCoder机器人</span><span style="color: rgba(128, 0, 0, 1)">'</span>, wechatAccount=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">littlecodersh</span><span style="color: rgba(128, 0, 0, 1)">'</span>)</pre>
</div>
<p>得到用户序号</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">@itchat.msg_register()
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> text_reply(msg):
    </span><span style="color: rgba(0, 0, 255, 1)">print</span><span style="color: rgba(0, 0, 0, 1)">(msg)
    </span><span style="color: rgba(0, 0, 255, 1)">print</span>(msg[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">User</span><span style="color: rgba(128, 0, 0, 1)">"</span>][<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Uin</span><span style="color: rgba(128, 0, 0, 1)">"</span>])</pre>
</div>
<p>更新用户数据,通过<em>UserName</em><em>,或者</em><em>UserName</em><em>列表</em></p>
<div class="cnblogs_code">
<pre>memberList = itchat.update_friend(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@abcdefg1234567</span><span style="color: rgba(128, 0, 0, 1)">'</span>)</pre>
</div>
<h2>注意:</h2>
<p>中文文件名文件上传</p>
<p>Q: 为什么中文的文件没有办法上传?&nbsp;</p>
<p>A: 这是因为使用requests包会自动将中文文件名编码为服务器端无法识别的格式,所以需要修改requests包或者使用别的方法上传文件。</p>
<p align="left">最简单的方法即将requests包的packages/urlib3中的fields.py中的format_header_param方法改为如下内容:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> format_header_param(name, value):
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(0, 0, 255, 1)">not</span> any(ch <span style="color: rgba(0, 0, 255, 1)">in</span> value <span style="color: rgba(0, 0, 255, 1)">for</span> ch <span style="color: rgba(0, 0, 255, 1)">in</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">"\\\r\n</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">):
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>         result = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">%s="%s"</span><span style="color: rgba(128, 0, 0, 1)">'</span> %<span style="color: rgba(0, 0, 0, 1)"> (name, value)
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>         <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>             result.encode(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ascii</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>         <span style="color: rgba(0, 0, 255, 1)">except</span><span style="color: rgba(0, 0, 0, 1)"> UnicodeEncodeError:
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>             <span style="color: rgba(0, 0, 255, 1)">pass</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span>         <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result
</span><span style="color: rgba(0, 128, 128, 1)">10</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(0, 0, 255, 1)">not</span> six.PY3:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> Python 2:</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>         value = value.encode(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">12</span>   value = email.utils.encode_rfc2231(value, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">utf-8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   value = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">%s="%s"</span><span style="color: rgba(128, 0, 0, 1)">'</span> % (name, value.decode(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">utf8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
</span><span style="color: rgba(0, 128, 128, 1)">14</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> value</pre>
</div>
<p>命令行显示二维码</p>
<p>Q: 为什么我在设定了itchat.auto_login()的enableCmdQR为True后还是没有办法在命令行显示二维码?</p>
<p>A: 这是由于没有安装可选的包pillow,可以使用右边的命令安装:pip install pillow</p>
<h2>综合:</h2>
<p>实现文本信息的关联,及可以实时看到所关联的账号的聊天信息,当发生聊天数据时会主动将聊天数据发送到主账号上</p>
<p><img src="https://img2018.cnblogs.com/blog/1485202/201903/1485202-20190307163428386-831554338.png" alt=""></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> itchat
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">from</span> itchat.content <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT,MAP
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">只对个人用户有效</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">@itchat.msg_register()
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> text_reply(msg):
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 查询数据的接收者</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span>    touserx=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">filehelper</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">默认为文件助手发送信息</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span>    <span style="color: rgba(0, 0, 255, 1)">if</span> msg[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ToUserName</span><span style="color: rgba(128, 0, 0, 1)">"</span>]!=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">filehelper</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">如果非文件助手信息</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>         touserx=itchat.search_friends(userName=msg[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ToUserName</span><span style="color: rgba(128, 0, 0, 1)">"</span>])[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">NickName</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
</span><span style="color: rgba(0, 128, 128, 1)">10</span>    inuserx = itchat.search_friends(userName=msg[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">FromUserName</span><span style="color: rgba(128, 0, 0, 1)">"</span>])[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">NickName</span><span style="color: rgba(128, 0, 0, 1)">"</span>]<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">查询数据的发送者</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>    totouserx=itchat.search_friends(name=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">东里个咚</span><span style="color: rgba(128, 0, 0, 1)">'</span>)[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">UserName</span><span style="color: rgba(128, 0, 0, 1)">"</span>] <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">通过昵称查询到username</span>
<span style="color: rgba(0, 128, 128, 1)">12</span>    texts=msg.text <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">得到接收的数据</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>    itchat.send_msg(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">【</span><span style="color: rgba(128, 0, 0, 1)">"</span>+thisuserx+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">】\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>+inuserx+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">--&gt;</span><span style="color: rgba(128, 0, 0, 1)">"</span>+touserx+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"> :\n</span><span style="color: rgba(128, 0, 0, 1)">"</span>+texts,toUserName=totouserx) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">发送给目标</span>
<span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">登入</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">itchat.auto_login()
</span><span style="color: rgba(0, 128, 128, 1)">17</span> thisuserx=itchat.search_friends()[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">NickName</span><span style="color: rgba(128, 0, 0, 1)">"</span>] <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">得到当前用户昵称</span>
<span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">保持运行</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> itchat.run()</pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/dongxiaodong/p/10490563.html
頁: [1]
查看完整版本: Python微信操控(itchat)