微信機器人
你可以使用itchat-uos
2017年后,新注冊的微信基本登錄不了網頁版,itchat-uos版本利用統信UOS的網頁版微信,可以讓你繞過網頁微信的登錄限制。
你只需要執行下條命令便能復活itchat
pip install itchat-uos
然后再import itchat就可以使用了
此時會顯示“桌面微信”而不是“網頁微信”了
19.3.4 發送信息
itchat提供了幾個發送不同類型信息的函數,沒有發送語音的原因是網頁版沒有這個接口,可供調用
的函數如表19.1所示。
函數名 作用
send_msg() 發送文字信息
send_file() 發送文件
send_video() 發送視頻
send_image() 發送圖片
使用代碼示例如下:
import itchat
import time
def after():
user_info = itchat.search_friends(name='培傑')
if len(user_info) > 0:
# 拿到用戶名
user_name = user_info[0]['UserName']
# 發送文字信息
itchat.send_msg('培傑你好啊!', user_name)
# 發送圖片
time.sleep(10)
itchat.send_image('cat.jpg', user_name)
# 發送文件
time.sleep(10)
itchat.send_file('19_2.py', user_name)
# 發送視頻
time.sleep(10)
itchat.send_video('sport.mp4', user_name)
if __name__ == '__main__':
itchat.auto_login(loginCallback=after)
itchat.run()
19.2.4 監聽信息
除了主動發送信息外,還可以對信息進行監控,支持對多種類型的信息進行監控,類型如表19.2所示。
另外,有多個注冊信息監聽,后注冊的信息優先級高於先注冊信息,帶參數信息高於不帶參數信息。
信息類型 解釋
itchat.content.TEXT 文本內容
itchat.content.MAP 位置文本
itchat.content.Card 名片
itchat.content.Note 通知文本
itchat.content.Sharing 分享名稱
itchat.content.RECORDING 錄音
itchat.PICTURE 圖片/表情
itchat.content.VOICE 錄音
itchat.content.ATTACHMENT 附件
itchat.content.VIDEO 短視頻
itchat.content.FRIENDS 好友邀請
itchat.content.SYSTEM 系統信息
一個監聽到文字信息並響應信息的代碼示例如下:
import itchat
@itchat.msg_register(itchat.content.TEXT)
def reply_msg(msg):
if msg['Content'] == u'你好':
itchat.send_msg(msg['User']['NickName'] + "你好啊!", msg['FromUserName'])
if __name__ == '__main__':
itchat.auto_login()
itchat.run()
19.2.5 群聊
在微信網頁端改版后,創建群聊、拉人進群和刪除群聊這幾個接口都用不了,現在利用itchat能做的有:查找群聊,往群聊發送信息,以及監控群聊信息,使用代碼示例如下:
import itchat
import time
@itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
def reply_msg(msg):
print("收到一條群信息:", msg['ActualNickName'], msg['Content'])
def after_login():
# 獲得完整的群聊列表
print("完整的群聊列表如下:")
print(itchat.get_chatrooms())
# 查找特定群聊
time.sleep(10)
# 通過群聊名查找
chat_rooms = itchat.search_chatrooms(name='小豬的Python學習交流群')
if len(chat_rooms) > 0:
itchat.send_msg('測試', chat_rooms[0]['UserName'])
if __name__ == '__main__':
itchat.auto_login(loginCallback=after_login)
itchat.run()
19.3 實用示例:定時發送消息
定時發送信息這個操作在日常生活中非常實用,比如給別人發生日或者節日祝福,晚上12點准時發,如果有早睡習慣的要熬到12點就很難受了,我們可以利用itchat編寫一個簡單的定時發送信息腳本。這里我們用到一個apscheduler定時調度任務模塊,在命令行鍵入pip install apscheduler即可完成安裝。這里並不會詳細講解,有興趣的可移步到官方文檔自行查閱:
http://apscheduler.readthedocs.io/en/latest/userguide.html
定時發送消息的代碼示例如下:
import itchat
from apscheduler.schedulers.blocking import BlockingScheduler
import time
# 發送信息
def send_msg():
user_info = itchat.search_friends(name='培傑')
if len(user_info) > 0:
user_name = user_info[0]['UserName']
itchat.send_msg('生日快樂哦!', toUserName=user_name)
def after_login():
sched.add_job(send_msg, 'cron', year=2018, month=7, day=28, hour=16, minute=5, second=30)
sched.start()
def after_logout():
sched.shutdown()
if __name__ == '__main__':
sched = BlockingScheduler()
itchat.auto_login(loginCallback=after_login, exitCallback=after_login)
itchat.run()
19.4 實用示例:集成圖靈API制作聊天機器人
19.5.4 定時清理緩存
另外,我們的信息都是用一個字典存着的,時間長了的話,數據會很多,而且圖片文件這些會越攢越多,我們可以添加一個定時任務,比如每隔五分鍾清理一下創建時長超過2分鍾的信息和對應的文件。相關代碼如下:
# 每隔五種分鍾執行一次清理任務
def clear_cache():
# 當前時間
cur_time = time.time()
# 遍歷字典,如果有創建時間超過2分鍾(120s)的記錄,刪除,非文本的話,連文件也刪除
for key in list(rec_msg_dict.keys()):
if int(cur_time) - int(rec_msg_dict.get(key).get('msg_create_time')) > 120:
if not rec_msg_dict.get(key).get('msg_type') == 'Text':
file_path = os.path.join(rec_tmp_dir, rec_msg_dict.get(key).get('msg_content'))
print(file_path)
if os.path.exists(file_path):
os.remove(file_path)
rec_msg_dict.pop(key)
# 開始輪詢任務
def start_schedule():
sched.add_job(clear_cache, 'interval', minutes=2)
sched.start()
# 退出停止所有任務並清空緩存文件夾
def after_logout():
sched.shutdown()
shutil.rmtree(rec_tmp_dir)
if __name__ == '__main__':
sched = BlockingScheduler()
if not os.path.exists(rec_tmp_dir):
os.mkdir(rec_tmp_dir)
itchat.auto_login(exitCallback=after_logout)
itchat.run(blockThread=False)
start_schedule()
————————————————
https://blog.csdn.net/coder_pig/article/details/81357810?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.essearch_pc_relevant&spm=1001.2101.3001.4242.1