Python图灵机器人V1.2(2021.08.16)

版本:1.2 (2021.08.16)

更新内容:

1.使用爬虫将自动获取账户内的机器人apikey

2.将apikey写入文件无需二次请求获取

3.添加主界面功能,界面更加友好

4.自动切换apikey实现每个账户每天最高聊天500句

5.添加大量逻辑,运行速度可能会变慢

6.可以保存用户名密码,并且在第一次请求登陆失败后会自动请求5次,直到登陆成功,否则判断账号密码有误

7.在不登录的情况下使用内置的apikey,如果使用人数较多可能会导致无法正常聊天,建议登陆个人账户

主界面功能概览

1.欢迎功能

2.登陆功能

3.开始聊天

4.退出功能

……

本次更新将程序分为两个文件,文件1为主文件,可以任意命名,文件2为模块导入使用,只能命名为get_key.py

文末可以直接下载运行(电脑中必须安装python解释器3.x版本)

文件1代码详情:

import requests
import json
import get_key
import os

"""
程序圆:程序圆
QQ:760159327
功能说明:对话机器人,采用图灵机器人接口,接口每天可以免费使用100次
使用完需要更换apikey
"""

API = "https://openapi.tuling123.com/openapi/api/v2"  # 图灵机器人接口

default_keys = ["953b6f72dbab44e18def99115f092b21",
                "e4b1076b7e2344749f49cf53a27571b7",
                "64827b4325734704ab273a3c4690b2c7",
                "7e434c1abc00409ca22454c34f0227b4",
                "072b31a6c74e4518afca8e2012d72a59"]


#  欢迎功能
def welcome():
    print(" 聊天机器人 ".center(50, "*"))
    menu = {
        "1": ["登陆账户", login],
        "2": ["聊天功能", chat],
        "3": ["退出", exit]
    }
    for choice in menu:
        print(choice, menu[choice][0])
    choice = input("请输入你的选择:")
    if choice.isdigit():
        if choice in menu:
            menu[choice][1]()
        else:
            print("数字输入错误!暂无对应功能,请重新输入!")
            # print("\n" * 100)
            welcome()
    else:
        print("请输入对应功能的数字!!!")
        welcome()


#  登陆功能
def login():
    username = input("请输入账号:").strip(" ")
    password = input("请输入密码:").strip(" ")
    confirm_password = input("请确认密码:").strip(" ")
    save_password = input("是否保存密码,登陆失败会自动尝试登陆(Y/N):").lower()
    if password == confirm_password:
        if save_password == "y":
            save_pwd(username, password)
        get_key.get_key(username, password)
        is_login_success(username, password)
        welcome()


#  判断是否登陆成功
def is_login_success(username, password):
    if os.path.isfile("keys.txt"):
        with open("keys.txt", "r") as f:
            if len(f.readline()) == 33:
                print("登陆成功!")
            else:
                print("登陆失败,正在尝试自动登陆...")
                for i in range(0, 5):
                    get_key.get_key(username, password)
                    if len(f.readline()) == 33:
                        print("登陆成功!")
                        break
                else:
                    print("自动登陆失败,请检查你的账号密码,重新登陆!")
                    login()


    else:
        print("两次密码输入不一致,请重新输入!")
        login()


#  聊天功能
def chat():
    if os.path.isfile("keys.txt"):
        with open("keys.txt", "r") as f:
            if len(f.readline()) == 33:
                f.seek(0)
                keys = f.read()
                keys_list = keys.split("\n")
                for key in keys_list[0:-1]:
                    while True:
                        msg = input("程序圆:")
                        rep = get_reply(msg, key)

                        if rep == "请求次数超限制!":
                            print("当前聊天次数达到最大,正在更换机器人...")
                            print("请重新输入")
                            break
                        else:
                            print("程序媛:", rep)
            else:
                pass
    else:
        for key in default_keys:
            while True:
                msg = input("程序圆:")
                rep = get_reply(msg, key)

                if rep == "请求次数超限制!":
                    print("当前聊天次数达到最大,正在更换机器人...")
                    print("请重新输入")
                    break
                else:
                    print("程序媛:", rep)


#  保存用户名密码
def save_pwd(username, password):
    with open("account.txt", "w") as f:
        f.write(username+"\n"+password)


#  处理机器人的回复
def get_reply(msg, key):
    data = json.dumps({  # 这里是需要提交给机器人的数据
        "reqType": 0,
        "perception": {
            "inputText": {
                "text": f"{msg}"  # msg是向机器人说的话
            },
        },
        "userInfo": {
            "apiKey": key,  # 图灵机器人的apikey
            "userId": "760159327"  # 用户唯一标识(随便填的)
        }
    })

    resp = requests.post(API, data=data)  # 请求数据
    news = json.loads(resp.text)  # 将得到的数据转换为json格式
    replay = news["results"][0]["values"]["text"]  # 获取机器人的回复
    resp.close()  # 关闭请求
    return replay.strip("")


#  主功能
if __name__ == '__main__':
    welcome()

get_key.py代码详情:

import requests
from lxml import etree


def get_key(username, password):
# 用于存放图灵机器人官网的个人账号密码
data = {
"username": username, # 用户名
"password": password # 密码
}

resp = requests.session() # 构建会话
resp.post("http://sso.tuling123.com/sso-api/login/p/1", data) # 提交登陆请求
html = resp.get("http://www.tuling123.com/member/robot/index.jhtml") # 获取登录后主页面
page = html.text
resp.close() # 关闭请求
html1 = etree.HTML(page)
keys = html1.xpath("/html/body/div[5]/div[4]/ul/li/div/p/text()") # 获取已创建机器人的apikey
# 处理得到的apikey
key_list = []
for key in keys:
key = key.split(":")[-1]
key_list.append(key)

with open("keys.txt", mode="w") as f:
for i in key_list:
f.write(i+"\n") # 将key写入文件

图灵机器人V1.2

提取码:复制
解压码:复制

Python教程原创教程

Python调用图灵机器人实现人机对话:七夕再也不怕没人聊天

2021-8-14 12:48:07

技术教程

WordPress教程:对象缓存介绍和使用方法

2020-12-5 11:58:07

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索