需求和分析
虽然如今的翻译和查词工具层出不穷,但它们主要只能胜任宽泛、日常话题的翻译。一旦涉及到专业领域的术语,一般的词典就力不从心了。
不过,如果你常用维基百科,不难想到它其实天然具有词典的功能:一方面,维基百科收录内容广泛,各行各业都有所涉及;另一方面,各语言版本的维基百科是相互连通的,只要通过页面上的语言菜单就能跳转到另一种语言的对应词条。
因此,在最简单意义上,可以这样借助维基百科来查找一个术语的翻译:(1) 打开源语言版本的词条;(2) 使用语言菜单切换到目标语言词条;(3) 目标语言对应页面标题就是要找的翻译。
不过,如果每次都要这么搜索和跳转,未免太麻烦了。有没有更简单的方法呢?
答案是肯定的。作为一个以开放著称的项目,维基百科的所有内容都可以通过 API 访问,其中就包括了多语言词条之间的链接关系。因此,只要借助维基 API,通过一种语言的词条标题查询其他语言对应词条的标题,也就实现了「翻译」功能。
为了方便读者预览效果,这里先提供 iOS 快捷指令和网页版两种做好的成品,感兴趣的读者可以进一步查看后面的原理解释。
(把维基 API 当词典用并不是我先想出来的主意。至少八年前,GitHub 用户 adamhwang 就做过一个网页版工具;另一位用户 jdranczewski 后来还做过另一个更复杂的版本。本文方法的核心原理与其类似,只是在实现方式上按照个人偏好做了一些优化,并省去了一些明显过时的依赖项。)
原理和步骤
维基百科的 API 虽然开放,但并不是那么好用。正如很多社区项目的通病一样,它的主要问题之一在于选择太多。事实上,维基百科目前已经积累了多达……三种不同的 API,简单来说:
- MediaWiki Action API:端点路径为
/w/api.php
。这是最传统的 API,优点是功能覆盖最为广泛,缺点是采用比较老旧的 RPC 风格设计,用起来非常啰嗦; - MediaWiki REST API:端点路径为
/w/rest.php
。这是一个比较新的 API,只支持 MediaWiki 1.35 及以上版本,采用更整洁的 RESTful 风格设计,逻辑更清晰,但是尚未覆盖 Action API 的全部功能; - Wikimedia REST API:端点路径为
/api/rest_v1
,这个 API 不是 MediaWiki(维基百科所基于的内容管理框架)的组成部分,而是 Wikimedia 基金会另行开发的,因此只适用于 Wikimedia 旗下的官方项目;功能方面和 MediaWiki REST API 接近,同样不及 Action API。
因此目前而言,实践中使用更广泛的还是最为通用的 MediaWiki Action API,本文也将选择这个 API。
MediaWiki Action API 的基本格式是:
https://example.tld/w/api.php?action=query&format=json[¶ms...]
其中: