tianyun 1 년 전
부모
커밋
31083d7011
14개의 변경된 파일439개의 추가작업 그리고 185개의 파일을 삭제
  1. 13 0
      flink.py
  2. 0 37
      flomo.py
  3. 43 0
      mysql_mock_insert.py
  4. 12 0
      pro_tag/data.json
  5. 10 0
      pro_tag/index.html
  6. 59 0
      pro_tag/main.py
  7. 42 0
      project-test/大树-模型平台/test_train.py
  8. 57 0
      test_cpu_app.py
  9. 8 10
      tmp/kafka/KafkaPushTest.py
  10. 2 5
      tmp/kafka/kafkaReceiveTest.py
  11. 22 113
      tmp4.py
  12. 110 19
      tmp5.py
  13. 8 1
      tmp_app.py
  14. 53 0
      zhipu.py

+ 13 - 0
flink.py

@@ -120,6 +120,19 @@ class MyTest(unittest.TestCase):
         --redisIp redis-master.rxdpdev.svc.k5.bigtree.zone
         --redisPassword SB6vdem
         """))
+    def test_upload_start_sl(self):
+        flink = MyFlink("https://flink.rxdpsl.k5.bigtree.tech")
+        jar_id = flink.upload_jar("/Users/alvin/bigtree/rxdp-dm-jobs/rxdp-dm-jobs-flink/target/rxdp-dm-jobs-flink-1.6.0-SNAPSHOT.jar")
+        print(f"jar_id: {jar_id}")
+        flink.stop_all()
+        print(flink.start_job(jar_id, """
+        --kafkaServer kafka-0.kafka-headless.rxdpsl.svc.k5.bigtree.zone:9092,kafka-1.kafka-headless.rxdpsl.svc.k5.bigtree.zone:9092,kafka-2.kafka-headless.rxdpsl.svc.k5.bigtree.zone:9092
+        --esServer elasticsearch-master.rxdpsl.svc.k5.bigtree.zone
+        --esPort 9200 
+        --pythonUrl http://py-invoke-svc:8000
+        --redisIp redis-master.rxdpsl.svc.k5.bigtree.zone
+        --redisPassword SB6vdem
+        """))
 
 if __name__ == '__main__':
     MyTest.test_upload_start()

+ 0 - 37
flomo.py

@@ -1,37 +0,0 @@
-import requests
-import time
-
-headers = {
-    'authority': 'flomoapp.com',
-    'accept': 'application/json, text/plain, */*',
-    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
-    'authorization': 'Bearer 1214040|p4pmlD8OOqTlzj7hiwkyAjWb6Q9HyQPyWnR322t5',
-    'cache-control': 'no-cache',
-    'content-type': 'application/json;charset=UTF-8',
-    'origin': 'https://v.flomoapp.com',
-    'pragma': 'no-cache',
-    'referer': 'https://v.flomoapp.com/',
-    'sec-ch-ua': '"Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"',
-    'sec-ch-ua-mobile': '?0',
-    'sec-ch-ua-platform': '"macOS"',
-    'sec-fetch-dest': 'empty',
-    'sec-fetch-mode': 'cors',
-    'sec-fetch-site': 'same-site',
-    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
-}
-timestamp = int(time.time())
-json_data = {
-    'content': '<p>test2</p>',
-    'created_at': timestamp,
-    'source': 'web',
-    'file_ids': [],
-    'tz': '8:0',
-    'timestamp': timestamp,
-    'api_key': 'flomo_web',
-    'app_version': '2.0',
-    'webp': '1',
-    'sign': '3c2b16926b7ecdaeb58bac6c272f044b',
-}
-
-response = requests.put('https://flomoapp.com/api/v1/memo', headers=headers, json=json_data)
-print(response.text)

+ 43 - 0
mysql_mock_insert.py

@@ -0,0 +1,43 @@
+import random
+
+import pymysql
+
+# 批量模拟数据并插入mysql数据库
+
+# 建立数据库连接
+connection = pymysql.connect(
+    host='mysql.aimpdev.svc.k5.bigtree.zone',
+    user='test_user',
+    password='tmOxmmc+3jznq2cX',
+    database='aimp_model',
+    cursorclass=pymysql.cursors.DictCursor
+)
+
+try:
+    with connection.cursor() as cursor:
+        # 生成并执行插入语句
+        for _ in range(1000):
+            age = random.randint(18, 65)
+            workclass = random.choice(['Private', 'Self-emp-not-inc', 'Self-emp-inc', 'Federal-gov', 'Local-gov', 'State-gov', 'Without-pay', 'Never-worked'])
+            fnlwgt = random.randint(10000, 500000)
+            education = random.choice(['Bachelors', 'Masters', 'Doctorate', 'Some-college', 'HS-grad', 'Assoc-voc', 'Assoc-acdm', 'Prof-school'])
+            education_num = random.randint(1, 16)
+            marital_status = random.choice(['Married-civ-spouse', 'Divorced', 'Never-married', 'Separated', 'Widowed', 'Married-spouse-absent', 'Married-AF-spouse'])
+            occupation = random.choice(['Tech-support', 'Craft-repair', 'Other-service', 'Sales', 'Exec-managerial', 'Prof-specialty', 'Handlers-cleaners', 'Machine-op-inspct'])
+            happy = random.randint(0, 1)
+            birth_date = f"{random.randint(1950, 2005)}-{random.randint(1, 12):02d}-{random.randint(1, 28):02d}"
+
+            insert_query = f"INSERT INTO model_train_set (age, workclass, fnlwgt, education, education_num, marital_status, occupation, happy, birth_date) VALUES ({age}, '{workclass}', {fnlwgt}, '{education}', {education_num}, '{marital_status}', '{occupation}', {happy}, '{birth_date}')"
+            cursor.execute(insert_query)
+
+    # 提交事务
+    connection.commit()
+    print("数据插入成功!")
+
+except pymysql.Error as e:
+    print("数据库错误:", e)
+
+finally:
+    # 关闭数据库连接
+    connection.close()
+    print("数据库连接已关闭!")

+ 12 - 0
pro_tag/data.json

@@ -0,0 +1,12 @@
+{
+  "aimp": [
+    {
+      "name": "train",
+      "path": "/Users/alvin/bigtree/aimp-train"
+    },
+    {
+      "name": "aimp-manager",
+      "path": "/Users/alvin/bigtree/aimp-manager"
+    }
+  ]
+}

+ 10 - 0
pro_tag/index.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+
+</body>
+</html>

+ 59 - 0
pro_tag/main.py

@@ -0,0 +1,59 @@
+import os
+import sys
+import time
+from pathlib import Path
+
+import uvicorn
+import subprocess
+
+from fastapi import FastAPI, UploadFile, File, Form
+from fastapi import Request
+from fastapi.middleware.cors import CORSMiddleware
+from starlette.middleware.sessions import SessionMiddleware
+from starlette.responses import JSONResponse, RedirectResponse, FileResponse
+
+# =============== 基础配置 ===============
+
+app = FastAPI(title="project name ", description="通用系统 ", version="v 0.0.0")
+
+# 添加 session 中间键,使项目中可以使用session
+app.add_middleware(SessionMiddleware, secret_key='123456hhh')
+app.add_middleware(
+    CORSMiddleware,
+    allow_origins=["*", ],
+    allow_credentials=True,
+    allow_methods=["*"],
+    allow_headers=["*"],
+)
+
+
+@app.exception_handler(Exception)
+async def validation_exception_handler(request, exc):
+    """请求校验异常捕获; application/json """
+    return JSONResponse({'message': "服务器内部错误", 'status_code': 500})
+
+
+@app.middleware("http")
+async def add_process_time_header(request: Request, call_next):
+    """接口响应中间键; 当前只支持 http 请求"""
+    start_time = time.time()
+    response = await call_next(request)
+    process_time = time.time() - start_time
+    response.headers["API-Process-Time"] = f"{process_time} seconds"
+    return response
+
+
+# =============== 代码 ===============
+
+@app.get("/getDataFromJson")
+def get_data_from_json():
+    # 读取本地data.json,获取一级列表
+    import json
+    with open('data.json', 'r') as f:
+        data = json.load(f)
+    return data
+
+
+if __name__ == '__main__':
+    # uvicorn call_sh:app --reload --port 19999
+    uvicorn.run(app='main:app', host="0.0.0.0", port=9999, reload=True)

+ 42 - 0
project-test/大树-模型平台/test_train.py

@@ -0,0 +1,42 @@
+import json
+import unittest
+
+import requests
+
+
+def print1(obj):
+    print(json.dumps(obj, indent=4, ensure_ascii=False))
+
+
+def get_token():
+    headers = {
+        'authority': 'aimp.aimpdev.k5.bigtree.tech',
+        'accept': 'application/json, text/plain, */*',
+        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
+    }
+    json_data = {
+        'username': 'lzq',
+        'password': 'Aa123456',
+        'token': True,
+    }
+
+    response = requests.post('https://aimp.aimpdev.k5.bigtree.tech/api/aimp-auth-web/auth/login', headers=headers, json=json_data)
+    return response.json()['token']
+
+
+class MyTest(unittest.TestCase):
+    def setUp(self) -> None:
+        # self.host = "https://edsp.rxdpdev.k5.bigtree.tech/api/rxdp-xdata-web/rxdp-file"
+        self.host = "http://127.1:8080"
+        self.head = {
+            "Access-Token": get_token()
+        }
+
+    def test_invoke(self):
+        url = "http://127.0.0.1:8080/out_api/processInvoke/shui_test"
+        data = {"taxpayer_id": "91320585MA1NUBLR8L", "apikey": "8290b473ed6c42eaa6e1ed0ec68c1c3d", "apisecret": "n4FBN9youmxXUEIUtM9J5EfwItZGFx34nimJgv0xsP26WbLcG8QcE2HK0jzXu0cRR35Q1QDjg5HUQuApq7mimA"}
+        header = {
+            "appId": "tian_test",
+            "secret": "ZryZsW6er-kaYxSjLwJ8XtAUtP0kowhZ"
+        }
+        print(requests.post(url, json=data, headers=header).json())

+ 57 - 0
test_cpu_app.py

@@ -0,0 +1,57 @@
+from time import sleep
+
+import uvicorn as uvicorn
+from fastapi import FastAPI
+from pydantic.main import BaseModel
+from starlette.middleware.cors import CORSMiddleware
+from starlette.middleware.sessions import SessionMiddleware
+from starlette.responses import JSONResponse
+
+app = FastAPI(title="project name ", description="系统描述 ", version="v 0.0.0")
+app.add_middleware(SessionMiddleware, secret_key='123456hhh')
+app.add_middleware(
+    CORSMiddleware,
+    allow_origins=["*", ],
+    allow_credentials=True,
+    allow_methods=["*"],
+    allow_headers=["*"],
+)
+
+
+@app.exception_handler(Exception)
+def validation_exception_handler(request, exc):
+    """请求校验异常捕获; application/json """
+    return JSONResponse({'message': "服务器内部错误", 'status_code': 500})
+
+
+@app.get("/query")
+async def query(uid: str):
+    msg = f'uid为{uid}'
+    # print(f'msg: {msg}')
+    # sleep(0.1)
+    return {'success': True, 'msg': msg}
+
+
+class People(BaseModel):
+    name: str
+    age: int
+    address: str
+    salary: float
+
+
+# json body请求
+@app.post("/insert")
+def insert(people: People):
+    msg = f"名字:{people.name},年龄{people.age}"
+    return msg
+
+
+if __name__ == '__main__':
+    uvicorn.run(app='test_cpu_app:app', host="0.0.0.0", port=8000, reload=True, debug=True)
+
+# 启动命令
+# pip3 install -r /tmp/request.txt -i https://pypi.douban.com/simple/
+# pip3 install uvicorn gunicorn fastapi -i https://pypi.douban.com/simple/
+#
+# gunicorn tmp_app:app -b 0.0.0.0:8000 -w 4 -k uvicorn.workers.UvicornWorker -D  # 不支持linux运行 -w 进程数
+# uvicorn tmp_app:app --reload --host 0.0.0.0 --port 8000

+ 8 - 10
tmp/kafka/KafkaPushTest.py

@@ -1,14 +1,12 @@
 import json
-import time
+
 from kafka import KafkaProducer
 
-producer = KafkaProducer(value_serializer=lambda v: json.dumps(v).encode('utf-8'),
-                         bootstrap_servers='localhost:9092')
-index = 0
-while True:
-    msg = "相信未来----------{}------------".format(index).encode('GBK')  # 发送内容,必须是bytes类型,GBK可显示中文
-    time.sleep(5)  # 每个5秒推送一条数据
-    index += 1
-    print(msg.decode('GBK'))  # 防止中文乱码
+producer = KafkaProducer(bootstrap_servers=['10.3.150.162:9092'],
+                         value_serializer=lambda v: json.dumps(v, ensure_ascii=False).encode('utf-8'),
+                         max_request_size=20971520)
+
+
+producer.send('accounting_statement_ocr', "123")
 
-    producer.send('test', msg, partition=0)  # 发送的topic为test
+producer.flush()

+ 2 - 5
tmp/kafka/kafkaReceiveTest.py

@@ -1,12 +1,9 @@
 from kafka import KafkaConsumer
 
-# tag_sink_topic\tag_atom_topic
-consumer = KafkaConsumer('tag_flag_topic',
+consumer = KafkaConsumer('accounting_statement_ocr',
                          group_id='test115',  # 一个组消费一次
                          auto_offset_reset='latest',  # 从最新数据读取,earliest,latest
-                         bootstrap_servers=['kafka-0.kafka-headless.rxdpdev.svc.k5.bigtree.zone:9092', 'kafka-1.kafka-headless.rxdpdev.svc.k5.bigtree.zone:9092', 'kafka-2.kafka-headless.rxdpdev.svc.k5.bigtree.zone:9092']
-                         # bootstrap_servers=['kafka-0.kafka-headless.aimpdev.svc.k5.bigtree.zone:9092', 'kafka-1.kafka-headless.aimpdev.svc.k5.bigtree.zone:9092', 'kafka-2.kafka-headless.aimpdev.svc.k5.bigtree.zone:9092']
-                         # bootstrap_servers=['kafka-0.kafka-headless.aimptest.svc.k5.bigtree.zone:9092', 'kafka-1.kafka-headless.aimptest.svc.k5.bigtree.zone:9092', 'kafka-2.kafka-headless.aimptest.svc.k5.bigtree.zone:9092']
+                         bootstrap_servers=['10.3.150.162:9092']
                          )
 for msg in consumer:
     print(msg.value)

+ 22 - 113
tmp4.py

@@ -1,113 +1,22 @@
-from sqlalchemy import create_engine, text
-from sqlalchemy.orm import sessionmaker
-
-
-class SqlEngine:
-    def __init__(self, mysql_dict):
-        from urllib.parse import quote_plus
-        # 280秒重新连接一次
-        self.DBSession = sessionmaker(bind=create_engine(
-            f"mysql://{mysql_dict['user']}:{quote_plus(mysql_dict['password'])}@{mysql_dict['host']}:{mysql_dict['port']}/{mysql_dict['db']}?charset=utf8mb4&serverTimezone=Asia/Shanghai",
-            pool_size=2, max_overflow=0, pool_recycle=280))
-
-    def insert(self, item):
-        with self.DBSession() as se:
-            se.add(item)
-            se.commit()
-            return item.id
-
-    def insert_all(self, items):
-        with self.DBSession() as se:
-            se.bulk_save_objects(items)
-            se.commit()
-
-    def select_all(self, model, filters=None, order_bys=None, offset=None, limit=None):
-        """
-        :param limit:
-        :param offset:
-        :param order_bys:
-                order_by(User.name.desc()
-        :param model:
-        :param filters:
-            User.name == 'James'
-            User.name != 'James'
-            User.name.like('%e%')
-            User.name.in_(['Kobe', 'James'])
-        :return:
-        """
-        with self.DBSession() as se:
-            query = self.get_query(filters, se, model, order_bys, offset, limit)
-            return query.all()
-
-    def select_page(self, model, filters, order_bys=None, offset=0, limit=10):
-        count = self.query_count(model, filters)
-        res_list = self.query_all(model, filters, order_bys, offset, limit)
-        return {
-            "count": count,
-            "list": res_list
-        }
-
-    def select_count(self, model, filters=None):
-        with self.DBSession() as se:
-            query = self.get_query(filters, se, model)
-            return query.count()
-
-    def select_first(self, model, filters=None):
-        with self.DBSession() as se:
-            query = self.get_query(filters, se, model)
-            return query.first()
-
-    def update(self, model, filters, dict_new):
-        with self.DBSession() as se:
-            query = self.get_query(filters, se, model)
-            res = query.update(dict_new)
-            se.commit()
-            return res
-
-    @staticmethod
-    def get_query(filters, se, model, order_bys=None, offset=None, limit=None):
-        if filters is None:
-            filters = []
-        if order_bys is None:
-            order_bys = []
-        query = se.query(model)
-        for _filter in filters:
-            query = query.filter(_filter)
-        if len(order_bys) > 0:
-            query = query.order_by(*order_bys)
-        if offset:
-            query = query.offset(offset)
-        if limit:
-            query = query.limit(limit)
-        return query
-
-    def delete(self, model, filters):
-        with self.DBSession() as se:
-            query = self.get_query(filters, se, model)
-            res = query.delete()
-            se.commit()
-            return res
-
-    def select_sql(self, sql, params=None):
-        """
-        sql 查询
-        :param sql: "SELECT * FROM users WHERE age > :age"
-        :param params: {'age': 18}
-        :return:
-        """
-        with self.DBSession() as se:
-            if params:
-                stmt = text(sql).bindparams(**params)
-                result = se.execute(stmt)
-            else:
-                result = se.execute(sql)
-        return result.fetchall()
-
-    def execute_sql(self, sql, params=None):
-        with self.DBSession() as se:
-            if params:
-                stmt = text(sql).bindparams(**params)
-                result = se.execute(stmt)
-            else:
-                result = se.execute(sql)
-            return result.rowcount
+import re
+
+import requests
+
+# 获取 /etc/hosts 文件
+originData = ''
+with open('/etc/hosts', 'r') as f:
+    originData = f.read()
+# print(originData)
+
+# 正则查找,以a开头 b结尾的文本
+for i in re.findall(r'^# 地址可能会变动.*# GitHub Host End$', originData):
+    print(i)
+
+# url = 'https://gitlab.com/ineo6/hosts/-/raw/master/next-hosts'
+# response = requests.get(url)
+# data = response.text
+#
+# # 正则获取 从 "# 地址可能会变动" 开始 到 “# GitHub Host End”
+# data = data[data.find("# 地址可能会变动") + 16:data.find("# GitHub Host End")]
+#
+# print(data)

+ 110 - 19
tmp5.py

@@ -1,23 +1,114 @@
-import pymysql
-
-
-def execSql(host, port, user, password, database,sql):
-    try:
-        connection = pymysql.connect(host=host, port=port, user=user, password=password, database=database)
-        cursor = connection.cursor()
-        cursor.execute(sql)
-        result = cursor.fetchall()
-        cursor.close()
-        connection.close()
-        if result:
-            print(result)
-            return True
+def exec(obj):
+    from sqlalchemy import create_engine
+    import pandas as pd
+    from urllib.parse import quote_plus as urlquote
+    import jieba
+    from gensim import corpora, models, similarities
+
+    def cReate_dAta_cOnn():
+        engine = create_engine('mysql+pymysql://aimp_user:'+urlquote('vjeygLP76n7%UPx@')+'@rm-qsls3302.mysql.rds.aliyuncs.com:3302/bi_application')
+        return engine
+
+    def rEad_aNd_dAtaframe(sql_query):
+        engine = cReate_dAta_cOnn()
+        df = pd.read_sql(sql_query,engine)
+        engine.dispose()
+        return df
+
+    def flag(x):
+        if (x['sensoir'] == x['person']) and len(x['sensoir'])==3:
+            return 1
+        elif (x['sensoir'] == x['person']) and len(x['sensoir'])==2:
+            return 2
+        else:
+            return 3
+
+    def flag1(x):
+        if x['f1'] == 1:
+            return 1
+        else:
+            return 0
+
+    def flag2(x):
+        if (x['f1'] == 2) and x['sims']>0.8:
+            return 1
         else:
-            return False
-    except Exception as e:
-        print(f"An error occurred: {e}")
-        return False
+            return 0
 
+    def flag3(x):
+        if x['sims']>0.95:
+            return 1
+        else:
+            return 0
 
+    def cal_similar(doc_goal,ssim):
+        doc = rEad_aNd_dAtaframe('''select distinct credit_no,econ_reg_address from ext_anti_fraud_address ''')
+        doc_list = [jieba.lcut(w) for w in doc['econ_reg_address']]
+        target = [word for word in jieba.cut(doc_goal)]
+        dictionary = corpora.Dictionary(doc_list)
+        corpus = [dictionary.doc2bow(doc) for doc in doc_list]
+        doc_goal_vec = dictionary.doc2bow(target)
+        tfidf = models.TfidfModel(corpus)
+        index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features = len(dictionary.keys()))
+        sims = index[tfidf[doc_goal_vec]]
+        similary = pd.DataFrame({"risk_address": list(doc['econ_reg_address']), "sims": list(sims)})
+        similary["申请企业注册地址"] = doc_goal
+        similary_data = similary[["申请企业注册地址", "risk_address", "sims"]].drop_duplicates()
+        similary_data= similary_data[similary_data["sims"]>=ssim]
+        return similary_data
 
-print(execSql('172.16.104.106', 3322, 'cs_user', 'ceshimima.1', 'vered_system',""))
+    lcity = list(obj['city'])
+    if len(lcity)>1 and len(lcity[0])>1:
+        lcity = list(obj['city'])[0]
+    elif len(lcity)==1 and len(lcity[0])>1:
+        lcity = obj['city']
+    else:
+    obj['flag1'] = 0
+    obj['flag2'] = 0
+    obj['flag3'] = 0
+    return obj
+credit = []
+address = []
+sensoir = list(obj['oper_names'])
+if len(sensoir)<1:
+    obj['flag1'] = 0
+    obj['flag2'] = 0
+    credit.append(obj['credit_code'])
+    address.append(obj['address_'])
+    df_app = pd.DataFrame({"credit": credit,"address": address})
+    df_add = rEad_aNd_dAtaframe("select distinct credit_no,econ_reg_address from ext_anti_fraud_address where city = {}".format(lcity))
+    similary_data=cal_similar(df_app['address'].max(),0.95)
+    if similary_data.shape[0]>0:
+        obj['flag3'] = 1
+    else:
+        obj['flag3'] = 0
+    obj['similary_data']=similary_data.to_json(orient='records')
+    return obj
+else:
+    for i in sensoir:
+        credit.append(obj['credit_code'])
+        address.append(obj['address_'])
+    df_app = pd.DataFrame({"credit": credit, "sensoir": sensoir,"address": address})
+    df_add = rEad_aNd_dAtaframe("select distinct credit_no,econ_reg_address from ext_anti_fraud_address where city = {}".format(lcity))
+    lcredit =str(list(df_add['credit_no'])).replace('[','').replace(']','')
+    df_per = rEad_aNd_dAtaframe("select distinct credit_no,person from ext_anti_fraud_senior_person where credit_no in ({})".format(lcredit))
+    df_dec = pd.merge(df_app,df_per,left_on = 'sensoir',right_on = 'person',how = 'inner')
+    df_f = pd.merge(df_dec,df_add,on = 'credit_no',how = 'left')
+    if df_f.shape[0]<1:
+        obj['flag1'] = 0
+        obj['flag2'] = 0
+        obj['flag3'] = 0
+        obj['df_f']=df_f.to_json(orient='records')
+        return obj
+    else:
+        df_f['f1']=df_f.apply(flag,axis=1)
+        similary_data=cal_similar(df_f['address'].max(),0)
+        df = pd.merge(df_f,similary_data,left_on='econ_reg_address',right_on = 'risk_address',how = 'left')
+        df['flag1']=df.apply(flag1,axis=1)
+        df['flag2']=df.apply(flag2,axis=1)
+        df['flag3']=df.apply(flag3,axis=1)#保存
+        obj['df']=df.to_json(orient='records')
+        obj['flag1']=df['flag1'].max()
+        obj['flag2']=df['flag2'].max()
+        obj['flag3']=df['flag3'].max()
+        return obj

+ 8 - 1
tmp_app.py

@@ -33,6 +33,13 @@ def query(uid: str):
     msg = f'uid为{uid}'
     return {'success': True, 'msg': msg}
 
+@app.get("/test123")
+def test123():
+    # 休眠20秒
+    import time
+    time.sleep(8)
+    return 'ok'
+
 
 class People(BaseModel):
     name: str
@@ -49,7 +56,7 @@ def insert(people: People):
 
 
 if __name__ == '__main__':
-    uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)
+    uvicorn.run(app='tmp_app:app', host="127.0.0.1", port=8000, reload=True, debug=True)
 
 # 启动命令
 # pip3 install -r /tmp/request.txt -i https://pypi.douban.com/simple/

+ 53 - 0
zhipu.py

@@ -0,0 +1,53 @@
+# 智普AI
+
+import time
+
+import jwt
+
+api_key = '0cb476be333858ae0ff0ac5a87b740ff.rWBkpfSOH95ohVYG'
+
+
+def generate_token(apikey: str, exp_seconds: int):
+    try:
+        id, secret = apikey.split(".")
+    except Exception as e:
+        raise Exception("invalid apikey", e)
+
+    payload = {
+        "api_key": id,
+        "exp": int(round(time.time() * 1000)) + exp_seconds * 1000,
+        "timestamp": int(round(time.time() * 1000)),
+    }
+
+    return jwt.encode(
+        payload,
+        secret,
+        algorithm="HS256",
+        headers={"alg": "HS256", "sign_type": "SIGN"},
+    )
+
+
+# 有效期5年
+# print(generate_token(api_key, 5 * 365 * 24 * 3600))
+token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsInNpZ25fdHlwZSI6IlNJR04ifQ.eyJhcGlfa2V5IjoiMGNiNDc2YmUzMzM4NThhZTBmZjBhYzVhODdiNzQwZmYiLCJleHAiOjE4NjQzNDg1NzE5NTUsInRpbWVzdGFtcCI6MTcwNjY2ODU3MTk1NX0.nBPJiXfx7qrzZOaAL22Ch7oRl6hX80VowviE3VfiUIA'
+
+# Content-Type : application/json
+# Authorization
+
+import requests
+
+url = 'https://open.bigmodel.cn/api/paas/v4/chat/completions'
+
+headers = {
+    'Content-Type': 'application/json',
+    'Authorization': 'Bearer ' + token,
+}
+
+data = {
+    "model": "GLM-3-Turbo",
+    "messages": [
+        {"role": "user", "content": "你好"}
+    ]
+}
+response = requests.request("POST", url, headers=headers, json=data)
+print(response.text)