17岁高中少年利用Python自制Python API接口

115 阅读6分钟

准备环境

pip install flask 
pip install requests

导入模块

import string
import random
from flask import request
from flask import Flask
import requests
import os

Python代码

app = Flask(__name__)


file_name = [] #存储所有文件名

@app.route('/',methods=['GET'])
def home_index():
    if request.method == 'GET':
        names = 'Welcome to the Struggle Junior API interface, you need to contact QQ:3266986273.'
        return {'code':200 , 'message':names.encode('utf-8').decode('unicode_escape')}
    else:
        return {'code': 403, 'message': 'Request failed, website lost 403!'}

#注册用户
@app.route('/python_user_zhu',methods=['POST'])
def user_name():
    qq = request.form['qq'] #要注册的QQ账号
    names = request.form['user_name']
    worlds = request.form['user_word']
    d = os.chdir(r"c:\Users\Administrator\Desktop\python\qq")
    os.mkdir(f'{qq}')
    k = os.path.exists(f'{qq}')
    print(k)
    if k == "True":
        os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}".format(f'{k}',qq))
    elif k == "False":
        os.chdir(r"c:\Users\Administrator\Desktop\python\qq")
        os.mkdir(f'{qq}')
        os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}".format(qq))
    os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}".format(qq))
    os.mkdir('账号')
    dsd = os.path.exists('账号')
    if dsd == "True":
        os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}{}\账号".format(qq, qq))
    elif dsd == "False":
        os.mkdir('账号')
        os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}\账号".format(qq))
    os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}\账号".format(qq))
    with open(f"{qq}.txt",'w',encoding='utf-8') as f :
        k = f.write(f'{names}\n{worlds}\n{qq}')
        f.close()
    with open(f'{qq}.txt','r',encoding='utf-8') as fd :
        s = fd.readlines()
        a = {'code': 200, 'message': f'注册成功.','data':{'用户名':f'{s[0]}','密码':f'{s[1]}','qq':f'{s[2]}'}}
        return a

#登录用户
@app.route('/python_user_login',methods=['POST'])
def user_names():
    qq = request.form['qq']
    word = request.form['user_word']
    #读取python里面qq目录文件
    os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}\账号".format(qq))

    dtd = []
    dsd = []
    with open(f'{qq}.txt','r',encoding='utf-8') as f :
        d = f.readlines() #获取账号密码
        count = -1

        #循环检测
        for k in d :
            count += 1
            a = k.strip()
            if count == 2:
                if qq == a :
                    dtd.append('qq正确')
                else:
                    dtd.append('qq不正确')
            elif count == 1:
                if word == a :
                    dsd.append('密码正确')
                else:
                    dtd.append('qq不正确')
            else:
                continue

        if dtd[0] == 'qq正确' and dsd[0] == '密码正确':
            a = {'code':200,'message':'登录成功'}
            return a
        else:
            a = {'code':200,'message':'登录失败'}
            return a



#创建Python文件
@app.route('/python_file',methods=['POST'])
def file():
    qq = request.form['qq']
    p = request.form['name']
    aks = ''
    os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}".format(f'{qq}'))
    os.mkdir(f'key')
    os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}\key".format(f'{qq}'))
    try :
        # 创建key
        with open(f'{p}.txt', 'w', encoding='utf-8') as fs:
            aks = f'{"".join(random.sample(string.ascii_lowercase + string.digits, 18))}'
            fs.write(aks)
            fs.close()
        # 创建是谁创建的
        os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}".format(f'{qq}'))
        os.mkdir(f'{qq}')
        os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}{}".format(f'{qq}',f'{qq}'))
        os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}\key".format(qq))

        os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}{}".format(f'{qq}', f'{qq}'))
        with open(f'{p}.py', 'w', encoding='utf-8') as f:
            if f'{p}.py'.strip()[0:-3] != '':  # 去除空格 判断是否输入内容为空
                a = {'code': 200, 'message': f'创建{p}文件成功咯.', 'data': {'key': aks}}
                return a
            else:  # 否则
                f.close()
                os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}{}".format(f'{qq}', f'{p}'))
                os.remove(f'{p}.py')
                os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}\key".format(f'{qq}'))
                os.remove(f'{p}.txt')
                a = {'code': 200, 'message': f'创建{p}文件失败,文件名不能为空.', 'data': {'key': 'not fand key'}}
                return a
    except FileNotFoundError :
        a = {'code': 404, 'message':'请先注册账号,再进行此操作.'}
        return a

