Alfred workflow 自定义开发

Alfred 翻译workflow开发

目的: alfred 作为工作的一个无敌提效工具 ,有很多现成的workflow供大家使用,但是总有无人涉及的地方,或者有某些自定义比较强的需求。此处通过0-1开发一个中(英)译英(中)的需求,带大家走进alfred 的workflow开发

需求重述:开发一个alfred workflow ,通过命令f 测试 来执行百度翻译开放接口,输出结果test 并复制到系统剪切板(英译中同理)

1.申请个人翻译账号

笔者用的是百度翻译,申请了一个个人账号,其他平台均可,能调api服务就可以

官方地址: https://fanyi-api.baidu.com/product/11

Untitled

Untitled

完成注册和认证之后 ,可以在开发者信息中看到个人的APP ID和密钥,后面会用到

接入文档:https://fanyi-api.baidu.com/product/113

Untitled

2.workflow开发

接口准备就绪,可以去创建 Alfred 的workflow 了

创建空workflow,并填写好名称描述等信息

Untitled

Untitled

保存后,在空白处右键-inputs-Script Filter 选择创建一个空白Filter

Untitled

Untitled

配置环境变量 APP_ID、KEY,在代码中可直接获取到注入的环境变量,位置编辑配置→Environment Variables→ add

Untitled

Untitled

1
2
3
# 脚本中的使用
appid=${APP_ID}
key=${KEY}

将结果输出到剪切板,因为Alfred 需要输出特殊的格式数据,才能显示到工具上

具体Alfred 输出格式可参考: https://www.alfredapp.com/help/workflows/inputs/script-filter/json/

不同的language有不同的输出方式,此处演示的是bash场景输出

1
2
3
4
5
6
7
8
9
cat << EOB
{"items": [
{
"title": "翻译结果: $result",
"subtitle": "$subtitletext",
"arg": "$result"
}
]}
EOB

完整代码可参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#/**
# * @author progerchai@qq.com
# * @description : 业务中echo 会直接将值作为参数返给alfred ,但是alfred 只接受JSON格式,会报错:
# * JSON text did not start with array or object and option to allow fragments not set.
# * 实际使用请去除echo 语句
# */

appid=${APP_ID}
key=${KEY}
# salt 随机数
salt=1
#content = appid+q+salt+密钥
content="${appid}{query}${salt}${key}"
# echo "sign before md5 ===> ${content}"
# md5加密得到sign
sign=$(echo -n "$content" | md5)

url="https://fanyi-api.baidu.com/api/trans/vip/translate?q={query}&from=zh&to=en&appid=${appid}&salt=${salt}&sign=${sign}"
# echo "请求地址 ===> ${url}"
value=$(curl --location $url)

result=$(echo "$value" | jq -r '.trans_result[0].dst')

#echo "请求结果 ===> ${value}"
#echo "解析结果trans_result[0].dst ===> ${result}"

subtitletext='Press enter to paste or ⌘C to copy'

if [ -z $result ]
then
result='n/a'
fi

cat << EOB
{"items": [
{
"title": "翻译结果: $result",
"subtitle": "$subtitletext",
"arg": "$result"
}
]}
EOB

处理curl 接口返回值时,因为返回的是json数据, 所以需要借助三方工具来处理 ,本身bash 并不具备json的处理能力。可以安装jq,安装方法如下:

1
2
3
4
5
6
7
# 本地需要内置jq ,其他系统环境请自行搜索哈~
# 无法安装可加sudo
# mac
brew install jq

# Linux
yum -y install jq

可以输出结果之后,还有最后一步要做,就是回车将结果粘贴到剪切板。

Alfred本身有这个能力,只需右键Outputs→Copy to Clipboard ,新建一个对象,并在页面上讲脚本对象和输出对象通过线进行关联,如下图所示:

Untitled

Untitled

到此保存,workflow完成~

上面演示的是中译英,英译中同理,只需修改一下curl 参数即可

一起来体验一下吧

中译英

Untitled

英译中

Untitled


tips: 开发过程中,可以在Alfred 开启调试

Untitled


感谢阅读,勘误、纠错或其他请联系progerchai@gmail.com,或者点击这里提 issue 给我
欢迎交流 👏,你的每一次指导都可以让我进步


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!