微信自動回復機器人


微信機器人

你可以使用itchat-uos

2017年后,新注冊的微信基本登錄不了網頁版,itchat-uos版本利用統信UOS的網頁版微信,可以讓你繞過網頁微信的登錄限制。

你只需要執行下條命令便能復活itchat

pip install itchat-uos

然后再import itchat就可以使用了

此時會顯示“桌面微信”而不是“網頁微信”了

但是這樣只能用掃碼登錄了,不能用自動登錄
運行程序,掃碼登錄之后會在項目路徑下創建一個itchat.pkl文件,
該文件用於存儲登錄的狀態,所以不要動它,如果你想換一個微信賬號登錄,
就要先把這個文件刪除,因為該文件記錄的是上一個微信的登陸狀態,刪除之后即可切換賬號登錄。
 

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制作聊天機器人

import itchat
import requests
from itchat.content import TEXT
def get_response(msg):
  apiUrl1="https://api.jisuapi.com/iqa/query?"
  data1={'appkey':'a5ff0f0ec15f06be','question':msg,}
  r = requests.get(apiUrl1, data1).json()
  t=r.get("result")
  return(t.get('content'))


@itchat.msg_register(itchat.content.TEXT)
def print_content(msg):
  print(msg['Text'])
  r=get_response(msg['Text'])
  itchat.send_msg(r, msg['FromUserName'])
itchat.auto_login()
itchat.run()

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
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM