首页 > 编程语言 >python调用百度通用翻译API

python调用百度通用翻译API

时间:2024-11-15 14:15:19浏览次数:3  
标签:__ 翻译 get python self api API data 百度

文章目录

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, 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"

最后看一下调用效果.

在这里插入图片描述

标签:__,翻译,get,python,self,api,API,data,百度
From: https://blog.csdn.net/qq_45776114/article/details/143796521

相关文章

  • Python类
    五、类5.1定义类使用class关键字定义一个类,类名通常采用首字母大写的驼峰命名法classPerson:pass5.2构造函数基本语法classPerson:def__init__(self,name,age):#定义构造函数self.name=name#初始化name属性s......
  • Python开发环境搭建(PyCharm+Anaconda+Git+Gitee)
    一、Anaconda介绍1.1为什么选择Anaconda?Anaconda是一个开源的Python发行版本,主要用于数据科学和机器学习,它包含了Python、conda以及众多工具和库,让我们可以轻松的构建和管理python虚拟环境,方便的进行python项目开发。下面是选择Anaconda的理由:安装简单方便便捷的Python虚拟......
  • 【第二章】Python基础之内建常用数据类型与数值型
    内建常用数据类型分类数值型  int、float、complex、bool序列sequence  字符串str、字节序列bytes、bytearray  列表list、元组tuple键值对  集合set、字典dict数值型int、float、complex、bool都是class,1、5.0、2+3j都是对象即实例int:   ......
  • python编写的扫雷游戏
    使用python语言编写的命令行方式的交互的《扫雷》游戏:importnumpyasnpimportrandomfromtypingimportListH=36W=64defbelong_to(h,w,H=H,W=W):near=[]foriinrange(h-2,h+3):forjinrange(w-2,w+3):ifi>=0andj......
  • Python-django-flask游戏虚拟物品道具商城管理系统
    文章目录项目介绍系统开发技术路线具体实现截图开发技术django项目代码结构参考解析论文大纲目录参考核心代码部分展示源码/演示视频获取方式项目介绍游戏虚拟物品管理系统的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、游戏虚拟物品......
  • 李沐《动手学深度学习》kaggle树叶分类(ResNet18无预训练)python代码实现
    前言    在尝试这个树叶分类之前,作者仅仅看完了ResNet残差网络一章,并没有看后面关于数据增强的部分,这导致在第一次使用最原始的ResNet18直接跑完训练数据之后的效果十分的差,提交kaggle后的准确仅有20%左右。本文最后依然使用未经预训练的手写ResNet18网络,但做了一定的......
  • Python小白学习教程从入门到入坑------第三十二课 生成器(语法进阶)
    目录一、生成器generator1.1生成器表达式1.1.1表达式一1.1.2表达式二二、可迭代对象、迭代器、生成器三者之间的关系2.1定义与特性2.2关系与区别一、生成器generator在Python中,生成器(Generators)是一种用于迭代对象的特殊类型函数。它们允许你生成一个序列......
  • Python小白学习教程从入门到入坑------第三十一课 迭代器(语法进阶)
    目录一、可迭代对象Iterable1.1可迭代对象的条件1.2for循环工作原理1.3isinstance()二、迭代器 Iterator2.1 __iter__() 和 __next__()2.2 可迭代对象&迭代器2.2.1定义与特性2.2.2 关系与转换2.2.3应用场景三、迭代器协议(了解即可)四、自定义迭代器类......
  • 百度 2025届秋招提前批 文心一言大模型算法工程师
    文章目录个人情况一面/技术面1h二面/技术面1h三面/技术面40min个人情况先说一下个人情况:学校情况:211本中9硕,本硕学校都一般,本硕都是计算机科班,但研究方向并不是NLP,而是图表示学习论文情况:1A(NeurIPS)+1B(ICDM)已录用,还有一篇A会(AAAI2025)最近快出结果了,以及一......
  • 18.api接口与restful规范
    1.main文件导入student接口启动2.setting文件配置数据库连接3.查询所有学生接口4.添加一个学生接口5.查询一个学生接口6.更新一个学生接口7.删除一个学生接口 ......