#运行Python文件代码 返回执行结果 - 状态码 : 200
@app.route('/python_run_file',methods=['POST'])
def run():
    q = request.form['qq']
    d = request.form['key']

    p = request.form['name']
    s = request.form['text']

    ts = []
    os.chdir(r"C:\Users\Administrator\Desktop\python\qq{}\key".format(f'{q}'))
    with open(f'{p}.txt','r',encoding='utf-8') as fd:
        dd = fd.readlines()
        ts.append(dd[0].strip())
    fd.close()
    os.chdir(r"C:\Users\Administrator\Desktop\python\qq{}{}".format(f'{q}',f'{q}'))
    with open(f'{p}.py','w',encoding='utf-8') as f:
        for k in ts:
            if d == k:
                f.write(s)
                a = {'code':200,'message':f'{s}','data':'python解释器由奋斗少年制作哦!'}
                return a
            else:
                a = {'code':200,'message':f'写入代码失败','data':'python解释器由奋斗少年制作哦!'}
                return a

#返回当前qq目录下创建的文件
@app.route('/python_my_list_name',methods=['POST'])
def my_list_names():

    q = request.form['qq']

    os.chdir(r"C:\Users\Administrator\Desktop\python\qq{}{}".format(q,q))
    a = {'code': 200, 'message': f'{os.listdir()}', 'data': 'python解释器由奋斗少年制作哦!'}
    return a


#调试一段代码
@app.route('/python_run_name',methods=['POST'])
def run_file_names():
    p = request.form['name']
    s = request.form['text']
    headers = {
        "Authorization": "Token 0123456-789a-bcde-f012-3456789abcde",
        "content-type": "application/"
    }

    data = {
        "files": [
            {
                "name": f"{p}.py",
                "content": s
            }
        ],
        "stdin": "",
        "command": ""
    }
    res = requests.post(url='https://glot.io/run/python?version=latest', headers=headers, json=data)
    a = {'code':200,'message':res.json(),'data':'python解释器由奋斗少年制作哦!'}
    return a

#运行整个Python文件
@app.route('/python_run_names',methods=['POST'])
def run_file_namesd():
    p = request.form['name']
    q = request.form['qq']
    keys = request.form['key']

    os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}{}".format(q,q))
    headers = {
        "Authorization": "Token 0123456-789a-bcde-f012-3456789abcde",
        "content-type": "application/"
    }
    kw = ''

    quan = []
    kes = []
    os.chdir(r"C:\Users\Administrator\Desktop\python\qq{}\key".format(q))
    with open(f'{p}.txt','r',encoding='utf-8') as fs:
        s = fs.readlines()
        quan.append(s[2].strip())
        kes.append(s[0].strip())
    fs.close()
    os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}{}".format(q,q))

    odd = ''

    with open(f'{p}.py','r',encoding='utf-8')as ds :
        for d in kes:
            if keys == d :
                odd = 'key验证正确'
            else:
                odd = 'key验证失败'
        for d in quan:
            if q == d and odd == 'key验证正确':
                ks = ds.read()
            else:
                pass
    data = {
        "files": [
            {
                "name": f"{p}.py",
                "content": ks
            }
        ],
        "stdin": "",
        "command": ""
    }
    res = requests.post(url='https://glot.io/run/python?version=latest', headers=headers, json=data)
    if odd == 'key验证正确':
        a = {'code': 200, 'message': res.json(), 'data': '您的拥有权已经验证成功'}
        return a
    else:
        a = {'code': 200, 'message': res.json(), 'data': '您未拥有打开文件权限已经验证成功'}
        return a

#打开你写的python文件代码
@app.route('/python_read_names',methods=['POST'])
def read_file_namesd():
    p = request.form['name']
    keys = request.form['key']
    q = request.form['qq']
    os.chdir(r"c:\Users\Administrator\Desktop\python")
    m = ''
    count = 0
    d = []
    ds = []
    l = ''
    os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}\key".format(q))
    with open(f'{p}.txt','r',encoding='utf-8') as fs:
        l = fs.read()
        ds.append(l)
        fs.close()
    os.chdir(r"c:\Users\Administrator\Desktop\python\qq{}{}".format(q,q))
    with open(f'{p}.py','r',encoding='utf-8') as fd:
        if keys == ds[0]:
            m = fd.read()
            a = {'code':200,'message':'key正确','data':m}
            return a
        else:
            a = {'code':200,'message':'key不正确.'}
            return a

