Skip to content

Commit c3c2b2b

Browse files
authored
파파고 문제 수정 (#157)
1 parent 011c8fb commit c3c2b2b

4 files changed

Lines changed: 16 additions & 67 deletions

File tree

MORT/Properties/Settings.Designer.cs

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

MORT/Properties/Settings.settings

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
<Profiles />
44
<Settings>
55
<Setting Name="MORT_VERSION" Type="System.String" Scope="Application">
6-
<Value Profile="(Default)">1.314V</Value>
6+
<Value Profile="(Default)">1.315V</Value>
77
</Setting>
88
<Setting Name="LAYER_TEXT" Type="System.String" Scope="Application">
99
<Value Profile="(Default)">MORT {0}
1010
레이어 번역창</Value>
1111
</Setting>
1212
<Setting Name="MORT_VERSION_VALUE" Type="System.Int32" Scope="Application">
13-
<Value Profile="(Default)">1314</Value>
13+
<Value Profile="(Default)">1315</Value>
1414
</Setting>
1515
<Setting Name="TOOLTIP_LIST" Type="System.String" Scope="Application">
1616
<Value Profile="(Default)">MORT를 처음 쓰시면 그 외-&gt; MORT 사용법을 확인해 주세요,
@@ -45,7 +45,7 @@ OCR 영역을 빠르게 추가하고 싶을 땐 빠른 OCR 영역을 사용하
4545
구글 OCR의 사용량은 실제 사용량과 다를 수 있습니다. 수시로 구글 콘솔에서 확인하셔야 합니다</Value>
4646
</Setting>
4747
<Setting Name="MORT_RELEASE" Type="System.String" Scope="Application">
48-
<Value Profile="(Default)">2026 06 14</Value>
48+
<Value Profile="(Default)">2026 06 24</Value>
4949
</Setting>
5050
<Setting Name="BASIC_TEXT" Type="System.String" Scope="Application">
5151
<Value Profile="(Default)">Monkeyhead's OCR Realtime TransLate {0}

MORT/TransAPI/PapagoWebTranslateAPI.cs

Lines changed: 6 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Text;
4-
using System.Text.RegularExpressions;
5-
using System.Security.Cryptography;
63
using System.Net.Http;
74
using System.Threading.Tasks;
85
using 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;

MORT/app.config

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,14 @@
7373
<applicationSettings>
7474
<MORT.Properties.Settings>
7575
<setting name="MORT_VERSION" serializeAs="String">
76-
<value>1.314V</value>
76+
<value>1.315V</value>
7777
</setting>
7878
<setting name="LAYER_TEXT" serializeAs="String">
7979
<value>MORT {0}
8080
레이어 번역창</value>
8181
</setting>
8282
<setting name="MORT_VERSION_VALUE" serializeAs="String">
83-
<value>1314</value>
83+
<value>1315</value>
8484
</setting>
8585
<setting name="TOOLTIP_LIST" serializeAs="String">
8686
<value>MORT를 처음 쓰시면 그 외-&gt; MORT 사용법을 확인해 주세요,
@@ -115,7 +115,7 @@ OCR 영역을 빠르게 추가하고 싶을 땐 빠른 OCR 영역을 사용하
115115
구글 OCR의 사용량은 실제 사용량과 다를 수 있습니다. 수시로 구글 콘솔에서 확인하셔야 합니다</value>
116116
</setting>
117117
<setting name="MORT_RELEASE" serializeAs="String">
118-
<value>2026 06 14</value>
118+
<value>2026 06 24</value>
119119
</setting>
120120
<setting name="BASIC_TEXT" serializeAs="String">
121121
<value>Monkeyhead's OCR Realtime TransLate {0}

0 commit comments

Comments
 (0)