python微信庫 --- itchat

python實現微信接口——itchat模塊html

安裝

pip install itchat

登陸

itchat.auto_login() # 這種方法將會經過微信掃描二維碼登陸,可是這種登陸的方式確實短期的登陸,並不會保留登陸的狀態,也就是下次登陸時仍是須要掃描二維碼
加入 hotReload==True # 那麼就會保留登陸的狀態,至少在後面的幾回登陸過程當中不會再次掃描二維碼,該參數生成一個靜態文件itchat.pkl用於存儲登陸狀態

退出及登陸完成後調用的特定的方法

這裏主要使用的是灰調函數的方法,登陸完成後的方法須要賦值在 loginCallback 中退出後的方法,須要賦值在 exitCallback 中.若不設置 loginCallback 的值, 將會自動刪除二維碼圖片並清空命令行顯示.python

import itchat, time
def lc():
    print("Finash Login!")
def ec():
    print("exit")

itchat.auto_login(loginCallback=lc, exitCallback=ec)
time.sleep()
itchat.logout()    #強制退出登陸    

回覆消息

sendandroid

  • send(msg="Text Message", toUserName=None)web

參數:正則表達式

  • msg : 文本消息內容json

  • @fil@path_to_file : 發送文件微信

  • @img@path_to_img : 發送圖片markdown

  • @vid@path_to_video : 發送視頻cookie

  • toUserName : 發送對象, 若是留空, 將發送給本身.併發

返回值

  • True or False

實例代碼

# 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

  • send_msg(msg='Text Message', toUserName=None),其中的的msg是要發送的文本,toUserName是發送對象, 若是留空, 將發送給本身,返回值爲True或者False

實例代碼

import itchat
itchat.auto_login()
itchat.send_msg("hello world.")
send_file
  • send_file(fileDir, toUserName=None) fileDir是文件路徑, 當文件不存在時, 將打印無此文件的提醒,返回值爲True或者False

實例代碼

mport itchat

itchat.auto_login()
itchat.send_file("/tmp/test.txt")

send_image

  • send_image(fileDir, toUserName=None) 參數同上

實例代碼

import itchat

itchat.auto_login()
itchat.send_img("/tmp/test.txt")

send_video

  • send_video(fileDir, toUserName=None) 參數同上

實例代碼

import itchat

itchat.auto_login()
itchat.send_video("/tmp/test.txt")

註冊消息方法

itchat 將根據接受到的消息類型尋找對應的已註冊的方法. 若是一個消息類型沒有對應的註冊方法, 該消息將會被捨棄. 在運行過程當中也能夠動態註冊方法, 註冊方式與結果不變.

註冊方法

  • 不帶具體對象註冊, 將註冊爲普通消息的回覆方法.

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表示公衆號

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 的附件下載方法存儲在 msgText 鍵中. 發送的文件名(圖片給出的默認文件名), 都存儲在 msgFileName 鍵中. 下載方法, 接受一個可用的位置參數(包括文件名), 並將文件響應的存儲. 注意:下載的文件存儲在指定的文件中,直接將路徑與FileName鏈接便可,如msg["Text"]('/tmp/weichat'+msg['FileName'])

@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"])

羣消息

增長了三個鍵值,以下:

  • isAt 判斷是否 @ 本號

  • ActualNickName : 實際 NickName(暱稱)

  • Content : 實際 Content

測試程序

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()

註冊消息的優先級

總的來講就是後面註冊同種類型的消息會覆蓋以前註冊的消息,詳情見文檔https://itchat.readthedocs.io/zh/latest/

消息內容

注意:全部的消息內容都是能夠用鍵值對來訪問的,如msg["FromUserName]就是查看發送者,itchat.search_friends(userName=msg['FromUserName'])['NickName']查看的是當發送者暱稱

通常消息

通常的消息都遵循如下的內容:

{
    "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
}

初始化消息

 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>

文本消息

MsgType: 1
    FromUserName: 發送方ID
    ToUserName: 接收方ID
    Content: 消息內容

圖片消息

itchat 增長了 Text 鍵, 鍵值爲 下載該圖片的方法.

MsgType: 3
    FromUserName: 發送方ID
    ToUserName: 接收方ID
    MsgId: 用於獲取圖片,用於表示每一條消息
    Content:
        <msg>
            <img length="6503" hdlength="0" />
            <commenturl></commenturl>
        </msg>

拓展:若是想要獲得Content中的具體內容可使用正則表達式匹配出來

視頻消息

*itchat 增長了 Text 鍵, 鍵值爲 下載該視頻的方法.*

    MsgType: 62
    FromUserName: 發送方ID
    ToUserName: 接收方ID
    MsgId: 用於獲取小視頻
    Content:
        <msg>
            <img length="6503" hdlength="0" />
            <commenturl></commenturl>
        </msg>

地理位置消息

itchat 增長了 Text 鍵, 鍵值爲 該地點的文本形式.

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 須要的屬性.

 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
        }

下面是添加好友的測試代碼

