baidu-translate
一个免费, 高效, 简洁 百度翻译 接口
特点:
- 采用百度翻译公共接口, 无鉴权, 完全免费。
- 支持垂直翻译, 可提高翻译准确度。
- 代码内部自动获取 Token 和 GTK, 无需使用者手动获取。
- 接口简洁, 没有复杂的前置调用。
- 相对于同类开源项目而言, sign 算法采用 Python 重新编写, 无需额外的依赖和调用开销。
- 得益于缓存机制,首次调用可能稍慢,但后续调用相当之快。
安装
本项目已发布到 PYPI,你可以通过以下方法来安装。
$ pip install baidu-translate-api
注意安装包名为 baidu-translate-api
,调用包名为 baidu_translate
也可以用以下方式安装最新版:
$ pip install git+https://github.com/17097239132/baidu-translate.git
例子
import baidu_translate as fanyi
result = fanyi.translate_text('Hello, World!')
result_ru = fanyi.translate_text('Hello, World!', to=fanyi.Lang.RU)
print(result, result_ru)
lang = fanyi.detect_language('Vue rapide')
print(lang == fanyi.Lang.FRA)
result = fanyi.translate_text('我们是中国人,我们爱自己的祖国!')
print(result)
result_common = fanyi.translate_text('年化收益率')
result_domain = fanyi.translate_text('年化收益率', domain=fanyi.Domain.FINANCE)
print(result_common, '&', result_domain)
你也可以使用异步和多线程:
import baidu_translate as fanyi
import asyncio, time
from concurrent.futures import ThreadPoolExecutor
fanyi.translate_text('Hi!')
langs = ['zh', 'en', 'fra', 'ru', 'ara', 'spa']
def test_sync(text):
texts = []
for lang in langs:
texts.append(fanyi.translate_text(text, to=lang))
return ' '.join(texts)
async def test_async(text):
tasks = []
for lang in langs:
tasks.append(fanyi.translate_text_async(text, to=lang))
texts = await asyncio.gather(*tasks)
return ' '.join(texts)
def test_thread(text):
with ThreadPoolExecutor() as pool:
texts = pool.map(
lambda lang: fanyi.translate_text(text, to=lang), langs
)
return ' '.join(texts)
start = time.time()
result_sync = test_sync('Good morning!')
print('Sync Time:', time.time() - start)
start = time.time()
result_async = asyncio.run(test_async('Good morning!'))
print('Async Time:', time.time() - start)
start = time.time()
result_thread = test_thread('Good morning!')
print('Thread Time:', time.time() - start)
print(result_sync == result_async == result_thread)
由于 httpx 请求库的缘故, 多线程模式的速度被显著提升, 而异步模式的效率并不突出。
API
baidu_translate.translate_text(content, /, from_=Lang.AUTO, to=Lang.AUTO, domain=Domain.COMMON)
翻译 content
中的内容, 并返回一个字符串。
from_
和 to
分别是翻译的源语言和目标语言。接受一个 Lang
对象, 也可传入一个字符串, 将自动转化为 Lang
对象。如果未指定或为 Lang.AUTO
, 将自动检测源语言或目标语言。
domain
是垂直翻译领域,请传入一个 Domain
对象。
如果 content
为空或源语言与目标语言相同将不做更改。
baidu_translate.detect_language(content)
检测 content
的语种。返回一个 Lang
对象。如果检测不出来将返回 None
。
baidu_translate.Lang
枚举对象, 包含百度支持的所有语种的 ID, 请注意是全部大写。
建议结合 IDE 自动补全使用。
class Lang(enum.Enum):
AUTO = 'auto'
ZH = 'zh'
EN = 'en'
SPA = 'spa'
ARA = 'ara'
FRA = 'fra'
RU = 'ru'
...
baidu_translate.Domain
枚举对象, 百度的垂直翻译领域, 请注意是全部大写。
建议结合 IDE 自动补全使用。
class Domain(enum.Enum):
COMMON = 'common'
BM = 'medicine'
ET = 'electronics'
WCM = 'mechanics'
NOVEL = 'novel'
FINANCE = 'finance'
MILITARY = 'military'
参考文献
- hujingshuang 的百度翻译 API (百度翻译接口 破解)
- 百度指数 Cipher-Text、百度翻译 Acs-Token 逆向分析
- js逆向-最新版百度翻译参数解密
- python的AES-CBC加密
版权 & 免责声明
本项目已被放入公有领域,作者放弃所有权利。任何人都可以自由地使用本项目,而无需注明作者。
但值得注意的是,本项目违反了百度翻译(PC 版)用户使用协议的第三十一条第一款。百度公司随时可以联系本人删除项目,但由此衍生出的任何法律问题本人概不负责(包括但不限于用户使用不当而对百度公司服务器造成的损失)。
特别提醒:本项目仅供学习讨论。建议不要在商业项目中使用,以规避法律风险。
且用且珍惜!