天天看點

Python操作微信

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

文章目錄

  • ​​1、給檔案傳輸助手發一條消息​​
  • ​​2、回複發給自己的文本消息​​
  • ​​3、群發助手​​
  • ​​4、好友删除檢測​​
  • ​​5、微信播放音樂​​
  • ​​6、實作微信消息的擷取​​
  • ​​7、實作微信消息的發送​​
  • ​​8、最簡單的與圖靈機器人的互動​​

1、給檔案傳輸助手發一條消息

import itchat
itchat.auto_login(enableCmdQR=True)  # 這裡需要你人工手機掃碼登入
itchat.send('Hello, 檔案助手', toUserName='filehelper')      

2、回複發給自己的文本消息

import itchat
@itchat.msg_register(itchat.content.TEXT)
def text_replay(msg):
    return msg.text  # 人家說啥你回複啥。。。
itchat.auto_login()
itchat.run()      

3、群發助手

import itchat
import time

itchat.auto_login(hotReload=True, enableCmdQR=True)

SINCERE_WISH = u"祝%s感恩節快樂!"

friend_list = itchat.get_friends(update=True)  # 第一個是自己
friend_list = friend_list[1:]

for friend in friend_list:
    # 如果是示範,把send改成print就行
    # itchat.send(SINCERE_WISH % (friend['DisplayName'] or friend['NickName']), friend['UserName'])
    print(SINCERE_WISH % (friend['DisplayName'] or friend['NickName']))
    time.sleep(3)      

4、好友删除檢測

"""有時候我們會想知道某個好友有沒有删除自己或者把自己拉入黑名單。

這一操作使用itchat也會變的非常簡單。

原理的話,在于将好友拉入群聊時,非好友和黑名單好友不會被拉入群聊。

是以群聊的傳回值中就有了好友與你關系的資料。

另外,群聊在第一次産生普通消息時才會被除建立者以外的人發現的(系統消息不算普通消息)。

這樣,就可以隐蔽的完成好友檢測
"""


#coding=utf8
import itchat

CHATROOM_NAME = 'friend'
CHATROOM = None
HELP_MSG = u'''\
好友狀态監測
* 發送名片将會傳回好友狀态
* 請确有名為%s的未使用的群聊
* 并将該群聊儲存到通訊錄
* 調用頻率存在一定限制\
''' % CHATROOM_NAME
CHATROOM_MSG = u'''\
無法自動建立群聊,請手動建立
確定群聊名稱為%s
請不要使用已經使用過的群聊
建立後請将群聊儲存到通訊錄\
''' % CHATROOM_NAME


def get_chatroom():
    global CHATROOM
    if CHATROOM is None:
        itchat.get_chatrooms(update=True)
        chatrooms = itchat.search_chatrooms(CHATROOM_NAME)
        if chatrooms:
            return chatrooms[0]
        else:
            r = itchat.create_chatroom(itchat.get_friends()[1:4], topic=CHATROOM_NAME)
            if r['BaseResponse']['ErrMsg'] == '':
                CHATROOM = {'UserName': r['ChatRoomName']}
                return CHATROOM
    else:
        return CHATROOM
def get_friend_status(friend):
    ownAccount = itchat.get_friends(update=True)[0]
    if friend['UserName'] == ownAccount['UserName']:
        return u'檢測到本人賬号。'
    elif itchat.search_friends(userName=friend['UserName']) is None:
        return u'該使用者不在你的好友清單中。'
    else:
        chatroom = CHATROOM or get_chatroom()
        if chatroom is None: return CHATROOM_MSG
        r = itchat.add_member_into_chatroom(chatroom['UserName'], [friend])
        if r['BaseResponse']['ErrMsg'] == '':
            status = r['MemberList'][0]['MemberStatus']
            itchat.delete_member_from_chatroom(chatroom['UserName'], [friend])
            return { 3: u'該好友已經将你加入黑名單。',
                4: u'該好友已經将你删除。', }.get(status,
                u'該好友仍舊與你是好友關系。')
        else:
            return u'無法擷取好友狀态,預計已經達到接口調用限制。'