@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的格式

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消息類型的話是不能夠監測到的

  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>

普通連接或應用分享消息

主要針對的是分享的文章等等

    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>

音樂連接消息

主要針對的是音樂

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&amp;guid=ffffffffc104ea2964a111cf3ff3edaf&amp;fromtag=46
                </dataurl>
                <lowdataurl>
                    http://ws.stream.qqmusic.qq.com/C100003i9hMt1bgui0.m4a?vkey=6867EF99F3684&amp;guid=ffffffffc104ea2964a111cf3ff3edaf&amp;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 增長了三個羣聊相關的鍵值:

  • isAt : 判斷是否 @ 本號

  • ActualNickName : 實際 NickName

  • Content : 實際 Content

MsgType: 1
FromUserName: @@xxx
ToUserName: @xxx
Content:
    @xxx:<br/>xxx

紅包消息

 MsgType: 49
    AppMsgType: 2001
    FromUserName: 發送方ID
    ToUserName: 接收方ID
    Content: 未知

系統消息

 MsgType: 10000
    FromUserName: 發送方ID
    ToUserName: 本身ID
    Content:
        "你已添加了 xxx ,如今能夠開始聊天了。"
        "若是陌生人主動添加你爲朋友,請謹慎覈實對方身份。"
        "收到紅包,請在手機上查看"

帳號類型

tchat 爲三種帳號都提供了 總體獲取方法與搜索方法.

好友

get_friends

  • itchat.get_friends() 返回完整的好友列表

  • 每一個好友爲一個字典, 其中第一項爲本人的帳號信息;

  • 傳入 update=True, 將更新好友列表並返回, get_friends(update=True)

search_friends

  • itchat.get_friends() 好友搜索,有如下四種方式

  • 僅獲取本身的用戶信息

# 獲取本身的用戶信息,返回本身的屬性字典
itchat.search_friends()
  • 獲取特定 UserName 的用戶信息

# 獲取特定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的人,我可使用這個方法搜索出詳細的信息

# 獲取任何一項等於name鍵值的用戶
itchat.search_friends(name='autolife')
  • 獲取備註,微信號, 暱稱分別等於相應鍵值的用戶. (能夠與上一項配置使用.)

# 獲取分別對應相應鍵值的用戶
itchat.search_friends(wechatAccount='littlecodersh')
# 3、四項功能能夠一同使用
itchat.search_friends(name='LittleCoder機器人', wechatAccount='littlecodersh')

update_friend

主要用於好友更新

  • 特定用戶: 傳入用戶UserName, 返回指定用戶的最新信息.

  • 用戶列表: 傳入 UserName 組成的列表, 返回用戶最新信息組成的列表

memberList = itchat.update_friend('@abcdefg1234567')

公衆號

get_mps

將返回完整的工做號列表

  • 每一個公衆號爲一個字典,

  • 傳入 update=True 將更新公衆號列表, 並返回.

search_mps

  • 獲取特定UserName的公衆號

# 獲取特定UserName的公衆號,返回值爲一個字典
itchat.search_mps(userName='@abcdefg1234567')
  • 獲取名字中還有特定字符的公衆號.

# 獲取名字中含有特定字符的公衆號,返回值爲一個字典的列表
itchat.search_mps(name='LittleCoder')
  • 當兩項都是勇士, 將僅返回特定UserName的公衆號.

羣聊

  • get_chatrooms : 返回完整的羣聊列表.

  • search_chatrooms : 羣聊搜索.

  • update_chatroom : 獲取羣聊用戶列表或更新該羣聊.

  • 羣聊在首次獲取中不會獲取羣聊的用戶列表, 因此須要調用該命令才能獲取羣聊成員.

  • 傳入羣聊的 UserName , 返回特定羣聊的詳細信息.

  • 傳入UserName組成的列表, 返回指定用戶的最新信息組成的列表.

memberList = itchat.update_chatroom('@@abcdefg1234567', detailedMember=True)
  • 建立羣聊,增長/刪除羣聊用戶:

  • 因爲以前經過羣聊檢測是否被好友拉黑的程序, 目前這三個方法都被嚴格限制了使用頻率.

  • 刪除羣聊須要本帳號爲管理員, 不然無效.

  • 將用戶加入羣聊有直接加入與發送邀請, 經過 useInvitation 設置.

  • 超過 40 人的羣聊沒法使用直接加入的加入方式.

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)

方法彙總

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

案列演示

   有幾個小案例,感受挺有意思的!!!

   微信好友信息轟炸   

import itchat
import time

print("請掃描二維碼")
# 熱登陸,登陸網頁版微信
# 這樣會生成一個 itchat.pkl 文件,用於保持登陸狀態,有點相似於cookie
itchat.auto_login(hotReload=True)
friend_name = input("請輸入要發送人的備註!-----")
content = input("輸入內容,按回車鍵------")
# 先經過微信的備註名找到微信好友備註信息
# UserName  經過其定位到好友
boom_obj = itchat.search_friends(remarkName=friend_name)[0]['UserName']
# 死循環
while True:
    # 睡一會,不然被屏蔽
    time.sleep(0.5)
    print('正在轟炸。。。')
    # 發送
    itchat.send_msg(msg=content, toUserName=boom_obj)

   注意 : 微信的好友名字必須是備註名,不然查詢不到!!!

   微信羣刷屏   

