zwgao commited on
Commit
5a79bd6
1 Parent(s): b6acdce
api.py ADDED
File without changes
apidemo/TranslateDemo.py ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import os
3
+ from .utils.AuthV3Util import addAuthParams
4
+
5
+ # 您的应用ID
6
+ APP_KEY = os.environ.get("APP_KEY",None)
7
+ # 您的应用密钥
8
+
9
+ APP_SECRET = os.environ.get("APP_SECRET",None)
10
+
11
+
12
+ def createRequest(msq):
13
+ '''
14
+ note: 将下列变量替换为需要请求的参数
15
+ '''
16
+ q = msq
17
+ lang_from = 'auto'
18
+ lang_to = 'en'
19
+ # vocab_id = '您的用户词表ID'
20
+
21
+ data = {'q': q, 'from': lang_from, 'to': lang_to}
22
+
23
+ addAuthParams(APP_KEY, APP_SECRET, data)
24
+
25
+ header = {'Content-Type': 'application/x-www-form-urlencoded'}
26
+ res = doCall('https://openapi.youdao.com/api', header, data, 'post')
27
+ print(str(res.content, 'utf-8'))
28
+ return str(res.content, 'utf-8')
29
+
30
+
31
+ def doCall(url, header, params, method):
32
+ if 'get' == method:
33
+ return requests.get(url, params)
34
+ elif 'post' == method:
35
+ return requests.post(url, params, header)
36
+
37
+ # 网易有道智云翻译服务api调用demo
38
+ # api接口: https://openapi.youdao.com/api
39
+ if __name__ == '__main__':
40
+ createRequest()
apidemo/__pycache__/TranslateDemo.cpython-310.pyc ADDED
Binary file (1.03 kB). View file
 
apidemo/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (147 Bytes). View file
 
