網(wǎng)易的有道智云粮坞,提供了各種 Api,一部分呢可以免費(fèi)試用侥猩。
這里使用自然語言翻譯的 Api 來寫一個(gè)簡單的翻譯軟件。
獲取 Api
首先呢抵赢,登錄有道智云拭宁,網(wǎng)易賬號可以直接登錄。
創(chuàng)建應(yīng)用
首先進(jìn)入我的應(yīng)用瓣俯,先創(chuàng)建一個(gè)應(yīng)用杰标。
進(jìn)入應(yīng)用創(chuàng)建界面:
再進(jìn)入
自然語言翻譯>創(chuàng)建一個(gè)實(shí)例
,最后再右邊綁定應(yīng)用即可彩匕。回到我的實(shí)例腔剂,點(diǎn)擊實(shí)例進(jìn)入實(shí)例詳情頁面:
查看你的 應(yīng)用ID 和 應(yīng)用密鑰,后面調(diào)用翻譯接口的時(shí)候會用到驼仪。
查看 API 文檔
要調(diào)用接口掸犬,肯定必須要知道接口地址袜漩、請求方法、參數(shù)湾碎、返回值宙攻。否則你都沒法調(diào)用。
有道智云每個(gè)接口都有非常詳細(xì)的 API 和不同原因的調(diào)用示例(畢竟是賺錢的嘛介褥,寫不清楚別人用不了)座掘,點(diǎn)這里進(jìn)入翻譯 API 文檔。
文檔有興趣的同學(xué)可以看看柔滔,這對于了解前后端開發(fā)的文檔溝通過程和理解接口測試很有幫助溢陪。
或者你可以直接搜索 Python3 示例
,下面的代碼我修改了一下睛廊,你只需要把上面你的應(yīng)用ID和應(yīng)用密鑰填進(jìn)去即可形真。
# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import hashlib
import time
YOUDAO_URL = 'https://openapi.youdao.com/api'
APP_KEY = '您的應(yīng)用ID'
APP_SECRET = '您的應(yīng)用密鑰'
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'))
運(yùn)行一下,可以看到返回的 JSON 數(shù)據(jù):
{'basic': {'exam_type': ['高中', '初中'],
'explains': ['n. 測驗(yàn)超全,考查咆霜;測試;檢驗(yàn)嘶朱;化驗(yàn)', 'v. 測驗(yàn)蛾坯;化驗(yàn),檢查见咒;試驗(yàn)偿衰,測試;考驗(yàn)'],
'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': ['測試', '測驗(yàn)', '試驗(yàn)', '考試']},
{'key': 'Test engineer',
'value': ['測試工程師', '測試員', '軟件測試工程師', '產(chǎn)品試驗(yàn)工程師']},
{'key': 'stress test', 'value': ['壓力測試', '應(yīng)力測試', '負(fù)荷試驗(yàn)', '壓力試驗(yàn)']}],
'webdict': {'url': 'http://m.youdao.com/dict?le=eng&q=test'}}
返回內(nèi)容很復(fù)雜改览,我相信業(yè)務(wù)繁忙的各位也沒太多心思細(xì)看下翎。(詳細(xì)的說明可以查看接口文檔)
這里我們只做簡單的翻譯,所以只取其中的 translation
部分宝当。
簡單的設(shè)計(jì)界面
簡單的翻譯视事,先不要考慮那么多,能輸入要翻譯的內(nèi)容庆揩,并且把翻譯后的輸出即可俐东。
這里只設(shè)計(jì)了兩行:
- 第一行,一個(gè)多行文本輸入?yún)^(qū)域订晌,一個(gè)翻譯按鈕虏辫;
- 第二行,一個(gè) Frame 框架內(nèi)部嵌套一個(gè)多行文本輸出區(qū)域(最能查看不能修改)锈拨。
在 PySimpleGUI 中砌庄,Multiline
可以作為多行文本輸入?yún)^(qū)域,也可以作為多行文本輸出區(qū)域。
sg.Multiline('')
之前一篇文章也演示過 PySimpleGUI 的基本用法娄昆, PySimpleGUI 中布局使用的是列表佩微。把頁面元素都加到列表中,在把列表加入窗口布局萌焰。
如果用到 Frame哺眯,F(xiàn)rame 本身也是一個(gè)列表,要先把元素加到 Frame 的列表中扒俯,再把 Frame 加入到整體布局列表中奶卓,最后再把整體布局列表加入窗口。
simple_frame = [[sg.Multiline('', key='_RES_', disabled=True)]]
layout = [[sg.Multiline('', key='_Q_', focus=True), sg.Button('翻譯', key='_TRANS_')],
[sg.Frame('翻譯結(jié)果', simple_frame, title_color='gray')],]
翻譯按鈕的 _key='TRANS_'
陵珍,那么當(dāng)窗口事件為 _TRANS_
時(shí)就調(diào)用有道翻譯接口寝杖,把從多行文本key='_Q_'
中讀取的文本內(nèi)容傳遞過去违施,然后把返回結(jié)果中的 translation
部分展示在下方 Frame 中的輸出文本中互纯。
import PySimpleGUI as sg
import os, sys
from yodao import connect # 把上面的有道獲取的代碼保存為 yodao.py
# 構(gòu)造 Frame
simple_frame = [[sg.Multiline('', key='_RES_', disabled=True)]]
# 構(gòu)造整體窗口布局
layout = [[sg.Multiline('', key='_Q_', focus=True), sg.Button('翻譯', key='_TRANS_')],
[sg.Frame('翻譯結(jié)果', simple_frame, title_color='gray')]]
# 生成窗口
window = sg.Window('翻譯小工具', layout)
while True:
event, value = window.Read()
# 如果點(diǎn)擊翻譯按鈕
if event == '_TRANS_':
result = connect(value.get('-Q-')).get('translation')[0]
# 把翻譯結(jié)果展示到Frame中的文本區(qū)域
window['_RES_'].update(result)
if event is None:
break
window.close()
運(yùn)行結(jié)果如下:
??,沒有做任何異常處理和穩(wěn)定性代碼磕蒲,請自行添加留潦。