本例使用itchat获取微信文字消息,发送给LUIS返回识别消息,再将返回消息格式化后通过微信发回
关于itchat的使用参考我的另外一篇随笔itchat个人练习 语音与文本图灵测试例程
# -*- coding: UTF-8 -*-
import requests
import itchat
import json def get_response(msg):
headers = {
# Request headers
'Ocp-Apim-Subscription-Key': '=====填上自己的LUIS API密钥========',
} params ={
# Query parameter
'q': msg,#需要检测的消息
# Optional request parameters, set to default values
'timezoneOffset': '',
'verbose': 'false',
'spellCheck': 'false',
'staging': 'false',
} try:
r = requests.get('https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/'+'=====填上自己的luisAppId=====',headers=headers, params=params)
print (r.json())
return json.dumps(r.json())#json()是取出json消息,dumps()是把json对象转换为字符串才能返回 except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror)) def changeEntity(entitiesList):
#用于把返回的entities取出来放在list里
entityList=[]
for item in entitiesList:
entityList.append(item.get('entity'))
return entityList # 这里是我们在“1. 实现微信消息的获取”中已经用到过的同样的注册方法
@itchat.msg_register(itchat.content.TEXT)
def tuling_reply(msg):
# 为了保证在图灵Key出现问题的时候仍旧可以回复,这里设置一个默认回复
defaultReply = 'I received: ' + msg['Text']
# 如果图灵Key出现问题,那么reply将会是None
jsonReply = json.loads(get_response(msg['Text']))
# 返回json数据格式
# {
# 'query': <str> ,
# 'topScoringIntent': {
# 'intent': <str> ,
# 'score': <float>},
# 'entities': <list>
# }
reply = "提问:" + jsonReply.get('query') +
"\n意图:" + jsonReply.get('topScoringIntent').get('intent') +
"\n分数:" + repr(jsonReply.get('topScoringIntent').get('score')) +
"\n实体:" + repr(changeEntity(jsonReply.get('entities')))
# a or b的意思是,如果a有内容,那么返回a,否则返回b
# 有内容一般就是指非空或者非None,你可以用`if a: print('True')`来测试
return reply or defaultReply # 为了让实验过程更加方便(修改程序不用多次扫码),我们使用热启动hotReload=True
itchat.auto_login(hotReload=True)
itchat.run()