当前位置: 首页 > news >正文

python调用百度通用翻译API

文章目录

  • 1. 简介
  • 2. 使用步骤
  • 3. api调用实现
  • 4. 编码实现

1. 简介

前段时间在做视频语音识别生成多语种字幕时,使用了百度翻译通用翻译api进行翻译。百度翻译平台经过个人认证之后,每月有200万字符的免费翻译额度。还是比较舒服的。

百度翻译开放平台是百度翻译面向广大开发者提供开放服务的平台。服务涵盖:通用翻译API、定制化翻译API、语音翻译SDK、拍照翻译SDK等。百度翻译平台地址

百度通用翻译API支持28种语言实时互译,覆盖中、英、日、韩、西、法、泰、阿、俄、葡、德、意、荷、芬、丹等;同时支持28种语言的语言检测。

2. 使用步骤

如果你是初次使用百度翻译开放平台,你需要先注册一个百度账号。登录成功之后,点击产品服务,进入到通用翻译api界面。点击底部立即使用,经过认证之后就可以使用了。个人能够申请标准版和高级版认证(推荐,支持并发数高)。
在这里插入图片描述
认证完整之后,你就能获取到对应的appidsecret密钥,这些在调用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, abstractmethodclass Translation(ABC):@abstractmethoddef 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 translationclass 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 = Falsedef 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 Nonesalt = BAIDUTranslation.generate_random_string(6)data["salt"] = saltdata["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 Noneresponse_data = response.json()if response_data.get("code") and response_data.get("code" )!= 52000:print(f"调用百度翻译出错,返回错误代码为: {response_data.get('code')}")return Nonetranslation_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_resultexcept 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.secretreturn  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()@staticmethoddef 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 sysdef read_file(file_path):try:with  open(file_path, "r", encoding="utf-8") as file:data = yaml.safe_load(file)return dataexcept 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"

最后看一下调用效果.

在这里插入图片描述

http://www.lryc.cn/news/485059.html

相关文章:

  • Timeline动画「硬切」的问题
  • CentOS 9 配置网卡
  • redis7.x源码分析:(2) adlist双向链表
  • KUKU FM 音频Linux平台免费下载工具
  • 《Django 5 By Example》阅读笔记:p105-p164
  • 网络延迟对Python爬虫速度的影响分析
  • 微信小程序内嵌h5页面(uniapp写的),使用uni.openLocation无法打开页面问题
  • 创建一个简单的基于STM32的FreeRTOS应用
  • 【Revit二次开发】创建Ribbon选项卡与带图标的按钮
  • Win11 终端执行 python xxx.py 没反应
  • 使用视频提升应用在 App Store 中的推广效果
  • 对话 OpenCV 之父 Gary Bradski:灾难性遗忘和持续学习是尚未解决的两大挑战 | Open AGI Forum
  • 通过地址获取LONG和LAT并且存入csv
  • Nginx SSL+tomcat,使用request.getScheme() 取到https协议
  • Node.Js+Knex+MySQL增删改查的简单示例(Typescript)
  • 机器学习的概览
  • 方法论-WPS模型(高效沟通和决策分析的框架)
  • OpenTelemetry 赋能DevOps流程的可观测性革命
  • 子集选择——基于R语言实现(最优子集选择法、逐步回归法、Lasso回归法、交叉验证法)
  • Ubuntu24.04挂载磁盘
  • 使用机器学习优化数据库查询性能
  • 英伟达基于Mistral 7B开发新一代Embedding模型——NV-Embed-v2
  • HTML面试题(2)
  • 微服务day07
  • 芯原科技嵌入式面试题及参考答案
  • 二叉树Golang
  • 通过css的哪些方式可以实现隐藏页面上的元素?
  • 微信小程序 === 使用腾讯地图选点
  • Redis高可用-Cluster(集群)
  • Spring Boot编程训练系统:数据管理与存储