黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Python微信操控(itchat)

系統 2112 0

itchat是一個開源的微信個人號接口,使用python調用微信從未如此簡單。

開源地址

https://github.com/littlecodersh/ItChat

文檔:

https://itchat.readthedocs.io/zh/latest/

安裝:

            pip3 install itchat
          

登入與登出

登入并向文件助手發送一句話,登入時會經過掃碼操作,類似于電腦微信登入

            
              1
            
            
              import
            
            
               itchat

            
            
              2
            
            
              #
            
            
              登入并保存登入狀態,實現第一次運行時掃碼,一定時間內再次運行就不用掃碼了,手機微信上將顯示:網頁微信已登入.....
            
            
              3
            
             itchat.auto_login(hotReload=
            
              True)

            
            
              4
            
            
              #
            
            
              發送文本數據到文件助手
            
            
              5
            
             itchat.send(
            
              "
            
            
              東小東你好123
            
            
              "
            
            ,toUserName=
            
              "
            
            
              filehelper
            
            
              "
            
            )
          

登出:

            itchat.logout() 
          

注冊登入登出的回調方法

            
              1
            
            
              def
            
            
               ldong():

            
            
              2
            
            
              print
            
            (
            
              '
            
            
              微信登入
            
            
              '
            
            
              )

            
            
              3
            
            
              def
            
            
               edong():

            
            
              4
            
            
              print
            
            (
            
              '
            
            
              微信登出
            
            
              '
            
            
              )

            
            
              5
            
            
              #
            
            
              登入
            
            
              6
            
             itchat.auto_login(hotReload=True,loginCallback=ldong, exitCallback=edong)
          

命令行二維碼

通過以下命令可以在登陸的時候使用命令行顯示二維碼:

            itchat.auto_login(enableCmdQR=True)
          

部分系統可能字幅寬度有出入,可以通過將enableCmdQR賦值為特定的倍數進行調整:

            
              #
            
            
              如部分的linux系統,塊字符的寬度為一個字符(正常應為兩字符),故賦值為2
            
            
itchat.auto_login(enableCmdQR=2)
          

默認控制臺背景色為暗色(黑色),若背景色為淺色(白色),可以將enableCmdQR賦值為負值:

            itchat.auto_login(enableCmdQR=-1)
          

可接受監聽的數據類型

消息分類:

圖片或表情(PICTURE)、錄制(RECORDING)、附件(ATTACHMENT)、小視頻(VIDEO)、文本(TEXT),地圖(MAP),名片(CARD),通知(NOTE),分享(SHARING),好友邀請(FRIENDS)、語音(RECORDING)、系統消息(SYSTEM)

獲取消息內容:

可以通過print(msg)方法查看消息里的所有數據,然后進行提取

            
              @itchat.msg_register(itchat.content.TEXT)

            
            
              def
            
            
               text_reply(msg):
    
            
            
              print
            
            (msg)
          

消息捕獲

針對朋友的消息捕獲

登入時不適用于hotReload=True,因為多次運行會多次注冊自動回復,比如在沒有登出的情況下運行3次程序,就會出現1次接受3次發送的效果

監聽函數只有在對方發送數據時進入

文本

            
               1
            
            
              import
            
            
               itchat

            
            
               2
            
            
              #
            
            
              自動回復
            
            
               3
            
            
              @itchat.msg_register(itchat.content.TEXT)

            
            
               4
            
            
              def
            
            
               text_reply(msg):

            
            
               5
            
            
              return
            
            
              "
            
            
              東小東回復數據:
            
            
              "
            
            +msg[
            
              "
            
            
              Text
            
            
              "
            
            
              ]

            
            
               6
            
            
               7
            
            
              #
            
            
              登入
            
            
               8
            
            
              itchat.auto_login()

            
            
               9
            
            
              #
            
            
              保持運行
            
            
              10
            
             itchat.run()
          

文件下載

            
               1
            
            
              import
            
            
               itchat

            
            
               2
            
            
              #
            
            
              PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT
            
            
               3
            
            
              #
            
            
               圖片、錄制、附件、視頻、文本
            
            
               4
            
            
              from
            
             itchat.content 
            
              import
            
            
               PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT

            
            
               5
            
            
               6
            
            
              @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])

            
            
               7
            
            
              def
            
            
               download_files(msg):

            
            
               8
            
                 filedpx=
            
              "
            
            
              ./filex/
            
            
              "
            
            +msg[
            
              "
            
            
              FileName
            
            
              "
            
            ] 
            
              #
            
            
              得到文件路徑,目錄需要手動創建
            
            
               9
            
                 msg.download(filedpx) 
            
              #
            
            
              下載
            
            
              10
            
            
              return
            
            
              "
            
            
              你發送的文件類型
            
            
              "
            
            +msg[
            
              '
            
            
              Type
            
            
              '
            
            ]+
            
              "
            
            
                保存地址為:filex/
            
            
              "
            
            +msg.fileName
          

針對群聊的自動監測

如果想添加針對群聊的監測,則在監聽函數加入isGroupChat=True

監聽函數只要有數據發送就會進入,包括自己發送的數據

            
               1
            
            
              import
            
            
               itchat

            
            
               2
            
            
              #
            
            
              只對群消息有效
            
            
               3
            
             @itchat.msg_register(itchat.content.TEXT,isGroupChat=
            
              True)

            
            
               4
            
            
              def
            
            
               text_reply(msg):

            
            
               5
            
            
              if
            
            (msg[
            
              "
            
            
              Text
            
            
              "
            
            ]==
            
              "
            
            
              11
            
            
              "
            
            
              ):

            
            
               6
            
            
              return
            
            
              "
            
            
              東小東回復數據xx:
            
            
              "
            
            +msg[
            
              "
            
            
              Text
            
            
              "
            
            
              ]

            
            
               7
            
            
              #
            
            
              只對個人用戶有效
            
            
               8
            
            
              @itchat.msg_register(itchat.content.TEXT)

            
            
               9
            
            
              def
            
            
               text_reply(msg):

            
            
              10
            
            
              return
            
            
              "
            
            
              東小東回復數據:
            
            
              "
            
            +msg[
            
              "
            
            
              Text
            
            
              "
            
            
              ]

            
            
              11
            
            
              #
            
            
              登入
            
            
              12
            
            
              itchat.auto_login()

            
            
              13
            
            
              #
            
            
              保持運行
            
            
              14
            
             itchat.run()
          

@我信息監測

            
               1
            
            
              import
            
            
               itchat

            
            
               2
            
            
              #
            
            
              只對群消息有效
            
            
               3
            
             @itchat.msg_register(itchat.content.TEXT,isGroupChat=
            
              True)

            
            
               4
            
            
              def
            
            
               text_reply(msg):

            
            
               5
            
            
              #
            
            
              判斷是否是@本人
            
            
               6
            
            
              if
            
             msg[
            
              "
            
            
              Text
            
            
              "
            
            ].find(
            
              "
            
            
              @
            
            
              "
            
            +usermsgx[
            
              "
            
            
              NickName
            
            
              "
            
            ])==
            
              0:

            
            
               7
            
            
              return
            
            
              "
            
            
              @
            
            
              "
            
            +msg.actualNickName+
            
              "
            
            
               東你發的信息為:
            
            
              "
            
            +
            
              msg.text

            
            
               8
            
            
               9
            
             itchat.auto_login()
            
              #
            
            
              登入
            
            
              10
            
             usermsgx=itchat.search_friends()
            
              #
            
            
              得到當前用戶的信息
            
            
              11
            
             itchat.run()
            
              #
            
            
              保持運行
            
          

針對所有信息來源信息監聽

