首页 > 其他分享 >小工具 --- 百度翻译API翻译工具

小工具 --- 百度翻译API翻译工具

时间:2023-08-13 18:46:34浏览次数:35  
标签:翻译 string URL --- API using 工具 salt

引言

最近想把一些英文官方文档的资料翻译成中文,然后转化为Markdown文档,然后发现百度通用翻译的API有不错的免费额度,个人申请也能申请到高级版。这个额度足够个人的日常使用了。

image.png

如何使用

如何使用通用翻译API?

  • 使用您的百度账号登录百度翻译开放平台
  • 注册成为开发者,获得 APPID ;
  • 进行开发者认证(如仅需标准版可跳过);
  • 开通通用翻译API服务:开通链接
  • 参考技术文档和 Demo 编写代码。

注册完毕后,就可以在百度开放翻译平台的管理控制台看到APPID和密钥,这样就可以通过直接调用翻译API了。

以下内容来自百度翻译开放平台官方文档:

API地址

通用翻译API通过 HTTP 接口对外提供多语种互译服务。您只需要通过调用通用翻译API,传入待翻译的内容,并指定要翻译的源语言(支持源语言语种自动检测)和目标语言种类,就可以得到相应的翻译结果。

通用翻译API HTTPS 地址:

https://fanyi-api.baidu.com/api/trans/vip/translate

输入参数

请求方式: 可使用 GETPOST 方式,如使用 POST 方式,Content-Type 请指定为:application/x-www-form-urlencoded

字符编码:统一采用 UTF-8 编码格式。

query 长度:为保证翻译质量,请将单次请求长度控制在 6000 bytes以内(汉字约为输入参数 2000 个)。

image.png

输出参数

返回的结果是json格式,包含以下字段:

image.png

错误码

当翻译结果无法正常返回时,请参考下表处理

image.png

签名生成

这里需要特别注意,签名生成容易出错!

签名生成分为两步:

  1. 将请求参数中的 APPID(appid), 翻译 query(q,注意为UTF-8编码),随机数(salt),以及平台分配的密钥(可在管理控制台查看) 按照 appid+q+salt+密钥的顺序拼接得到字符串 1。
  2. 对字符串 1 做 MD5 ,得到 32 位小写的 sign(注意一定转小写)。

除此之外,需要注意以下几点:

  • 待翻译文本(q)需为 UTF-8 编码;
  • 在生成签名拼接 appid+q+salt+密钥 字符串时,q 不需要做 URL encode,在生成签名之后,发送 HTTP 请求之前才需要对要发送的待翻译文本字段 q 做 URL encode;
  • 如遇到报 54001 签名错误,请检查您的签名生成方法是否正确,在对 sign 进行拼接和加密时,q 不需要做 URL encode,很多开发者遇到签名报错均是由于拼接 sign 前就做了 URL encode;
  • 在生成签名后,发送 HTTP 请求时,如果将 query 拼接在URL上,需要对 query 做 URL encode。

控制台程序Demo

接下来根据自己需要,参考上文中的参数,编写C#控制台程序,测试调用API接口。

using System;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Web;

class Program
{
    static async Task Main(string[] args)
    {
        while (true)
        {
            var originalText = Console.ReadLine();
            await Translate(originalText);
        }
    }

    static async Task Translate(string originalText)
    {
        string APP_ID = "*************";//您的APPID

        string SecretKey = "****************";//您的密钥

        Random random = new Random();

        string salt = random.Next(10000, 99999).ToString();
        // appid + q + salt + 密钥的MD5值
        string sign = MD5Encrypt(APP_ID + originalText + salt + SecretKey);
        // 将输入的字符串进行URL编码并构造HTTP请求URL
        string url = $"https://fanyi-api.baidu.com/api/trans/vip/translate?" +
                     $"q={HttpUtility.UrlEncode(originalText)}" +
                     $"&from=en" +
                     $"&to=zh" +
                     $"&appid={APP_ID}" +
                     $"&salt={salt}" +
                     $"&sign={sign}";

        try
        {
            using (HttpClient client = new HttpClient())
            {
                // 发送GET请求并获取响应内容
                HttpResponseMessage response = await client.GetAsync(url);
                
                string responseBody = await response.Content.ReadAsStringAsync();
                // 解析响应JSON并输出翻译结果
                dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(responseBody);
                
                Console.WriteLine($"{originalText} 的中文翻译为:{result.trans_result[0].dst}");
            }
        }
        catch (HttpRequestException e)
        {
            Console.WriteLine($"发生HTTP请求错误: {e.Message}");
        }
    }
    
