目錄
-
- 擷取 Api
-
- 建立應用
- 檢視 API 文檔
- 簡單的設計界面
網易的有道智雲,提供了各種 Api,一部分呢可以免費試用。
這裡使用自然語言翻譯的 Api 來寫一個簡單的翻譯軟體。

擷取 Api
首先呢,登入有道智雲,網易賬号可以直接登入。
建立應用
首先進入我的應用,先建立一個應用。
進入應用建立界面:
再進入
自然語言翻譯>建立一個執行個體
,最後再右邊綁定應用即可。
回到我的執行個體,點選執行個體進入執行個體詳情頁面:
檢視你的 應用ID 和 應用密鑰,後面調用翻譯接口的時候會用到。
檢視 API 文檔
要調用接口,肯定必須要知道接口位址、請求方法、參數、傳回值。否則你都沒法調用。
有道智雲每個接口都有非常詳細的 API 和不同原因的調用示例(畢竟是賺錢的嘛,寫不清楚别人用不了),點這裡進入翻譯 API 文檔。
文檔有興趣的同學可以看看,這對于了解前後端開發的文檔溝通過程和了解接口測試很有幫助。
或者你可以直接搜尋
Python3 示例
,下面的代碼我修改了一下,你隻需要把上面你的應用ID和應用密鑰填進去即可。
# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import hashlib
import time
YOUDAO_URL = 'https://openapi.youdao.com/api'
APP_KEY = '您的應用ID'
APP_SECRET = '您的應用密鑰'
def encrypt(signStr):
hash_algorithm = hashlib.sha256()
hash_algorithm.update(signStr.encode('utf-8'))
return hash_algorithm.hexdigest()
def truncate(q):
if q is None:
return None
size = len(q)
return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]
def connect(q):
data = {}
data['from'] = 'auto'
data['to'] = 'auto'
data['signType'] = 'v3'
curtime = str(int(time.time()))
data['curtime'] = curtime
salt = str(uuid.uuid1())
signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
sign = encrypt(signStr)
data['appKey'] = APP_KEY
data['q'] = q
data['salt'] = salt
data['sign'] = sign
return requests.post(YOUDAO_URL, data=data, headers=headers).json()
if __name__ == '__main__':
from pprint import pprint
pprint(connect('test'))
運作一下,可以看到傳回的 JSON 資料:
{'basic': {'exam_type': ['高中', '國中'],
'explains': ['n. 測驗,考查;測試;檢驗;化驗', 'v. 測驗;化驗,檢查;試驗,測試;考驗'],
'phonetic': 'test',
'uk-phonetic': 'test',
'uk-speech': 'http://openapi.youdao.com/ttsapi?q=test&langType=en&sign=24FBE24DDFAA2AD763C2B2D9BA8645A3&salt=1571234222837&voice=5&format=mp3&appKey=4aaf4f0434b6bd8e',
'us-phonetic': '',
'us-speech': 'http://openapi.youdao.com/ttsapi?q=test&langType=en&sign=24FBE24DDFAA2AD763C2B2D9BA8645A3&salt=1571234222837&voice=6&format=mp3&appKey=4aaf4f0434b6bd8e'},
'dict': {'url': 'yddict://m.youdao.com/dict?le=eng&q=test'},
'errorCode': '0',
'l': 'en2zh-CHS',
'query': 'test',
'returnPhrase': ['test'],
'speakUrl': 'http://openapi.youdao.com/ttsapi?q=test&langType=en&sign=24FBE24DDFAA2AD763C2B2D9BA8645A3&salt=1571234222837&voice=4&format=mp3&appKey=4aaf4f0434b6bd8e',
'tSpeakUrl': 'http://openapi.youdao.com/ttsapi?q=%E6%B5%8B%E8%AF%95&langType=zh-CHS&sign=A83C7003EFF5A97BAD6FE023F95D4FBE&salt=1571234222837&voice=4&format=mp3&appKey=4aaf4f0434b6bd8e',
'translation': ['測試'],
'web': [{'key': 'Test', 'value': ['測試', '測驗', '試驗', '考試']},
{'key': 'Test engineer',
'value': ['測試工程師', '測試員', '軟體測試工程師', '産品試驗工程師']},
{'key': 'stress test', 'value': ['壓力測試', '應力測試', '負荷試驗', '壓力試驗']}],
'webdict': {'url': 'http://m.youdao.com/dict?le=eng&q=test'}}
傳回内容很複雜,我相信業務繁忙的各位也沒太多心思細看。(詳細的說明可以檢視接口文檔)
這裡我們隻做簡單的翻譯,是以隻取其中的
translation
部分。
簡單的設計界面
簡單的翻譯,先不要考慮那麼多,能輸入要翻譯的内容,并且把翻譯後的輸出即可。
這裡隻設計了兩行:
- 第一行,一個多行文本輸入區域,一個翻譯按鈕;
- 第二行,一個 Frame 架構内部嵌套一個多行文本輸出區域(最能檢視不能修改)。
在 PySimpleGUI 中,
Multiline
可以作為多行文本輸入區域,也可以作為多行文本輸出區域。
之前一篇文章也示範過 PySimpleGUI 的基本用法, PySimpleGUI 中布局使用的是清單。把頁面元素都加到清單中,在把清單加入視窗布局。
如果用到 Frame,Frame 本身也是一個清單,要先把元素加到 Frame 的清單中,再把 Frame 加入到整體布局清單中,最後再把整體布局清單加入視窗。
simple_frame = [[sg.Multiline('', key='_RES_', disabled=True)]]
layout = [[sg.Multiline('', key='_Q_', focus=True), sg.Button('翻譯', key='_TRANS_')],
[sg.Frame('翻譯結果', simple_frame, title_color='gray')],]
翻譯按鈕的
_key='TRANS_'
,那麼當視窗事件為
_TRANS_
時就調用有道翻譯接口,把從多行文本
key='_Q_'
中讀取的文本内容傳遞過去,然後把傳回結果中的
translation
部分展示在下方 Frame 中的輸出文本中。
import PySimpleGUI as sg
import os, sys
from yodao import connect # 把上面的有道擷取的代碼儲存為 yodao.py
# 構造 Frame
simple_frame = [[sg.Multiline('', key='_RES_', disabled=True)]]
# 構造整體視窗布局
layout = [[sg.Multiline('', key='_Q_', focus=True), sg.Button('翻譯', key='_TRANS_')],
[sg.Frame('翻譯結果', simple_frame, title_color='gray')]]
# 生成視窗
window = sg.Window('翻譯小工具', layout)
while True:
event, value = window.Read()
# 如果點選翻譯按鈕
if event == '_TRANS_':
result = connect(value.get('-Q-')).get('translation')[0]
# 把翻譯結果展示到Frame中的文本區域
window['_RES_'].update(result)
if event is None:
break
window.close()
運作結果如下:
?,沒有做任何異常處理和穩定性代碼,請自行添加。