图灵机器人微信自动聊天功能
生活随笔
收集整理的這篇文章主要介紹了
图灵机器人微信自动聊天功能
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近,同學(xué)搞了個微信自動回復(fù),只要再群里說話,就會回復(fù),感覺挺好玩,現(xiàn)把代碼分享下如下,先看看效果,如下圖
左邊的是機器人,右邊的是我和它聊的。
現(xiàn)在開始把!
首先需要去圖靈申請個apikey,圖靈官網(wǎng)http://www.turingapi.com/
配置文件Wxpy.ini如下
[tuling] #此處是從圖靈申請的apikey apikey="*****" [wechat] #utf-8 gbk charset="utf-8" #好友昵稱,目前僅支持一個,不需要則留空 friend="" #群組昵稱,目前僅支持一個,不需要則留空 group="" #自動回復(fù)消息前綴 prefix=" " #自動回復(fù)消息后綴 subfix=" "
代碼文件Wxpy.py如下:
#coding:utf-8
__author__ = '***'
import time
import sys
import os
import ctypes
import Tkinter
import tkMessageBox
import json
import requests
import re
import subprocess
import datetime
import ConfigParser
import wxpy
def msgBox(title, info):
newTitle = title.decode('utf-8')
newInfo = info.decode('utf-8')
print newTitle, newInfo
top = Tkinter.Tk()
top.withdraw()
tkMessageBox.showinfo(title, info)
#tkMessageBox.askyesno(title, info)
#ctypes.windll.user32.MessageBoxA(0, newInfo, newTitle, 0)
#os.system('msg %username% /TIME:2 '+info)
def test():
print "%s."%sys._getframe().f_code.co_name
try :
time.sleep(0.3)
except Exception,e:
print e
return
def chatbot_init():
bot = ChatBot("Terminal",
storage_adapter = "chatterbot.storage.JsonFileStorageAdapter",
logic_adapters = [
"chatterbot.logic.MathematicalEvaluation",
"chatterbot.logic.TimeLogicAdapter",
"chatterbot.logic.BestMatch"
],
input_adapter = "chatterbot.input.TerminalAdapter",
output_adapter = "chatterbot.output.TerminalAdapter",
database = "./database.db"
)
def tuling_api(api_key, info):
url = 'http://www.tuling123.com/openapi/api?key='+api_key+'&info='+info
print url
res = requests.get(url)
res.encoding = 'utf-8'
jsonRes = json.loads(res.text)#str to dict
#print('tuling_api: ' + jsonRes['text'])
return jsonRes['text']
if "__main__" == __name__:
# if(len(sys.argv) < 4):
# msgBox("error", "para error!")
# deviceName=sys.argv[1]
try:
reload(sys)
sys.setdefaultencoding('utf-8')
#api_key='302dbb3ed3f845e5863c9ca7210acc2a'
api_key = ''
targetFriend = ''
targetGroup = ''
strPrefix = ''
strSubfix = ''
charset = ''
cf = ConfigParser.ConfigParser()
cf.read('Wxpy.ini')
api_key = cf.get('tuling','apikey').strip('"').strip()
targetFriend = cf.get('wechat','friend').strip('"').strip()
targetGroup = cf.get('wechat','group').strip('"').strip()
strPrefix = cf.get('wechat','prefix').strip('"')
strSubfix = cf.get('wechat','subfix').strip('"')
charset = cf.get('wechat','charset').strip('"').strip()
targetAutoReply = []
print len(api_key), api_key
print len(targetFriend), targetFriend.decode(charset)
print len(targetGroup), targetGroup.decode(charset)
print len(charset), charset
if(len(api_key) == 0 or ( len(targetFriend) == 0 and len(targetGroup) == 0) ):
msgBox('參數(shù)錯誤', '請參照使用說明 然后重新打開軟件')
sys.exit(1)
#tuling = wxpy.Tuling(api_key='302dbb3ed3f845e5863c9ca7210acc2a')
bot = wxpy.Bot(cache_path=True)
friends_stat = bot.friends().stats()
#print friends_stat
for province, count in friends_stat["province"].iteritems():
#print "province '%s', count %s"%(province, count)
pass
for city, count in friends_stat["city"].iteritems():
#print "city '%s', count %s"%(city, count)
pass
for sex, count in friends_stat["sex"].iteritems():
#print "sex '%s', count %s"%(sex, count)
pass
myGroup = None
groups = bot.groups()
count=0
for group in groups:
#print group.user_name
if group.nick_name!=None:
#print group.nick_name
if len(targetGroup) != 0 and group.nick_name.find(targetGroup.decode(charset)) != -1:
print 'Got it in groups.++++++++++++++++++++++++++++++++++++++'
myGroup = group
targetAutoReply.append(myGroup)
count+=1
print "groupCnt=%d."%count
myFriend = None
friends = bot.friends()
count=0
for friend in friends:
#print friend.user_name
if friend.nick_name!=None:
#print friend.nick_name
if len(targetFriend) != 0 and friend.nick_name.find(targetFriend.decode(charset)) != -1:
print 'Got it in friends.------------------------------------'
myFriend = friend
targetAutoReply.append(myFriend)
pass
count+=1
print "friendCnt=%d."%count
tmpStr = strPrefix + 'Hi.' + strSubfix# + str(datetime.datetime.now())
if myGroup != None:
myGroup.send(tmpStr.decode('utf-8','ignore'))
if myFriend != None:
myFriend.send(tmpStr.decode('utf-8','ignore'))
#bot.file_helper.send(tmpStr.decode('utf-8','ignore'))
print '-----------------------------------'
# 打印來自其他好友、群聊和公眾號的消息
@bot.register()
def print_others(msg):
print 'From others: '
#print msg
print msg.sender.name,msg.text,msg.type
# # 回復(fù) groups 的消息 (優(yōu)先匹配后注冊的函數(shù)!)
# @bot.register(myGroup)
# def auto_reply_groups(msg):
# print 'From auto_reply_groups:'
# #print msg
# print msg.sender.name,msg.text,msg.type
# #msg.sender.mark_as_read()
# if msg.type == 'Text': #如果是文字,就利用圖靈機器人api回復(fù),return和msg.reply_msg效果一樣
# print 'Text.'
# #replyText = tuling.do_reply(msg)
# #replyText = tuling.reply_text(msg)
# replyText = tuling_api(api_key, msg.text)
# replyText = strPrefix + replyText + strSubfix
# print '===<', replyText
# #msg.sender.send(replyText)
# msg.reply_msg(replyText)
# #return replyText
# elif msg.type == 'Picture': #如果接受到圖片,就自動回復(fù)同樣的圖片
# print ('this is Picture:{}'.format(msg.file_name))
# savaPath = msg.file_name
# msg.get_file(savaPath)
# msg.reply_image(savaPath)
# else:#其它的就轉(zhuǎn)發(fā)回給發(fā)送人
# msg.forward(msg.sender)
# 回復(fù) friends 的消息 (優(yōu)先匹配后注冊的函數(shù)!)
@bot.register(targetAutoReply)
def auto_reply(msg):
if len(targetAutoReply) == 0:
return
print 'From auto_reply:'
#print msg
print msg.sender.name,msg.text,msg.type
#msg.sender.mark_as_read()
if msg.type == 'Text': #如果是文字,就利用圖靈機器人api回復(fù),return和msg.reply_msg效果一樣
print 'Text..'
if msg.text.startswith(strPrefix) and msg.text.endswith(strSubfix):
return
#replyText = tuling.do_reply(msg)
replyText = tuling_api(api_key, msg.text)
replyText = strPrefix + replyText + strSubfix
print '===<', replyText
#msg.sender.send(replyText)
msg.reply_msg(replyText)
#return replyText
elif msg.type == 'Picture': #如果接受到圖片,就自動回復(fù)同樣的圖片
print ('this is Picture:{}'.format(msg.file_name))
savaPath = msg.file_name
msg.get_file(savaPath)
msg.reply_image(savaPath)
else:#其它的就轉(zhuǎn)發(fā)回給發(fā)送人
msg.forward(msg.sender)
# # 自動接受新的好友請求
@bot.register(msg_types=wxpy.FRIENDS)
def auto_accept_friends(msg):
print 'From auto_accept_friends:'
#print msg
print msg.sender.name,msg.text,msg.type
# # 接受好友請求
# #new_friend = msg.card.accept()
# # 向新的好友發(fā)送消息
# #new_friend.send('哈哈,我自動接受了你的好友請求')
wxpy.embed()
# # 進入Python命令行,讓程序保持運行
while(1):
pass
except Exception,e:
print e
finally:
sys.exit(1)
有興趣的可以玩玩,感覺挺好玩。
總結(jié)
以上是生活随笔為你收集整理的图灵机器人微信自动聊天功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巴林石画市场分析及收藏价格
- 下一篇: 牙石怎么抠(自己在家怎样清理牙结石)