    public static string MD5Encrypt(string input)
    {
        byte[] inputBytes = Encoding.UTF8.GetBytes(input);

        using (MD5 md5 = MD5.Create())
        {
            byte[] hashBytes = md5.ComputeHash(inputBytes);
            
            return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
        }
    }
}

示例图:

image.png

标签:翻译,string,URL,---,API,using,工具,salt
From: https://www.cnblogs.com/pandefu/p/17536274.html

相关文章

  • 并发编程 --- CAS原子操作
    介绍CAS(CompareAndSwap)是一种无锁算法的实现手段,中文名称为比较并交换。它由CPU的原子指令实现,可以在多线程环境下实现无锁的数据结构。原理CAS的原理是:它会先比较内存中的某个值是否和预期值相同,如果相同则更新这个值,否则不做任何操作。这整个过程是原子的,所以可以在......
  • 小工具 --- 树形展示多属性复杂结构类
    灵感最近在做配置模块,然后整个配置的参数是非常多的,层级结构也很深。可能有几百个参数,三、四层的层级关系,想要捋顺所有的类和参数,太繁琐了,而且VisualStudio的类视图只能看到属性,却看不出层级关系来,所以花费些许精力,写一个控制台小程序,展示类结构。原理就是通过反射得到所有属......
  • 从Element日期组件源码中学到的两个工具方法
    最近翻到ElementUI的日期组件源码,看到一些处理日期的工具方法,挺有意思,平常没有注意到,特此记录下来。获取当前日期的前一天,后一天exportconstprevDate=function(date,amount=1){returnnewDate(date.getFullYear(),date.getMonth(),date.getDate()-amount);};......
  • nacos安装-win
    Nacos安装指南1.Windows安装开发阶段采用单机安装即可。1.1.下载安装包在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:GitHub主页:https://github.com/alibaba/nacosGitHub的Release下载页:https://github.com/alibaba/nacos/releases如图:1.2.解......
  • 数据结构与算法 --- 组数、链表、栈和队列(一)
    数组、链表、栈和队列是四种基础数据结构,他们是高级、复杂的数据结构和算法的基础。本篇先来讲述数组,链表,及算法的优化策略。数组定义数组:数组是一种线性表数据结构,它用一组连续的内存空间存储一组具有相同类型的数据。定义中有三个关键词:线性表连续的内存空间相同类型数......
  • 数据结构与算法 --- “哨兵”思想
    引言哨兵思想是指在算法中使用一个特殊值来检测或标记某些条件的发生,它的目的是为了简化代码,并使其更容易理解,常常用于在循环中优化边界条件的判断。介绍在算法中,"哨兵"思想是指在循环中设置一个特殊的元素(称为哨兵),以便在循环过程中能够更高效地处理某些边界情况或结束条件。......
  • 数据结构与算法 --- 组数、链表、栈和队列(二)
    继数据结构与算法---组数、链表、栈和队列(一)讲解完数组,链表及算法的优化策略之后,接下来继续讲解两种特殊的线性表结构,栈和队列。栈对“栈”有一个很形象的比喻,栈就像一摞叠在一起的盘子,放盘子时,只能放在上面,不能将盘子插入到中间的任意位置;取盘子时,只能从最上面取,不能从中间任......
  • 解读 --- 深拷贝
    引言深拷贝是指创建一个新对象,该对象的值与原始对象完全相同,但在内存中具有不同的地址。这意味着如果您对原始对象进行更改,则不会影响到复制的对象常见的C#常见的深拷贝方式有以下4类:各种形式的序列化及反序列化。通过反射机制获取该对象的所有字段和属性信息。遍历所有字段......
  • 数据结构与算法 --- 排序算法(一)
    引言按照时间复杂度,将一些常见排序算法进行分类,分为以下三类:\(O(n^2)\):冒泡排序,插入排序,选择排序。\(O(nlogn)\):快速排序,归并排序。\(O(n)\):桶排序,计数排序,基数排序。本篇文章讨论以下第一类:冒泡排序,插入排序,选择排序。上一篇数据结构与算法---如何分析排序算法提......
  • 数据结构与算法 --- 递归(二)
    引言上文数据结构与算法---递归(一)讲述了什么是递归算法,如何编写递归算法及如何写好递归算法,本文着重讲述一下如何避免递归过深导致的堆栈溢出问题。探究产生堆栈溢出的原因函数调用采用函数调用栈来保存当前“快照”(局部变量,返回地址等)。函数调用栈是内存中开辟的一块存储空......