朋友、群聊、公眾號

            @itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True, isMpChat=
            
              True)

            
            
              def
            
            
               simple_reply(msg):
    
            
            
              return
            
            
              '
            
            
              I received: %s
            
            
              '
            
             % msg.text
          

數據發送

return

在接收數據函數里的return “數據” 則是自動確認為回復當前發送用戶數據,可以刪除該句,則不進行數據回復

itchat.send,可以一次性發送多條

參數:(內容,用戶)

返回值:發送結果,是否發送成功,json數據

注意:文件地址不可為中文

內容:可為單獨的字符串內容,其他有【@類型@地址】,類型有圖片(img)、文件(fil)、視頻(vid)

用戶:省略則發個自己,不穩定,msg['FromUserName']表示指定用戶為觸發用戶

            
              1
            
             res=itchat.send(
            
              '
            
            
              文本信息的發送......!
            
            
              '
            
            , toUserName=msg[
            
              '
            
            
              FromUserName
            
            
              '
            
            
              ])

            
            
              2
            
             res=itchat.send(
            
              '
            
            
              @img@%s
            
            
              '
            
             % 
            
              '
            
            
              ./filex/zcy.gif
            
            
              '
            
            , toUserName=msg[
            
              '
            
            
              FromUserName
            
            
              '
            
            
              ])

            
            
              3
            
             res=itchat.send(
            
              '
            
            
              @fil@%s
            
            
              '
            
             % 
            
              '
            
            
              ./filex/tt.txt
            
            
              '
            
            , toUserName=msg[
            
              '
            
            
              FromUserName
            
            
              '
            
            
              ])

            
            
              4
            
             res=itchat.send(
            
              '
            
            
              @vid@%s
            
            
              '
            
             % 
            
              '
            
            
              ./filex/videox.mp4
            
            
              '
            
            , toUserName=msg[
            
              '
            
            
              FromUserName
            
            
              '
            
            ])
          

指定類型發送2

參數:(地址,用戶)

返回值:發送結果,是否發送成功,json數據

注意:文件地址不可為中文

            
              1
            
             bb = itchat.send_msg(
            
              '
            
            
              文字信息2
            
            
              '
            
            , toUserName=msg[
            
              '
            
            
              FromUserName
            
            
              '
            
            
              ])

            
            
              2
            
             bb = itchat.send_image(
            
              '
            
            
              ./filex/zcy.gif
            
            
              '
            
            , toUserName=msg[
            
              '
            
            
              FromUserName
            
            
              '
            
            
              ])

            
            
              3
            
             bb = itchat.send_file(
            
              '
            
            
              ./filex/tt.txt
            
            
              '
            
            , toUserName=msg[
            
              '
            
            
              FromUserName
            
            
              '
            
            
              ])

            
            
              4
            
             bb = itchat.send_video(
            
              '
            
            
              ./filex/videox.mp4
            
            
              '
            
            , toUserName=msg[
            
              '
            
            
              FromUserName
            
            
              '
            
            
              ])

            
            
              5
            
            
              print
            
            (
            
              "
            
            
              返回值:
            
            
              "
            
            ,bb)
          

msg.user.send()

使用與itchat.send()相同,但是可以已經確定toUserName=msg['FromUserName'],不可更換

指定用戶(toUserName):

文件助手(發送給自己,必備):toUserName="filehelper"

發送者:toUserName=msg['FromUserName']

例子:

