PySimpleGUI + 有道翻譯 寫一個(gè)簡單的翻譯軟件

網(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)定性代碼磕蒲,請自行添加留潦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辣往,隨后出現(xiàn)的幾起案子兔院,更是在濱河造成了極大的恐慌,老刑警劉巖站削,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坊萝,死亡現(xiàn)場離奇詭異,居然都是意外死亡许起,警方通過查閱死者的電腦和手機(jī)十偶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來园细,“玉大人惦积,你說我怎么就攤上這事∶推担” “怎么了狮崩?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鹿寻。 經(jīng)常有香客問我睦柴,道長,這世上最難降的妖魔是什么毡熏? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任坦敌,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恬试。我一直安慰自己窝趣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布训柴。 她就那樣靜靜地躺著哑舒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪幻馁。 梳的紋絲不亂的頭發(fā)上洗鸵,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天,我揣著相機(jī)與錄音仗嗦,去河邊找鬼膘滨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛稀拐,可吹牛的內(nèi)容都是我干的火邓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼德撬,長吁一口氣:“原來是場噩夢啊……” “哼铲咨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蜓洪,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤纤勒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后隆檀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摇天,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年恐仑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泉坐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,435評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡菊霜,死狀恐怖坚冀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鉴逞,我是刑警寧澤记某,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站构捡,受9級特大地震影響液南,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勾徽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一滑凉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦畅姊、人聲如沸咒钟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朱嘴。三九已至,卻和暖如春粗合,著一層夾襖步出監(jiān)牢的瞬間萍嬉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工隙疚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壤追,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓供屉,卻偏偏與公主長得像行冰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子贯卦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評論 2 359