天天看點

PySimpleGUI + 有道翻譯 寫一個簡單的翻譯軟體

目錄

    • 擷取 Api
      • 建立應用
      • 檢視 API 文檔
    • 簡單的設計界面

網易的有道智雲,提供了各種 Api,一部分呢可以免費試用。

這裡使用自然語言翻譯的 Api 來寫一個簡單的翻譯軟體。

PySimpleGUI + 有道翻譯 寫一個簡單的翻譯軟體

擷取 Api

首先呢,登入有道智雲,網易賬号可以直接登入。

建立應用

首先進入我的應用,先建立一個應用。

PySimpleGUI + 有道翻譯 寫一個簡單的翻譯軟體

進入應用建立界面:

PySimpleGUI + 有道翻譯 寫一個簡單的翻譯軟體

再進入

自然語言翻譯>建立一個執行個體

,最後再右邊綁定應用即可。

PySimpleGUI + 有道翻譯 寫一個簡單的翻譯軟體

回到我的執行個體,點選執行個體進入執行個體詳情頁面:

PySimpleGUI + 有道翻譯 寫一個簡單的翻譯軟體

檢視你的 應用ID 和 應用密鑰,後面調用翻譯接口的時候會用到。

PySimpleGUI + 有道翻譯 寫一個簡單的翻譯軟體

檢視 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

部分。

簡單的設計界面

簡單的翻譯,先不要考慮那麼多,能輸入要翻譯的内容,并且把翻譯後的輸出即可。

PySimpleGUI + 有道翻譯 寫一個簡單的翻譯軟體

這裡隻設計了兩行:

  • 第一行,一個多行文本輸入區域,一個翻譯按鈕;
  • 第二行,一個 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()
           

運作結果如下:

PySimpleGUI + 有道翻譯 寫一個簡單的翻譯軟體

?,沒有做任何異常處理和穩定性代碼,請自行添加。

繼續閱讀