11using System ;
22using System . Collections . Generic ;
3- using System . Text ;
4- using System . Text . RegularExpressions ;
5- using System . Security . Cryptography ;
63using System . Net . Http ;
74using System . Threading . Tasks ;
85using Newtonsoft . Json ;
@@ -13,16 +10,7 @@ namespace MORT.TransAPI
1310 public class PapagoWebTranslateAPI
1411 {
1512 private static readonly string UrlBase = "https://papago.naver.com" ;
16- private static readonly string UrlN2MT = "/apis/n2mt/translate" ; // Neural Machine Translation
17- private static readonly string FormUrlEncodedTemplate = "deviceId={0}&locale=en&dict=false&honorific=false&instant=true&source={1}&target={2}&text={3}" ;
18-
19- private static readonly Guid UUID = Guid . NewGuid ( ) ;
20-
21- private static readonly Regex patternSource = new Regex ( @"/main\..*?\.chunk\.js" , RegexOptions . Compiled | RegexOptions . Singleline ) ;
22- private static readonly Regex patternVersion = new Regex ( @"v\d\.\d\.\d_[^""]+" , RegexOptions . Compiled | RegexOptions . Singleline ) ;
23-
24- private double _nextUpdate = 0 ;
25- private string _version ; // HMAC 키
13+ private static readonly string UrlN2MT = "/api/text/translation" ;
2614
2715 private string _transCode ;
2816 private string _resultCode ;
@@ -45,36 +33,18 @@ public class TestPA
4533
4634 System . Net . Http . HttpClient httpClient = new System . Net . Http . HttpClient ( ) ;
4735
48- // 현재 유닉스 밀리 초
49- var timestamp = Math . Truncate ( DateTime . Now . Subtract ( DateTime . MinValue . AddYears ( 1969 ) ) . TotalMilliseconds ) ;
50-
51- // 버전이 없거나 마지막으로 버전 확인하고 10분 지났다면 업데이트하기
52- if ( _nextUpdate == 0 || _nextUpdate <= timestamp )
53- {
54- _nextUpdate = timestamp + ( 60 * 10 * 1000 ) ;
55- await updateVersion ( httpClient ) ;
56- }
36+ httpClient . DefaultRequestHeaders . UserAgent . ParseAdd ( "Mozilla/5.0" ) ;
37+ httpClient . DefaultRequestHeaders . Referrer = new Uri ( UrlBase + "/" ) ;
38+ httpClient . DefaultRequestHeaders . Accept . ParseAdd ( "application/json" ) ;
39+ httpClient . DefaultRequestHeaders . AcceptLanguage . ParseAdd ( "en" ) ;
5740
5841 var url = UrlBase + UrlN2MT ;
59- var param = string . Format ( FormUrlEncodedTemplate , UUID , _transCode , _resultCode , text ) ;
60-
61- // 버전을 키로 사용한 HmacMD5 으로 인증 토큰 만들기
62- var key = Encoding . UTF8 . GetBytes ( _version ) ;
63- var data = Encoding . UTF8 . GetBytes ( $ "{ UUID } \n { url } \n { timestamp } ") ;
64- var token = Convert . ToBase64String ( new HMACMD5 ( key ) . ComputeHash ( data ) ) ;
65-
66- // 최소 헤더 보내기
67- httpClient . DefaultRequestHeaders . Add ( "Authorization" , $ "PPG { UUID } :{ token } ") ;
68- httpClient . DefaultRequestHeaders . Add ( "Timestamp" , timestamp . ToString ( ) ) ;
6942
7043 var paramDic = new Dictionary < string , string >
7144 {
72- { "Content-Type" , "application/x-www-form-urlencoded; charset=UTF-8" } ,
73- { "deviceId" , UUID . ToString ( ) } ,
74- { "locale" , "en" } ,
7545 { "dict" , "false" } ,
7646 { "honorific" , "false" } ,
77- { "instant " , "true " } ,
47+ { "useGlossary " , "false " } ,
7848 { "source" , _transCode } ,
7949 { "target" , _resultCode } ,
8050 { "text" , text }
@@ -123,27 +93,6 @@ public class TestPA
12393 return ( result , false ) ;
12494 }
12595
126- private async Task updateVersion ( System . Net . Http . HttpClient wc )
127- {
128- //https://papago.naver.com/?sk=ko&tk=en&st=%EA%B0%80%EB%B2%84%EB%A0%B7
129- //https://papago.naver.com/?sk=ko&tk=en&st=가버렷
130- // 메인 페이지에서 버전 불러올 수 있는 자바스크립트 주소 찾아오기
131- var main = await wc . GetStringAsync ( UrlBase ) ;
132- var mainMatch = patternSource . Match ( main ) ;
133-
134- // 자바스크립트 속에서 현재 파파고 버전 확인하기
135- var script = await wc . GetStringAsync ( UrlBase + mainMatch . Value ) ;
136- //var scriptMatch = patternVersion.Match(script);
137-
138- string pattern = "\" PPG \" (.*)\" (.*?)\" \\ ).toString" ;
139- Match match = Regex . Match ( script , pattern , RegexOptions . IgnoreCase ) ;
140-
141- if ( match . Success )
142- {
143- _version = match . Groups [ 1 ] . Value ;
144- }
145- }
146-
14796 public void Init ( string transCode , string resultCode )
14897 {
14998 _transCode = transCode ;
0 commit comments