Python-微信图灵机器人

今天写个好玩的~图灵机器人
这个参考了http://www.jianshu.com/p/5d4de51f5375这篇文章
用的库是之前爬取微信好友头像的那个库itchat,这个库可以很方便的获取微信里的一些信息
首先要到图灵机器人网站去注册开通一个机器人,图灵机器人也是可以直接接入微信公众号的
图灵机器人接入微信其实就是我们发送一个请求到图灵机器人,然后返回给我们一个信息给我,调用接口地址是它官网的API
http://doc.tuling123.com/openapi2/263611
就是发送一个post请求而已,这个是2.0版本的接口,1.0是get请求的
参考API可以知道请求数据格式:

    {
    "reqType":1,
    "perception": {
        "inputText": {
            "text": "附近的酒店"
        },
        "inputImage": {
            "url": "imageUrl"
        },
        "selfInfo": {
            "location": {
                "city": "北京",
                "latitude": "39.45492",
                "longitude": "119.239293",
                "nearest_poi_name": "上地环岛南",
                "province": "北京",
                "street": "信息路"
            }
        }
    },
    "userInfo": {
        "apiKey": "",
        "userId": ""
    }
}

如果只要发送文字,只要perception中的inputText和 userInfo就欧科了
apikey是在图灵机器人官网获取,userId自己定义一个即可

    userId = '123456'
    inputText = {'text': text}
    key = 'your apiKey'
    userInfo = {'apiKey': key, 'userId': userId}
    perception = {'inputText': inputText}
    data = {'perception': perception, 'userInfo': userInfo}

然后用requests发送一个post请求

url = 'http://openapi.tuling123.com/openapi/api/v2'
    response = requests.post(url=url, data=json.dumps(data))
    response.encoding = 'utf-8'
    result = response.json()
    answer = result['results'][0]['values']['text'] 

这个answer就是机器人返回给我们的
然后我们用itchat发送到微信好友,就可以实现和机器人聊天了

@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
    myself = itchat.get_friends(update=True)[0]['NickName']
    content = msg['Content']
    friend = msg['User']['NickName']
    answer = get_answer(msg['Text'])
    itchat.send(answer, msg['FromUserName'])

如果发送群里,也差不多,这需要换成小组的ID

@itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
def group_text_reply(msg):
    group_name = msg['User']['NickName'] # 获取群聊名称
    group = ['群聊测试', 'itchat'] # 设置聊天的群
    group_info = itchat.search_chatrooms(name=name)
    item = group_info[0]['UserName']
    if group_name in group:
        itchat.send(get_answer(msg['Text']), item)

如下是两个机器人间的对话 哈哈哈


image.png

最后惯例,贴下完整代码

#!usr/bin/env python3
# -*- coding:utf-8-*-

import itchat
import json
import requests


def get_data(text):
    userId = '123456'
    inputText = {'text': text}
    key = 'your apiKey'
    userInfo = {'apiKey': key, 'userId': userId}
    perception = {'inputText': inputText}
    data = {'perception': perception, 'userInfo': userInfo}
    return data


def get_answer(text):
    data = get_data(text)
    url = 'http://openapi.tuling123.com/openapi/api/v2'
    response = requests.post(url=url, data=json.dumps(data))
    response.encoding = 'utf-8'
    result = response.json()
    answer = result['results'][0]['values']['text']
    return answer

# 回复好友
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
    myself = itchat.get_friends(update=True)[0]['NickName']
    content = msg['Content']
    friend = msg['User']['NickName']
    # 给特定的人的回复,并且自己发的 不回复
    if friend != myself and friend!= 'FRIEND':
        print('%s: %s' % (friend, content))
        answer = get_answer(msg['Text'])
        itchat.send(answer, msg['FromUserName'])
        print('我:%s' % answer)
    else:
        itchat.send('你是猪', msg['FromUserName'])

# 获得群聊ID
def group_id(name):
    df = itchat.search_chatrooms(name=name)
    return df[0]['UserName']

# 发送群聊
@itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
def group_text_reply(msg):
    group_name = msg['User']['NickName']
    group = ['群聊测试', 'itchat']
    igroup_info = itchat.search_chatrooms(name=name)
    item = group_info[0]['UserName']
    if group_name in group:
        itchat.send(get_answer(msg['Text']), item)

itchat.auto_login(hotReload=True)
itchat.run()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,436评论 6 428
  • 因为周一没休息好,周二又胡思乱想~弄得今天累累的,差点不去上班~糟糕的状态,所以明天还是请个假,把报告写了,还有就...
    桌子和1106阅读 182评论 0 0
  • 成长记录 【清空脑子】 我当下的情绪有点焦虑,因为虽然早上论文作业已完成,但感觉没有多大价值或许说是我根本没有太多...
    无敌疯婆娘阅读 161评论 2 0
  • 1.线程概述 线程是进程的执行单元,进程具有:独立性,动态性,并发性三个特征。线程是进程的组成部分,一个进程...
    are_you_不服阅读 345评论 0 2