美文网首页
PySimpleGUI + 有道翻译 写一个简单的翻译软件

PySimpleGUI + 有道翻译 写一个简单的翻译软件

作者: 猫与测试 | 来源:发表于2019-10-16 22:25 被阅读0次

网易的有道智云,提供了各种 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可以作为多行文本输入区域,也可以作为多行文本输出区域。

sg.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 + 有道翻译 写一个简单的翻译软件

    网易的有道智云,提供了各种 Api,一部分呢可以免费试用。 这里使用自然语言翻译的 Api 来写一个简单的翻译软件...

  • 测试一款号称最好的翻译软件—DeepL

    在我们日常学习和工作过程中,常常会遇到使用翻译软件的需求。常用的翻译软件有:谷歌翻译、有道翻译、百度翻译、搜狗翻译...

  • python爬虫系列2-有道翻译

    任务需求: 使用有道翻译接口开发自己的翻译软件 使用库文件:urllib,json 主要技术点有道翻译接口为htt...

  • Mac下的最佳翻译软件-Bob

    Bob 是一款 免费开源的 Mac 端翻译软件,支持划词翻译和截图翻译,翻译引擎支持有道翻译、百度翻译和谷歌翻译,...

  • 洛谷P1540机器翻译

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。 题目描述 这个翻译软件的原理很简单...

  • 有什么好的翻译软件吗?

    我想把英文论文直接翻译成中文 有翻译软件没有字数限制,并且翻译准确吗? 网页,谷歌,百度,有道翻译等都有5000字...

  • 20个上班族必备APP

    1思维导图 ——XMIND 2扫描软件——扫描全能王 3制作名片——名片全能王 4翻译软件——有道翻译 5深度内容...

  • 有道翻译

    有道翻译 使用post请求 关键点 接口http://fanyi.youdao.com/translate_o?s...

  • 有道翻译

    首先打开有道翻译随便输入一个单词,打开f12,查看请求方式以及需要提交的参数 其中重要的参数就是这几个,别问为什么...

  • 在线翻译

    在线实用翻译软件,同时支持26国语言的相互翻译,简单实用,旅游出差必备

网友评论

      本文标题:PySimpleGUI + 有道翻译 写一个简单的翻译软件

      本文链接:https://www.haomeiwen.com/subject/bcspmctx.html