apidemo/utils/AuthV3Util.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib
2
+ import time
3
+ import uuid
4
+
5
+ '''
6
+ 添加鉴权相关参数 -
7
+ appKey : 应用ID
8
+ salt : 随机值
9
+ curtime : 当前时间戳(秒)
10
+ signType : 签名版本
11
+ sign : 请求签名
12
+
13
+ @param appKey 您的应用ID
14
+ @param appSecret 您的应用密钥
15
+ @param paramsMap 请求参数表
16
+ '''
17
+ def addAuthParams(appKey, appSecret, params):
18
+ q = params.get('q')
19
+ if q is None:
20
+ q = params.get('img')
21
+ salt = str(uuid.uuid1())
22
+ curtime = str(int(time.time()))
23
+ sign = calculateSign(appKey, appSecret, q, salt, curtime)
24
+ params['appKey'] = appKey
25
+ params['salt'] = salt
26
+ params['curtime'] = curtime
27
+ params['signType'] = 'v3'
28
+ params['sign'] = sign
29
+
30
+ '''
31
+ 计算鉴权签名 -
32
+ 计算方式 : sign = sha256(appKey + input(q) + salt + curtime + appSecret)
33
+ @param appKey 您的应用ID
34
+ @param appSecret 您的应用密钥
35
+ @param q 请求内容
36
+ @param salt 随机值
37
+ @param curtime 当前时间戳(秒)
38
+ @return 鉴权签名sign
39
+ '''
40
+ def calculateSign(appKey, appSecret, q, salt, curtime):
41
+ strSrc = appKey + getInput(q) + salt + curtime + appSecret
42
+ return encrypt(strSrc)
43
+
44
+
45
+ def encrypt(strSrc):
46
+ hash_algorithm = hashlib.sha256()
47
+ hash_algorithm.update(strSrc.encode('utf-8'))
48
+ return hash_algorithm.hexdigest()
49
+
50
+
51
+ def getInput(input):
52
+ if input is None:
53
+ return input
54
+ inputLen = len(input)
55
+ return input if inputLen <= 20 else input[0:10] + str(inputLen) + input[inputLen - 10:inputLen]
apidemo/utils/AuthV4Util.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib
2
+ import time
3
+ import uuid
4
+
5
+ '''
6
+ 添加鉴权相关参数 -
7
+ appKey : 应用ID
8
+ salt : 随机值
9
+ curtime : 当前时间戳(秒)
10
+ signType : 签名版本
11
+ sign : 请求签名
12
+
13
+ @param appKey 您的应用ID
14
+ @param appSecret 您的应用密钥
15
+ @param paramsMap 请求参数表
16
+ '''
17
+ def addAuthParams(appKey, appSecret, params):
18
+ salt = str(uuid.uuid1())
19
+ curtime = str(int(time.time()))
20
+ sign = calculateSign(appKey, appSecret, salt, curtime)
21
+ params['appKey'] = appKey
22
+ params['salt'] = salt
23
+ params['curtime'] = curtime
24
+ params['signType'] = 'v4'
25
+ params['sign'] = sign
26
+
27
+
28
+ '''
29
+ 计算鉴权签名 -
30
+ 计算方式 : sign = sha256(appKey + input(q) + salt + curtime + appSecret)
31
+ @param appKey 您的应用ID
32
+ @param appSecret 您的应用密钥
33
+ @param salt 随机值
34
+ @param curtime 当前时间戳(秒)
35
+ @return 鉴权签名sign
36
+ '''
37
+ def calculateSign(appKey, appSecret, salt, curtime):
38
+ strSrc = appKey + salt + curtime + appSecret
39
+ return encrypt(strSrc)
40
+
41
+
42
+ def encrypt(strSrc):
43
+ hash_algorithm = hashlib.sha256()
44
+ hash_algorithm.update(strSrc.encode('utf-8'))
45
+ return hash_algorithm.hexdigest()
apidemo/utils/WebSocketUtil.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sys
2
+ import threading
3
+ import urllib.parse
4
+
5
+ import websocket
6
+
7
+ """
8
+ 初始化websocket连接
9
+ """
10
+ def init_connection(url):
11
+ ws = websocket.WebSocketApp(url, on_open=ClientThread.on_open, on_message=ClientThread.on_message,
12
+ on_close=ClientThread.on_closed, on_error=ClientThread.on_error)
13
+ # 异步监听返回结果
14
+ client = ClientThread(ws=ws)
15
+ client.start()
16
+ return client
17
+
18
+
19
+ """
20
+ 初始化websocket连接, 并附带相关参数
21
+ """
22
+ def init_connection_with_params(url, params):
23
+ url_prams_builder = urllib.parse.urlencode(params)
24
+ url = url + '?' + url_prams_builder
25
+ return init_connection(url)
26
+
27
+
28
+ """
29
+ 发送text message
30
+ """
31
+ def send_text_message(ws, message):
32
+ ws.send(message)
33
+ print("send text message: " + message)
34
+
35
+
36
+ """
37
+ 发送binary message
38
+ """
39
+ def send_binary_message(ws, message):
40
+ ws.send(message, websocket.ABNF.OPCODE_BINARY)
41
+ print("send binary message length: " + str(len(message)))
42
+
43
+
44
+ class ClientThread(threading.Thread):
45
+ def __init__(self, ws):
46
+ threading.Thread.__init__(self)
47
+ self.ws = ws
48
+ ws.is_connect = False
49
+
50
+ def run(self):
51
+ self.ws.run_forever()
52
+
53
+ def return_is_connect(self):
54
+ return self.ws.is_connect
55
+
56
+ def on_message(ws, message):
57
+ print("received message: " + message)
58
+ # 该判断方式仅用作demo展示, 生产环境请使用json解析
59
+ if "\"errorCode\":\"0\"" not in message:
60
+ sys.exit()
61
+
62
+ def on_open(ws):
63
+ print("connection open")
64
+ ws.is_connect = True
65
+
66
+ def on_closed(ws, close_status_code, close_msg):
67
+ if not close_status_code:
68
+ close_status_code = 'None'
69
+ if not close_msg:
70
+ close_msg = 'None'
71
+ print("connection closed, code: " + close_status_code + ", reason: " + close_msg)
72
+
73
+ def on_error(ws, error):
74
+ print(error)
apidemo/utils/__init__.py ADDED
File without changes
apidemo/utils/__pycache__/AuthV3Util.cpython-310.pyc ADDED
Binary file (1.16 kB). View file
 
apidemo/utils/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (153 Bytes). View file
 
app.py ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import gradio as gr
3
+ import json
4
+ # api_key = os.environ.get('OPENAI_KEY', None)
5
+ from apidemo.TranslateDemo import createRequest
6
+
7
+ def get_responce(msg):
8
+
9
+ result_str = createRequest(msg)
10
+ result = json.loads(result_str)
11
+ return result["translation"][0]
12
+ # pass
13
+
14
+ with gr.Blocks() as demo:
15
+ chatbot = gr.Chatbot()
16
+ msg = gr.Textbox()
17
+ clear = gr.ClearButton([msg, chatbot])
18
+
19
+ def respond(message, chat_history):
20
+ bot_message = get_responce(message)
21
+ chat_history.append((message, bot_message))
22
+ # time.sleep(2)
23
+ return "", chat_history
24
+
25
+ msg.submit(respond, [msg, chatbot], [msg, chatbot])
26
+
27
+ if __name__ == "__main__":
28
+ demo.launch()
29
+
30
+
31
+
32
+
33
+
34
+
35
+
requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ websocket