「人生苦短我用Python」之 Python 使用有道 API 接口翻译

每次本地写 WordPress 文章之后使用 Python 脚本发布到服务器,在 markdown 格式的头部以 yaml 格式记录了文章的一些 matedata 信息比如日期、标题、标签、分类、url 等信息。

其中 URL 也就是发布以后作为 wp 文章的固定链接 以标题的英文加连字符的形式提供。比如本文 Python 使用有道 API 接口翻译 翻译成 Python-USES-the-youdao-API-interface-for-translation如果每次将标题复制到谷歌翻译、百度翻译、有道翻译这样的网页里翻译后再复制回来,加上连字符 – 未免手动太麻烦。

如果过程变成:复制标题>>Python 脚本获取标题>>翻译成英文>>加上连字符>>复制到剪贴板,我再粘贴一下岂不很方便?另外我也不想手动打开终端去运行脚本,因为懒,使用 Mac Automator 自动操作执行脚本,整个写作过程就无需打开另外的东西。

当然 Python 使用有道 API 可以做很多事情,我这里只是用来翻译一下文章标题。

获取有道 API

注册有道智云 有 163 邮箱账号可以直接使用邮箱登录,填写一些验证信息,注册完成后还赠送 100 RMB 用来体验 API 翻译,看了一下价格文本翻译按字符计费的话 48元/百万字符,这完全够用!

新建实例和应用
1. 进入后台自然语言翻译>>新建实例起个名字>> 选择文本翻译。
2. 应用管理>>我的应用>>创建应用>>起名字、选类型、选 API>>绑定刚才创建的实例

Youdao-api
Youdao-api
Youdao-api

这样就获得了应用 ID 和密匙

写 Python 脚本

  1. 使用pyperclip模块获取剪贴板内容
  2. 按有道 API 文档调用API需要向接口发送以下字段,按照给定的格式做好放在一个 dict 里
  3. 使用requests模块进行 post 请求
  4. 从返回的 json 数据中取出翻译结果 translation
  5. 使用 re 模块将翻译结果字符串中的空字符使用连字符-替换
  6. 再使用pyperclip模块将结果复制到剪贴板

其中 2-3 步骤 API 文档里有关于 Python 的 demo 路径为帮助与文档 > 产品文档 > 自然语言翻译 > API 文档 > 常用语言 Demo

有道翻译 API 接口地址
http://openapi.youdao.com/api
https://openapi.youdao.com/api
使用其中任何一个即可,推荐使用 HTTPS 协议

请求方式
– 传输方式 HTTP/HTTPS
– 请求方式 GET/POST
– 字符编码 统一使用UTF-8编码
– 响应格式 统一采用JSON格式
– 传输方式 HTTP/HTTPS

调用API向接口发送字段
201907

sign签名算法 出错会导致签名校验失败返回 202 签名生成算法如signType=v3,sha256(应用ID+input+salt+curtime+密钥) 推荐使用sha256签名计算方法为:sha256(应用ID+input+salt+当前UTC时间戳+密钥)。

input的计算方式为:
当q长度大于20 input=q前10个字符 + q长度 + q后十个字符
当q长度小于等于20 input=q字符串

因为文档里有Python demo 自己的写的大同小异就是添加了一些粘贴复制、从json里提取 翻译结果 translation项 ,re正则替换空格到连字符- 每个人需求不同就不贴了,下面是官方demo 注意去掉 truncate() 函数里 input 字符大于20的时候 str(size) 

# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import hashlib
import time

reload(sys)
sys.setdefaultencoding('utf-8')

YOUDAO_URL = 'http://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 do_request(data):
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    return requests.post(YOUDAO_URL, data=data, headers=headers)


def connect():
    q = "test"

    data = {}
    data['from'] = 'EN'
    data['to'] = 'zh-CHS'
    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

    response = do_request(data)
    print response.content


if __name__ == '__main__':
    connect()

demo里打印的是json格式的返回结果,包括很多信息,translation项是翻译结果,每个人的需求不同根据返回的json数据提取需要的信息即可…

Mac 新建一个快速操作

脚本测试没有问题后,每次翻译都打开终端也不好,使用 Mac 自动操作新建一个快速操作,添加到服务里,然后在任何应用里打开服务–选择就会自动执行,执行完成后翻译的结果就在剪贴板了,粘贴即可。

201907

主要就是运行 shell 脚本,但我想远行完成后给个语音提示,所以在 iTunes 里新建个播放列表,放入一个提示音,脚本完成后播放提示音,暂停 3 秒关闭 iTunes

编辑好后保存,在任何应用程序里都会显示这个服务,点击运行即可。

201907

图片里另外两个服务也是自己用 Python 脚本写的,分别是上传指定文件夹里的图片到七牛云 比如本文的一些图整理好后放在桌面一个文件夹,执行这个服务,所有上传后图片链接都会转成 md 格式的图片链接复制到剪贴板里。

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

标签云

「人生苦短我用Python」之 Python 使用有道 API 接口翻译

长按储存图像,分享给朋友

微信扫一扫

微信扫一扫