通過群名向群里發送內容,該微信群需要在運行代碼前進行手動添加到通訊錄

            
               1
            
            
              import
            
            
               itchat

            
            
               2
            
            
               3
            
            
              #
            
            
              登入
            
            
               4
            
            
              itchat.auto_login()

            
            
               5
            
             chatroomName=
            
              '
            
            
              傻逼群
            
            
              '
            
            
              #
            
            
              群名
            
            
               6
            
             itchat.get_chatrooms(update=
            
              True)

            
            
               7
            
             chatrooms = itchat.search_chatrooms(name=
            
              chatroomName)

            
            
               8
            
            
              if
            
             len(chatrooms)==
            
              0 :

            
            
               9
            
            
              print
            
            (
            
              '
            
            
              沒有找到群聊:
            
            
              '
            
             +
            
               chatroomName)

            
            
              10
            
            
                  exit(0)

            
            
              11
            
            
              else
            
            
              :

            
            
              12
            
            
              print
            
            (chatrooms[0][
            
              '
            
            
              UserName
            
            
              '
            
            ])
            
              #
            
            
              輸出群聊標識符
            
            
              13
            
                 itchat.send_msg(
            
              '
            
            
              大家好,這是發送的內容
            
            
              '
            
            , toUserName=chatrooms[0][
            
              '
            
            
              UserName
            
            
              '
            
            ])
            
              #
            
            
              發送消息
            
            
              14
            
            
              15
            
            
              #
            
            
              保持運行
            
            
              16
            
             itchat.run()
          

個人的基本信息

獲取本人信息

            usermsgx=
            
              itchat.search_friends()

            
            
              print
            
            
              (usermsgx)

            
            
              print
            
            (usermsgx[
            
              "
            
            
              NickName
            
            
              "
            
            ]) 
            
              #
            
            
              得到昵稱
            
          

獲取所有朋友信息

            friendx=
            
              itchat.get_friends()

            
            
              print
            
            (friendx)
          

條件獲取朋友或者自己信息

            
              1
            
            
              #
            
            
               獲取特定UserName的用戶信息
            
            
              2
            
             itchat.search_friends(userName=
            
              '
            
            
              @abcdefg1234567
            
            
              '
            
            
              )

            
            
              3
            
            
              #
            
            
               獲取任何一項等于name鍵值的用戶
            
            
              4
            
             itchat.search_friends(name=
            
              '
            
            
              littlecodersh
            
            
              '
            
            
              )

            
            
              5
            
            
              #
            
            
               獲取分別對應相應鍵值的用戶
            
            
              6
            
             itchat.search_friends(wechatAccount=
            
              '
            
            
              littlecodersh
            
            
              '
            
            
              )

            
            
              7
            
            
              #
            
            
               三、四項功能可以一同使用
            
            
              8
            
             itchat.search_friends(name=
            
              '
            
            
              LittleCoder機器人
            
            
              '
            
            , wechatAccount=
            
              '
            
            
              littlecodersh
            
            
              '
            
            )
          

得到用戶序號

            
              @itchat.msg_register([TEXT,MAP])

            
            
              def
            
            
               text_reply(msg):
    
            
            
              print
            
            
              (msg)
    
            
            
              print
            
            (msg[
            
              "
            
            
              User
            
            
              "
            
            ][
            
              "
            
            
              Uin
            
            
              "
            
            ])
          

更新用戶數據,通過 UserName ,或者 UserName 列表

            memberList = itchat.update_friend(
            
              '
            
            
              @abcdefg1234567
            
            
              '
            
            )
          

注意:

中文文件名文件上傳

Q: 為什么中文的文件沒有辦法上傳??

A: 這是因為使用requests包會自動將中文文件名編碼為服務器端無法識別的格式,所以需要修改requests包或者使用別的方法上傳文件。

