小工具 --- 百度翻译API翻译工具
引言
最近想把一些英文官方文档的资料翻译成中文,然后转化为Markdown文档,然后发现百度通用翻译的API有不错的免费额度,个人申请也能申请到高级版。这个额度足够个人的日常使用了。
如何使用
如何使用通用翻译API?
注册完毕后,就可以在百度开放翻译平台的管理控制台看到APPID和密钥,这样就可以通过直接调用翻译API了。
以下内容来自百度翻译开放平台官方文档:
API地址
通用翻译API通过 HTTP 接口对外提供多语种互译服务。您只需要通过调用通用翻译API,传入待翻译的内容,并指定要翻译的源语言(支持源语言语种自动检测)和目标语言种类,就可以得到相应的翻译结果。
通用翻译API HTTPS 地址:
https://fanyi-api.baidu.com/api/trans/vip/translate
输入参数
请求方式: 可使用 GET
或 POST
方式,如使用 POST
方式,Content-Type
请指定为:application/x-www-form-urlencoded
。
字符编码:统一采用 UTF-8 编码格式。
query 长度:为保证翻译质量,请将单次请求长度控制在 6000 bytes以内(汉字约为输入参数 2000 个)。
输出参数
返回的结果是json格式,包含以下字段:
错误码
当翻译结果无法正常返回时,请参考下表处理
签名生成
这里需要特别注意,签名生成容易出错!。
签名生成分为两步:
- 将请求参数中的 APPID(appid), 翻译 query(q,注意为UTF-8编码),随机数(salt),以及平台分配的密钥(可在管理控制台查看) 按照 appid+q+salt+密钥的顺序拼接得到字符串 1。
- 对字符串 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();
}
}
}
示例图:
作者: Niuery Daily
出处: https://www.cnblogs.com/pandefu/>
邮箱: defu_pan@163.com
关于作者:.Net Framework,.Net Core ,WindowsForm,WPF ,控件库,多线程
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接,否则保留追究法律责任的权利。 如有问题, 可邮件咨询。