#查询所有python文件
@app.route('/python_list_file',methods=['GET'])
def list_file():
    os.chdir(r"c:\Users\Administrator\Desktop\python")
    ac = os.listdir()
    ts = len(ac)
    a = {'code':200,'message':ac,'number':ts}
    return a

#删除Python文件用的
@app.route('/python_del_file',methods=['post'])
def del_file():
    mos = []
    mosd = []
    os.chdir(r"c:\Users\Administrator\Desktop\python")
    p = request.form['name']
    keys = request.form['key']
    os.chdir(r"c:\Users\Administrator\Desktop\python\key")
    with open(f'{p}.txt', 'r', encoding='utf-8') as f:
        try :
            if keys == f.read():
                os.chdir(r"c:\Users\Administrator\Desktop\python")
                s = f'{p}.py'
                mos.append(s)
                os.remove(s)
                f.close()
                os.chdir(r"c:\Users\Administrator\Desktop\python\key")
                d = f'{p}.txt'
                mosd.append(d)
                os.remove(d)
                a = {'code': 200, 'data':{f'{p}.py':'删除成功',f'{p}.txt':'删除成功','message':'技术由奋斗少年制作.'}}
                return a
        except TypeError:
            a = {'code': 200, 'data': {f'{p}.py': '删除失败', f'{p}.txt': '删除失败', 'message': 'key不正确'}}
            return a

#查询已经安装的pyhton库
@app.route('/python_list_pip',methods=['GET'])
def list_pips():
    a = os.chdir(r"C:\Users\Administrator\PycharmProjects\我是神明\venv\Lib\site-packages")
    filelist = os.listdir(a)
    a = {'code':200,'message':filelist}
    return a

#查询相应的Python库是否安装成功
@app.route('/python_query_pip',methods=['POST'])
def list_query_pips():
    names = request.form['name']
    a = os.chdir(r"C:\Users\Administrator\PycharmProjects\我是神明\venv\Lib\site-packages")
    filelist = os.listdir(a)
    if names in filelist:
        a = {'code':200,'message':names + '库存在.'}
        return a
    else:
        a = {'code':200,'message':names + '库不存在.'}
        return a

#开始下载相应的Python库
@app.route('/python_pip_install',methods=['POST'])
def list_pip_install():
    names = request.form['name']
    os.system(f'pip install {names}')
    a = {'code':200,'message':names + '库正在安装中.'}
    return a

#清空python文件代码
@app.route('/python_clear_py',methods=['POST'])
def python_clear_pys():
    names = request.form['name']
    keys = request.form['key']
    osd = ''
    os.chdir(r"c:\Users\Administrator\Desktop\python\key")
    with open(f'{names}.txt','r',encoding='utf-8') as f:
        osd = f.read()
        f.close()
    os.chdir(r"c:\Users\Administrator\Desktop\python")
    with open(f'{names}.py','w',encoding='utf-8') as d:
        if keys == osd:
            d.write('')
            a = {'code':200,'message':f'已经删除了{names}.py文件所有内容.'}
            return a
        else:
            a = {'code':200,'message':f'key不正确.'}
            return a


#这里是程序的主入口 - port : 88 host : 0.0.0.0 已经开启内网测试
if __name__ == '__main__':
    # 设置host,88。threaded=True 代表开启多线程
    app.run(host='0.0.0.0', port=88, threaded=True)

服务器与本机访问机制

本机的话访问IP 127.0.0.1:程序设置的端口号/访问POST目录

服务器的话建议购买一个Windows系统2008的,然后安装Python环境,将代码粘贴进去.

无法请求接口,各种报错.

1.png

2.png

3.png

全部搞好开始操作

Windows系统桌面创建一个名字叫Python的文件夹里面套一个qq文件夹然后运行服务端打开APIFOX测试就行.

4.png

5.png

6.png

7.png

用途

功能太多了我就不一个一个发了,你们自行测试吧,可以用于Q群机器人,WX机器人,博客,论坛之类.