import itchat

itchat.auto_login(hotReload=True)
def send_group(msg, gname):
    rooms = itchat.get_chatrooms(update=True)
    rooms = itchat.search_chatrooms(gname)
    if rooms is not None:
        for i in range(2):
            username = rooms[0]["UserName"]
            itchat.send(msg, toUserName=username)
    else:
        print("輸入錯誤指令,請從新輸入!!!")


if __name__ == '__main__':
    send_group('早上好','134.平凡瑪法數據羣')

   使用餅圖展現微信好友性別統計   

import itchat

from echarts import Echart, Legend, Pie

itchat.auto_login(hotReload=True)
itchat.dump_login_status()

friends = itchat.get_friends(update=True)[:]
total = len(friends) - 1
male = female = other = 0

for friend in friends[1:]:
    sex = friend["Sex"]
    if sex == 1:
        male += 1
    elif sex == 2:
        female += 1
    else:
        other += 1
# print("男性好友:%.2f%%" % (float(male) / total * 100))
# print("女性好友:%.2f%%" % (float(female) / total * 100))
# print("其餘:%.2f%%" % (float(other) / total * 100))


chart = Echart('%s的微信好友性別比例' % (friends[0]['NickName']), 'from WeChat')
chart.use(Pie('WeChat',
              [{'value': male, 'name': '男性 %.2f%%' % (float(male) / total * 100)},
               {'value': female, 'name': '女性 %.2f%%' % (float(female) / total * 100)},
               {'value': other, 'name': '其餘 %.2f%%' % (float(other) / total * 100)}],
              radius=["50%", "70%"]))
chart.use(Legend(["male", "female", "other"]))
del chart.json["xAxis"]
del chart.json["yAxis"]
chart.plot()

   注意 : echarts,是python與百度連接的一個模塊,可是支持python3的時候回出現問題--編碼問題.須要下載以後對其源碼包進行修改

 

   微信羣發消息   

import itchat
import time

print('掃一下彈出來的二維碼')
itchat.auto_login(hotReload=True)
names = ['chengli', 'fang', 'genggeng', 'hanling', 'juan', 'll', 'short', 'md', 'miao', 'qiaohong', 'shuai',
         'sunhao', 'wangdan', 'whp', 'xiangxiang', 'xinxin']
name = ['short', 'short']
for i in range(16):
    boom_remark_name = names[i]
    # boom_remark_name = '亞述'
    # message = input('輸入你要轟炸的內容:')
    message = '支付寶五福瞭解一下'
    boom_obj = itchat.search_friends(remarkName=boom_remark_name)[0]['UserName']
    itchat.send_msg(msg=message, toUserName=boom_obj)
    # print(str(boom_remark_name)+'   已發送!')

    好友個性簽名詞雲    

   分析還有信息,能夠發現好友的個性簽名.能夠獲取好友個性簽名製做詞雲.

 

import os
import re

import itchat
import jieba
import matplotlib.pyplot as plt
import PIL.Image as Image
import numpy as np

# wordcloud會根據這張圖片在x和y軸上的顏色以及範圍等等,佈置詞雲
from wordcloud import WordCloud, ImageColorGenerator


def word_cloud(friends):
    d = os.path.dirname(__file__)
    # 獲取圖片,按照其形狀製做
    my_coloring = np.array(Image.open(os.path.join(d, "2.png")))
    signature_list = []
    for friend in friends:
        signature = friend["Signature"].strip()
        signature = re.sub("<span.*>", "", signature)
        signature_list.append(signature)
    raw_signature_string = ''.join(signature_list)
    text = jieba.cut(raw_signature_string, cut_all=True)
    target_signatur_string = ' '.join(text)
    # 圖形顏色,座標等
    my_wordcloud = WordCloud(background_color="white", max_words=2000, mask=my_coloring,
                             max_font_size=40, random_state=42,
                             font_path=r"C:\Windows\Fonts\simhei.ttf").generate(target_signatur_string)
    image_colors = ImageColorGenerator(my_coloring)
    plt.imshow(my_wordcloud.recolor(color_func=image_colors))
    plt.imshow(my_wordcloud)
    plt.axis("off")
    plt.show()
    # 保存圖片 併發送到手機
    my_wordcloud.to_file(os.path.join(d, "wechat_cloud.png"))
    # 發送到手機的微信助手
    itchat.send_image("wechat_cloud.png", 'filehelper')


itchat.auto_login(hotReload=True)
itchat.dump_login_status()

friends = itchat.get_friends(update=True)[:]

word_cloud(friends)

 

 

 

 

相關文章
相關標籤/搜索