123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Net;
- using System.Security.Cryptography;
- using System.Text;
- using SimpleJSON;
- using UnityEngine;
- using XUnity.AutoTranslator.Plugin.Core.Configuration;
- using XUnity.AutoTranslator.Plugin.Core.Constants;
- using XUnity.AutoTranslator.Plugin.Core.Extensions;
- namespace XUnity.AutoTranslator.Plugin.Core.Web
- {
- public class BaiduTranslateEndpoint : KnownEndpoint
- {
- private static ServicePoint ServicePoint;
- private static readonly string HttpServicePointTemplateUrl = "http://api.fanyi.baidu.com/api/trans/vip/translate?q={0}&from={1}&to={2}&appid={3}&salt={4}&sign={5}";
- private static readonly string HttpsServicePointTemplateUrl = "https://api.fanyi.baidu.com/api/trans/vip/translate?q={0}&from={1}&to={2}&appid={3}&salt={4}&sign={5}";
- private static readonly MD5 HashMD5 = MD5.Create();
- public BaiduTranslateEndpoint()
- : base( KnownEndpointNames.GoogleTranslateLegacy )
- {
- }
- private static string CreateMD5( string input )
- {
- byte[] inputBytes = Encoding.UTF8.GetBytes( input );
- byte[] hashBytes = HashMD5.ComputeHash( inputBytes );
- StringBuilder sb = new StringBuilder();
- for( int i = 0 ; i < hashBytes.Length ; i++ )
- {
- sb.Append( hashBytes[ i ].ToString( "X2" ) );
- }
- return sb.ToString().ToLower();
- }
- public override void ApplyHeaders( Dictionary<string, string> headers )
- {
- headers[ "User-Agent" ] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36";
- headers[ "Accept-Charset" ] = "UTF-8";
- }
- public override void ConfigureServicePointManager()
- {
- try
- {
- ServicePoint = ServicePointManager.FindServicePoint( new Uri( "http://api.fanyi.baidu.com" ) );
- ServicePoint.ConnectionLimit = Settings.MaxConcurrentTranslations;
- }
- catch
- {
- }
- }
- public override bool TryExtractTranslated( string result, out string translated )
- {
- try
- {
- if( result.StartsWith( "{\"error" ) )
- {
- translated = null;
- return false;
- }
- var obj = JSON.Parse( result );
- var lineBuilder = new StringBuilder( result.Length );
- foreach( JSONNode entry in obj.AsObject[ "trans_result" ].AsArray )
- {
- var token = entry.AsObject[ "dst" ].ToString();
- token = token.Substring( 1, token.Length - 2 ).UnescapeJson();
- if( !lineBuilder.EndsWithWhitespaceOrNewline() ) lineBuilder.Append( "\n" );
- lineBuilder.Append( token );
- }
- translated = lineBuilder.ToString();
- return true;
- }
- catch( Exception )
- {
- translated = null;
- return false;
- }
- }
- public override string GetServiceUrl( string untranslatedText, string from, string to )
- {
- string salt = DateTime.UtcNow.Millisecond.ToString();
- var md5 = CreateMD5( Settings.BaiduAppId + untranslatedText + salt + Settings.BaiduAppSecret );
- return string.Format( Settings.EnableSSL ? HttpsServicePointTemplateUrl : HttpServicePointTemplateUrl, WWW.EscapeURL( untranslatedText ), from, to, Settings.BaiduAppId, salt, md5 );
- }
- }
- }
|