Python 编写一个有道翻译的 workflow 教程
最近使用有道翻译的 workflow 总是翻译不了,可能是 appKey 失效了或者超过调用上限,所以打算自己实现一个。
创建 workflow
打开 Alfred3 的 Preferences,选择 Workflows。
下方有个+,单击后选择 Blank Workflow。完成基本信息的填写。
然后右击添加:Inputs->Script Filter。
Keyword 输入 yd,代表我们用'yd' 激活我们的 workflow。
写上合适的提示文字
Language 选择
/bin/bash或者/bin/zsh选择
with input as {query}脚本填入
python translate.py {query}, translate.py 是自己编写的 python 脚本。

可以找一个合适的图标拖到右上角图标的位置。
安装 Alfred-Workflow 库:
点击 Cancel 左边的图标,进入到 workflow 所在的目录。
或者右击 workflow 选择 Open in Finder

如果需要将自己编写的 workflow 分享给别人使用,则需要将 Alfred-Workflow 安装到 workflow 所在的目录。
# 进入到 workflow 所在目录
pip install Alfred-Workflow --target=.
申请 appKey
有道翻译的 api 现在是计费的,申请实例之后可以获得100元体验金,那就先用着吧。
先打开http://ai.youdao.com/,然后注册登录。接下来:
- 自然语言翻译=》翻译实例=》创建实例,选择文本翻译。
- 应用管理=》我的应用=》创建应用,接入方式选择API。创建成功后绑定服务。
- 点击应用的名称,进入应用详情页面,可以看到用来调用 api 的应用ID 和应用密钥。
编写 translate.py
# -*- coding:utf8 -*-
import sys
from workflow import Workflow3, web
def translate(wf):
import md5
import random
# 此处修改为你的应用 ID
appKey = '024b716exxxxxxxx'
# 此处修改为你的应用密钥
key = 'XWLYKxGoMK7474Ux1NXFxxxxxxxxxxxx'
query = sys.argv[1]
salt = str(random.randint(1, 65536))
sign = appKey + query + salt + key
m1 = md5.new()
m1.update(sign)
sign = m1.hexdigest()
params = dict(appKey=appKey, q=query, salt=salt, sign=sign)
r = web.get('https://openapi.youdao.com/api', params)
r.raise_for_status()
res = r.json()
if res.get('web'):
posts = res['web']
for post in posts:
wf.add_item(title=u" ".join(post['value']), subtitle=post['key'])
else:
wf.add_item(title=u"No result", subtitle="errorCode:"+res["errorCode"])
wf.send_feedback()
if __name__ == "__main__":
wf = Workflow3()
sys.exit(wf.run(translate))
测试
保存代码后,可以打开 workflow 的 debug,输入 yd hello进行测试。

如果出现错误,可以在有道的 API 文档中查询错误码列表,如上108代表的是appKey无效。
使用有效的appKey 后,效果如下:

参考链接:
Python 编写一个有道翻译的 workflow 教程的更多相关文章
- 用Python编写一个简单的Http Server
用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...
- 使用 python 编写一个授权登录验证的模块
使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...
- 再也不怕和老外交流了!我用python实现一个微信聊天翻译助手!
前言 在前面的一篇文章如何用python“优雅的”调用有道翻译中咱们清楚的写过如何一层一层的解开有道翻译的面纱,并且笔者说过那只是脑洞的开始.现在笔者又回来了.当你遇到一些外国小哥哥小姐姐很心动.想结 ...
- 用Python做一个简单的翻译工具
编程本身是跟年龄无关的一件事,不论你现在是十四五岁,还是四五十岁,如果你热爱它,并且愿意持续投入其中,必定会有所收获. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过 ...
- 如何用Python编写一个聊天室
一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx. ...
- 为Python编写一个简单的C语言扩展模块
最近在看pytorh方面的东西,不得不承认现在这个东西比较火,有些小好奇,下载了代码发现其中计算部分基本都是C++写的,这真是要我对这个所谓Python语音编写的框架或者说是库感觉到一丢丢的小失落,细 ...
- 用python编写一个合格的ftp程序,思路是怎样的?
经验1.一般在比较正规的类中的构造函数.都会有一个verify_args函数,用于验证传入参数.尤其是对于系统传参.2.并且系统传参,其实后面大概都是一个函数名 例如:python server. ...
- Python编写一个Python脚本
我想要一个可以为我的所有重要文件创建备份的程序.(下面测试环境为python2.7) 1.backup_ver1.py #!/usr/bin/python import os import time ...
- python爬虫之有道翻译
import urllib.request import urllib.parse import json class Translate(): def __init__(self): ...
随机推荐
- Yii2设计模式——单例模式
应用举例 在Yii.php中: require __DIR__ . '/BaseYii.php'; // Yii框架的帮助类,提供框架基本的功能 class Yii extends \yii\Base ...
- CSS3制作上下跳动动画箭头效果
动画效果如下: 代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8&q ...
- 微信小程序 canvas导出图片模糊
//保存到手机相册save:function () { wx.canvasToTempFilePath({ x: , y: , width: , //导出图片的宽 height: , //导出图片的高 ...
- harris角点检测的简要总结
目录 1. 概述相关 2. 原理详解 1) 算法思想 2) 数学模型 3) 优化推导 3. 具体实现 1) 详细步骤 2) 最终实现 4. 参考文献 1. 概述相关 harris角点检测是一种特征提取 ...
- 1.3 使命的完成者Command
为什么要从Command说起? 因为Command才是Cesium源码中真正意义的绘制细胞.
- 如何让nextcloud支持avi文件在线播放
默认的nextcloud是不支持avi文件播放的,google查了一圈,都说是没法支持. 然而我觉得都是html5写的,为啥偏偏不支持. 查了一些资料,发现还是官方的代码少写了东西,可能是没考虑那么全 ...
- c#面试题汇总(1)
c#面试题汇总 From: https://www.cnblogs.com/suzhiyong1988/p/5069385.html 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化 ...
- React---入门(1)
React是什么? React 是一个用于构建用户界面的 JAVASCRIPT 库. React 特点 1.声明式设计 −React采用声明范式,可以轻松描述应用. 2.高效 −React通过对DOM ...
- 西湖论剑2019-msc之奇怪的TTL
msc1给了一串很长的TTL字符,参考一些隐写的文章,猜测是在ttl中藏了信息,题目是这样的 我们截获了一些IP数据报,发现报文头中的TTL值特别可疑,怀疑是通信方嵌入了数据到TTL,我们将这些TTL ...
- Neuroph开发过程
文章提纲 安装与配置 开发小结 建立项目 配置项目 理解感知机的代码 安装与配置 JDK的安装:建议JRE 1.8以上: Neuroph安装:建议2.94的版本.下载地址 neuroph-core-2 ...