@itchat.msg_register(itchat.content.CARD)
def get_friend(msg):
    if msg['ToUserName'] != 'filehelper': return
    friendStatus = get_friend_status(msg['RecommendInfo'])
    itchat.send(friendStatus, 'filehelper')

itchat.auto_login(True)
itchat.send(HELP_MSG, 'filehelper')
itchat.run()      

5、微信播放音樂

# coding=utf-8

"""
這是一個通過微信控制電腦播放音樂的小項目,那麼主要就是三個功能: 輸入“幫助”,顯示幫助 輸入“關閉”,關閉音樂播放 * 輸入具體歌名,進入歌曲的選擇
"""
import os

import itchat
from NetEaseMusicApi import interact_select_song

HELP_MSG = """\
歡迎使用微信網易雲音樂
幫助:顯示幫助
關閉:關閉歌曲
歌名:按照引導播放音樂
"""

with open('stop.mp3', 'w') as f:
    pass


def close_music():
    os.startfile('stop.mp3')


@itchat.msg_register(itchat.content.TEXT)
def music_player(msg):
    if msg['ToUserName'] != 'filehelper':
        return
    if msg['Text'] == u'關閉':
        close_music()
        itchat.send(u'音樂已關閉', 'filehelper')
    if msg['Text'] == u'幫助':
        itchat.send(HELP_MSG, 'filehelper')
    else:
        itchat.send(interact_select_song(msg['Text']), 'filehelper')


itchat.auto_login(True)
itchat.send(HELP_MSG, 'filehelper')
itchat.run()      

6、實作微信消息的擷取

import itchat
"""
圖檔對應itchat.content.PICTURE
語音對應itchat.content.RECORDING
名片對應itchat.content.CARD

TEXT = 'Text'
MAP = 'Map'
CARD = 'Card'
NOTE = 'Note'
SHARING = 'Sharing'
PICTURE = 'Picture'
RECORDING = VOICE = 'Recording'
ATTACHMENT = 'Attachment'
VIDEO = 'Video'
FRIENDS = 'Friends'
SYSTEM = 'System'
"""
@itchat.msg_register(itchat.content.TEXT)
def print_content(msg):
    print(msg['Text'])
itchat.auto_login()
itchat.run()      

7、實作微信消息的發送

import itchat
"""例子将會将文本消息原封不動的傳回"""
@itchat.msg_register(itchat.content.TEXT)
def print_content(msg):
    return msg['Text']

itchat.auto_login()
itchat.run()      

8、最簡單的與圖靈機器人的互動

import requests
import itchat

KEY = '8edce3ce905adbb965e6b35c3834d'


def get_response(msg):
    # 這裡我們就像在“3. 實作最簡單的與圖靈機器人的互動”中做的一樣
    # 構造了要發送給伺服器的資料
    apiUrl = 'http://www.tuling123.com/openapi/api'
    data = {
        'key': KEY,
        'info': msg,
        'userid': 'wechat-robot',
    }
    try:
        r = requests.post(apiUrl, data=data).json()
        # 字典的get方法在字典沒有'text'值的時候會傳回None而不會抛出異常
        return r.get('text')
    # 為了防止伺服器沒有正常響應導緻程式異常退出,這裡用try-except捕獲了異常
    # 如果伺服器沒能正常互動(傳回非json或無法連接配接),那麼就會進入下面的return
    except:
        # 将會傳回一個None
        return


# 這裡是我們在“1. 實作微信消息的擷取”中已經用到過的同樣的注冊方法
@itchat.msg_register(itchat.content.TEXT)
def tuling_reply(msg):
    # 為了保證在圖靈Key出現問題的時候仍舊可以回複,這裡設定一個預設回複
    defaultReply = 'I received: ' + msg['Text']
    # 如果圖靈Key出現問題,那麼reply将會是None
    reply = get_response(msg['Text'])
    # a or b的意思是,如果a有内容,那麼傳回a,否則傳回b
    # 有内容一般就是指非空或者非None,你可以用`if a: print('True')`來測試
    return reply or defaultReply


# 為了讓實驗過程更加友善(修改程式不用多次掃碼),我們使用熱啟動
itchat.auto_login(hotReload=True)
itchat.run()      

繼續閱讀