最簡單的方法即將requests包的packages/urlib3中的fields.py中的format_header_param方法改為如下內容:

            
               1
            
            
              def
            
            
               format_header_param(name, value):

            
            
               2
            
            
              if
            
            
              not
            
             any(ch 
            
              in
            
             value 
            
              for
            
             ch 
            
              in
            
            
              '
            
            
              "\\\r\n
            
            
              '
            
            
              ):

            
            
               3
            
                     result = 
            
              '
            
            
              %s="%s"
            
            
              '
            
             %
            
               (name, value)

            
            
               4
            
            
              try
            
            
              :

            
            
               5
            
                         result.encode(
            
              '
            
            
              ascii
            
            
              '
            
            
              )

            
            
               6
            
            
              except
            
            
               UnicodeEncodeError:

            
            
               7
            
            
              pass
            
            
               8
            
            
              else
            
            
              :

            
            
               9
            
            
              return
            
            
               result

            
            
              10
            
            
              if
            
            
              not
            
             six.PY3:  
            
              #
            
            
               Python 2:
            
            
              11
            
                     value = value.encode(
            
              '
            
            
              utf-8
            
            
              '
            
            
              )

            
            
              12
            
                 value = email.utils.encode_rfc2231(value, 
            
              '
            
            
              utf-8
            
            
              '
            
            
              )

            
            
              13
            
                 value = 
            
              '
            
            
              %s="%s"
            
            
              '
            
             % (name, value.decode(
            
              '
            
            
              utf8
            
            
              '
            
            
              ))

            
            
              14
            
            
              return
            
             value
          

命令行顯示二維碼

Q: 為什么我在設定了itchat.auto_login()的enableCmdQR為True后還是沒有辦法在命令行顯示二維碼?

A: 這是由于沒有安裝可選的包pillow,可以使用右邊的命令安裝:pip install pillow

綜合:

實現文本信息的關聯,及可以實時看到所關聯的賬號的聊天信息,當發生聊天數據時會主動將聊天數據發送到主賬號上

Python微信操控(itchat)_第1張圖片

            
               1
            
            
              import
            
            
               itchat

            
            
               2
            
            
              from
            
             itchat.content 
            
              import
            
            
               PICTURE, RECORDING, ATTACHMENT, VIDEO,TEXT,MAP

            
            
               3
            
            
              #
            
            
              只對個人用戶有效
            
            
               4
            
            
              @itchat.msg_register([TEXT])

            
            
               5
            
            
              def
            
            
               text_reply(msg):

            
            
               6
            
            
              #
            
            
               查詢數據的接收者
            
            
               7
            
                touserx=
            
              "
            
            
              filehelper
            
            
              "
            
            
              #
            
            
              默認為文件助手發送信息
            
            
               8
            
            
              if
            
             msg[
            
              "
            
            
              ToUserName
            
            
              "
            
            ]!=
            
              "
            
            
              filehelper
            
            
              "
            
            :
            
              #
            
            
              如果非文件助手信息
            
            
               9
            
                     touserx=itchat.search_friends(userName=msg[
            
              "
            
            
              ToUserName
            
            
              "
            
            ])[
            
              "
            
            
              NickName
            
            
              "
            
            
              ]

            
            
              10
            
                inuserx = itchat.search_friends(userName=msg[
            
              "
            
            
              FromUserName
            
            
              "
            
            ])[
            
              "
            
            
              NickName
            
            
              "
            
            ]
            
              #
            
            
              查詢數據的發送者
            
            
              11
            
                totouserx=itchat.search_friends(name=
            
              '
            
            
              東里個咚
            
            
              '
            
            )[0][
            
              "
            
            
              UserName
            
            
              "
            
            ] 
            
              #
            
            
              通過昵稱查詢到username
            
            
              12
            
                texts=msg.text 
            
              #
            
            
              得到接收的數據
            
            
              13
            
                itchat.send_msg(
            
              "
            
            
            
              "
            
            +thisuserx+
            
              "
            
            
              】\n
            
            
              "
            
            +inuserx+
            
              "
            
            
              -->
            
            
              "
            
            +touserx+
            
              "
            
            
               :\n
            
            
              "
            
            +texts,toUserName=totouserx) 
            
              #
            
            
              發送給目標
            
            
              14
            
            
              15
            
            
              #
            
            
              登入
            
            
              16
            
            
              itchat.auto_login()

            
            
              17
            
             thisuserx=itchat.search_friends()[
            
              "
            
            
              NickName
            
            
              "
            
            ] 
            
              #
            
            
              得到當前用戶昵稱
            
            
              18
            
            
              #
            
            
              保持運行
            
            
              19
            
             itchat.run()
          

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論