YandexTranslateEndpoint.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Net;
  5. using System.Text;
  6. using SimpleJSON;
  7. using UnityEngine;
  8. using XUnity.AutoTranslator.Plugin.Core.Configuration;
  9. using XUnity.AutoTranslator.Plugin.Core.Constants;
  10. using XUnity.AutoTranslator.Plugin.Core.Extensions;
  11. namespace XUnity.AutoTranslator.Plugin.Core.Web
  12. {
  13. public class YandexTranslateEndpoint : KnownHttpEndpoint
  14. {
  15. private static readonly string HttpsServicePointTemplateUrl = "https://translate.yandex.net/api/v1.5/tr.json/translate?key={3}&text={2}&lang={0}-{1}&format=plain";
  16. public YandexTranslateEndpoint()
  17. {
  18. ServicePointManager.ServerCertificateValidationCallback += Security.AlwaysAllowByHosts( "translate.yandex.net" );
  19. }
  20. public override void ApplyHeaders( WebHeaderCollection headers )
  21. {
  22. headers[ HttpRequestHeader.UserAgent ] = Settings.GetUserAgent( "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.183 Safari/537.36 Vivaldi/1.96.1147.55" );
  23. headers[ HttpRequestHeader.Accept ] = "*/*";
  24. headers[ HttpRequestHeader.AcceptCharset ] = "UTF-8";
  25. }
  26. public override bool TryExtractTranslated( string result, out string translated )
  27. {
  28. try
  29. {
  30. var obj = JSON.Parse( result );
  31. var lineBuilder = new StringBuilder( result.Length );
  32. var code = obj.AsObject[ "code" ].ToString();
  33. if( code == "200" )
  34. {
  35. var token = obj.AsObject[ "text" ].ToString();
  36. token = token.Substring( 2, token.Length - 4 ).UnescapeJson();
  37. if( String.IsNullOrEmpty( token ) )
  38. {
  39. translated = null;
  40. return false;
  41. }
  42. if( !lineBuilder.EndsWithWhitespaceOrNewline() ) lineBuilder.Append( "\n" );
  43. lineBuilder.Append( token );
  44. translated = lineBuilder.ToString();
  45. return true;
  46. }
  47. else
  48. {
  49. translated = null;
  50. return false;
  51. }
  52. }
  53. catch( Exception )
  54. {
  55. translated = null;
  56. return false;
  57. }
  58. }
  59. public override string GetServiceUrl( string untranslatedText, string from, string to )
  60. {
  61. return string.Format( HttpsServicePointTemplateUrl, from, to, WWW.EscapeURL( untranslatedText ), Settings.YandexAPIKey );
  62. }
  63. }
  64. }