Skip to content

tq-xyy/baidu-translate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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)
# True

result = fanyi.translate_text('我们是中国人,我们爱自己的祖国!')
print(result)
# We are Chinese, we love our motherland!

result_common = fanyi.translate_text('年化收益率')
result_domain = fanyi.translate_text('年化收益率', domain=fanyi.Domain.FINANCE) # 金融
print(result_common, '&', result_domain)
# Annualized rate of return & Annualized yield

你也可以使用异步和多线程:

import baidu_translate as fanyi
import asyncio, time
from concurrent.futures import ThreadPoolExecutor

# Make cache
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) # 4.8s~

start = time.time()
result_async = asyncio.run(test_async('Good morning!'))
print('Async Time:', time.time() - start) # 2.3s~

start = time.time()
result_thread = test_thread('Good morning!')
print('Thread Time:', time.time() - start) # 0.8s~

print(result_sync == result_async == result_thread)
# True

由于 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):
    # will be replace with real language
    AUTO = 'auto'  # 自动检测

    # Common Languages
    ZH = 'zh'    # 中文(简体)
    EN = 'en'    # 英语
    SPA = 'spa'  # 西班牙语
    ARA = 'ara'  # 阿拉伯语
    FRA = 'fra'  # 法语
    RU = 'ru'    # 俄语

    # More Languages
    ...

baidu_translate.Domain

枚举对象, 百度的垂直翻译领域, 请注意是全部大写。

建议结合 IDE 自动补全使用。

class Domain(enum.Enum):
    COMMON = 'common'      # 通用领域
    BM = 'medicine'        # 生物医药
    ET = 'electronics'     # 电子科技
    WCM = 'mechanics'      # 水利机械
    NOVEL = 'novel'        # 网络文学
    FINANCE = 'finance'    # 金融
    MILITARY = 'military'  # 军事

参考文献

  1. hujingshuang 的百度翻译 API (百度翻译接口 破解)
  2. 百度指数 Cipher-Text、百度翻译 Acs-Token 逆向分析
  3. js逆向-最新版百度翻译参数解密
  4. python的AES-CBC加密

版权 & 免责声明

本项目已被放入公有领域,作者放弃所有权利。任何人都可以自由地使用本项目,而无需注明作者。

但值得注意的是,本项目违反了百度翻译(PC 版)用户使用协议的第三十一条第一款。百度公司随时可以联系本人删除项目,但由此衍生出的任何法律问题本人概不负责(包括但不限于用户使用不当而对百度公司服务器造成的损失)。

特别提醒:本项目仅供学习讨论。建议不要在商业项目中使用,以规避法律风险。

且用且珍惜!

About

一个免费, 高效, 简洁百度翻译接口

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages