python调用百度通用翻译API的方法实现
1. 简介
前段时间在做视频语音识别生成多语种字幕时,使用了百度翻译通用翻译api进行翻译。百度翻译平台经过个人认证之后,每月有200万字符的免费翻译额度。还是比较舒服的。
百度翻译开放平台是百度翻译面向广大开发者提供开放服务的平台。服务涵盖:通用翻译API、定制化翻译API、语音翻译SDK、拍照翻译SDK等。百度翻译平台地址
百度通用翻译API支持28种语言实时互译
,覆盖中、英、日、韩、西、法、泰、阿、俄、葡、德、意、荷、芬、丹等;同时支持28种语言的语言检测。
2. 使用步骤
如果你是初次使用百度翻译开放平台,你需要先注册一个百度账号。登录成功之后,点击产品服务,进入到通用翻译api界面。点击底部立即使用,经过认证之后就可以使用了。个人能够申请标准版和高级版认证(推荐,支持并发数高)。
认证完整之后,你就能获取到对应的appid
和secret
密钥,这些在调用api的时候需要使用。
3. api调用实现
可以通过以上网址查看通用翻译的API文档。api文档.我这里只展示几个重要的内容。
API调用网址
https://fanyi-api.baidu.com/api/trans/vip/translate
api调用参数
签名生成方法:签名对应api参数中的sign。
api支持get和post请求,但我推荐使用post请求,因为get请求存在url长度限制(服务器或浏览器限制),需要翻译的文本过长使用get请求就会出错,而post请求就没有这个限制。
api返回结果值
4. 编码实现
基类,定义规范,后期可以定义其他平台的翻译实现类
# encoding:utf-8 __author__ = 'ObsessedCE' from abc import ABC, abstractmethod class Translation(ABC): @abstractmethod def translation(self, text, src_language = "auto", des_language = "zh"): pass
具体实现类,具体实现调用百度通用翻译api的类
#coding=utf-8 __author__ = 'ObsessedCE' import requests import file_util import sys import hashlib import random import string import translation class BAIDUTranslation(translation.ABC): def __init__(self, profile): self.appid = profile.get("baidu_app_id") self.secret = profile.get("baidu_secret") self.url = profile.get("baidu_translation_url") self.session = requests.Session() self.session.trust_env = False def translation(self, text, src_language = "auto", des_language = "zh"): header = { "content-type":"application/x-www-form-urlencoded" } data = { "q" : text, "from" : src_language, "to" : des_language, "appid":self.appid, "salt":"", "sign":"" } if not text: print("Unspecified content") return None salt = BAIDUTranslation.generate_random_string(6) data["salt"] = salt data["sign"] = self.generate_sign(data) try: response = self.session.post(url= self.url, data = data, headers = header) if response.status_code != 200: print(f"调用百度翻译出错,状态码为: {str(response.status_code)}") return None response_data = response.json() if response_data.get("code") and response_data.get("code" )!= 52000: print(f"调用百度翻译出错,返回错误代码为: {response_data.get('code')}") return None translation_result = list() trans_result = response_data.get("trans_result") for result in trans_result: src = result.get("src") des = result.get("dst") translation_result.append(des) return translation_result except Exception as e: print(f"调用翻译请求时出现错误: {e}") def generate_sign(self, data): """ 生成签名 :param data: :return: """ str = data.get("appid") str += data.get("q") str += data.get("salt") str += self.secret return self.generate_md5(str) def generate_md5(self, content): """ 进行内容md5加密,发挥全小写的编码 :param content: :return: """ if content: md5_hash = hashlib.md5() md5_hash.update(content.encode("utf-8")) return md5_hash.hexdigest().lower() @staticmethod def generate_random_string(length=6): # 可用字符:大写字母、小写字母和数字 chars = string.ascii_letters + string.digits # 随机选择字符并生成指定长度的字符串 return ''.join(random.choices(chars, k=length)) if __name__ == "__main__": profile = file_util.read_file("./profile.yml") if not profile: print("no profile") sys.exit(0) baidu_transltion = BAIDUTranslation(profile) text = "You look so handsome today\nI think so, too" print(baidu_transltion.translation(text, ))
文件辅助类,读取配置文件
# encoding:utf-8 __author__ = 'ObsessedCE' import yaml import sys def read_file(file_path): try: with open(file_path, "r", encoding="utf-8") as file: data = yaml.safe_load(file) return data except Exception as e: print(e) sys.exit(0)
配置文件定义格式,文件类型为yml,定义个人appid和密钥
baidu_app_id: "个人信息查看" baidu_secret: "个人信息中查看" baidu_translation_url: "https://fanyi-api.baidu.com/api/trans/vip/translate"
最后看一下调用效果.
到此这篇关于python调用百度通用翻译API的方法实现的文章就介绍到这了,更多相关python调用翻译API内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论