天天看點

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

作者:opendotnet

引言

最近想把一些英文官方文檔的資料翻譯成中文,然後轉化為Markdown文檔,然後發現百度通用翻譯的API有不錯的免費額度,個人申請也能申請到進階版。這個額度足夠個人的日常使用了。

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

如何使用

如何使用通用翻譯API?

  • 使用您的百度賬号登入百度翻譯開放平台;
  • 注冊成為開發者,獲得 APPID ;
  • 進行開發者認證(如僅需标準版可跳過);
  • 開通通用翻譯API服務:開通連結;
  • 參考技術文檔和 Demo 編寫代碼。

注冊完畢後,就可以在百度開放翻譯平台的管理控制台看到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 個)。

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

輸出參數

傳回的結果是json格式,包含以下字段:

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

錯誤碼

當翻譯結果無法正常傳回時,請參考下表處理

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

簽名生成

「這裡需要特别注意,簽名生成容易出錯!」。

簽名生成分為兩步:

  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();
 }
 }
}
           

示例圖:

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

參考

百度翻譯開放平台文檔位址:https://fanyi-api.baidu.com/doc/21

繼續閱讀