using ComPDFKit_Conversion.Options;
using DryIoc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using PDF_Master.Properties;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using static Dropbox.Api.Files.SearchMatchType;
using static Dropbox.Api.TeamLog.EventCategory;
namespace PDF_Master.Helper
{
public static class ChatGTPAIHelper
{
private static string host = "https://ai.compdf.com";
private static string translate = "http://101.132.103.13:8030";
///
/// 翻译文档Key接口
///
private static string Uri_fileKeytranslate = translate + "/v1/translate/fileUpload";
///
/// 翻译文档接口
///
private static string Uri_filetranslate = translate + "/v1/translate/fileTranslateHandle";
///
/// 翻译文本接口
///
private static string Uri_texttranslate = translate + "/v1/translate/textTrans";
/////
///// FAQ接口
/////
//private static string Uri_FAQ = host + "/find-faq";
/////
///// 跳转接口
/////
//private static string Uri_GoToView = host + "/recognition";
/////
///// 摘要接口
/////
//private static string Uri_Summary = host + "/summary";
///
/// 错别字纠正
///
private static string Uri_Correction = host + "/api/correct-typos";
///
/// 错别字纠正
///
private static string Uri_Rewrite = host + "/api/rewrite";
///
/// 翻译指定内容,可以指定语言
///
///
/// 1=中文 2=英文 3=法语 4=汉语
///
public async static Task fileKeyTranslate(string content, string filename)
{
HttpWebResponse response = null;
ServicePointManager.DefaultConnectionLimit = 200;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri_fileKeytranslate);
request.Method = "Post";
var formData = new MultipartFormDataContent();
byte[] data = File.ReadAllBytes(@content);
MemoryStream stream = new MemoryStream(data);
formData.Add(new ByteArrayContent(data), "file", filename);
formData.Add(new StringContent("2"), "projectId");
formData.Add(new StringContent("1.0.1"), "version");
if (!string.IsNullOrEmpty(Settings.Default.UserDate.id))
{
formData.Add(new StringContent(Settings.Default.UserDate.id), "userId");
}
else
{
formData.Add(new StringContent("1"), "userId");
}
// 设置请求体格式
request.ContentType = formData.Headers.ContentType.ToString();
request.ContentLength = formData.Headers.ContentLength.Value;
// 将FormData写入请求体
using (var requestStream = request.GetRequestStream())
{
await formData.CopyToAsync(requestStream);
}
try
{
// 获取HTTP响应
HttpWebResponse response2 = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response2.GetResponseStream()))
{
string responseData = reader.ReadToEnd();
Console.WriteLine(responseData);
reader.Close();
JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
if (response2 != null)
{
response2.Close();
}
if (request != null)
{
request.Abort();
}
if (jobject["code"].ToObject().ToLower() == "200")
{
translate = jobject["data"]["fileKey"].ToObject().ToLower();
}
//return jobject["code"].ToObject().ToLower();
return translate;
}
return "";
}
catch (WebException ex)
{
Console.WriteLine("HTTP异常:" + ex.Message);
return "";
}
}
public static string HttpDownloadFile(string url, string path)
{
// 设置参数
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
//发送请求并获取相应回应数据
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
Stream responseStream = response.GetResponseStream();
//创建本地文件写入流
Stream stream = new FileStream(path, FileMode.Create);
byte[] bArr = new byte[1024];
int size = responseStream.Read(bArr, 0, (int)bArr.Length);
while (size > 0)
{
stream.Write(bArr, 0, size);
size = responseStream.Read(bArr, 0, (int)bArr.Length);
}
stream.Close();
responseStream.Close();
return path;
}
///
/// 翻译指定内容,可以指定语言
///
/// 文本Key
/// 文本语言
/// 需要翻译的语言
///
public static async Task fileTranslate(string content, string fromlanguage, string tolanguage)
{
FileInfo file = new FileInfo(content);
string fileKey = await fileKeyTranslate(content, file.Name);
HttpWebResponse response = null;
ServicePointManager.DefaultConnectionLimit = 200;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri_filetranslate);
request.Method = "Post";
request.ContentType = "application/json";
//request.Accept = "application/vnd.api+json;version=1";
request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
request.Timeout = 20000;
request.ServicePoint.Expect100Continue = false;
StringWriter sw = new StringWriter();
using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.WriteStartObject();
writer.WritePropertyName("fileKey");
writer.WriteValue(fileKey);
writer.WritePropertyName("from");
writer.WriteValue(fromlanguage);
writer.WritePropertyName("to");
writer.WriteValue(tolanguage);
writer.WritePropertyName("projectId");
writer.WriteValue("2");
writer.WritePropertyName("version");
writer.WriteValue("1.0.1");
writer.WritePropertyName("userId");
writer.WriteValue(Settings.Default.UserDate.id);
writer.WriteEndObject();
}
try
{
string postBody = sw.ToString();
using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(postBody);
writer.Close();
}
response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string responseData = reader.ReadToEnd();
Console.WriteLine(responseData);
reader.Close();
JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
if (jobject["code"].ToObject().ToLower() == "200")
{
translate = jobject["data"]["ossDownUrl"].ToObject().ToLower();
}
//return jobject["code"].ToObject().ToLower();
using (var client = new WebClient())
{
string folderPath = Path.Combine(App.CurrentPath, "DownloadFile");
//有可能因为其他原因存在同名文件,导致创建文件夹失败,需要先删除同名文件
if (File.Exists(folderPath))
{
File.Delete(folderPath);
}
DirectoryInfo tempfolder = new DirectoryInfo(folderPath);
if (!tempfolder.Exists)
{
tempfolder.Create();
}
client.DownloadProgressChanged += (sender, e) =>
{
};
client.DownloadFile(translate, folderPath + "\\" + file.Name.Replace(file.Extension,".pdf"));
}
return "200";
}
}
catch
{
return "300";
}
}
///
/// 翻译指定内容,可以指定语言
///
/// 翻译内容
/// 文本语言
/// 需要翻译的语言
///
public static String textTranslate(string content, string fromlanguage, string tolanguage, ref string translate)
{
HttpWebResponse response = null;
ServicePointManager.DefaultConnectionLimit = 200;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri_texttranslate);
request.Method = "Post";
request.ContentType = "application/json";
//request.Accept = "application/vnd.api+json;version=1";
request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
request.Timeout = 20000;
request.ServicePoint.Expect100Continue = false;
StringWriter sw = new StringWriter();
using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.WriteStartObject();
writer.WritePropertyName("q");
writer.WriteValue(content);
writer.WritePropertyName("from");
writer.WriteValue(fromlanguage);
writer.WritePropertyName("to");
writer.WriteValue(tolanguage);
writer.WritePropertyName("projectId");
writer.WriteValue("2");
writer.WritePropertyName("version");
writer.WriteValue("1.0.1");
writer.WritePropertyName("userId");
writer.WriteValue(Settings.Default.UserDate.id);
writer.WriteEndObject();
}
try
{
string postBody = sw.ToString();
using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(postBody);
writer.Close();
}
response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string responseData = reader.ReadToEnd();
Console.WriteLine(responseData);
reader.Close();
JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
if (jobject["code"].ToObject().ToLower() == "200")
{
translate = jobject["data"]["dst"].ToObject().ToLower();
}
//return jobject["code"].ToObject().ToLower();
return "200";
}
}
catch
{
return "300";
}
}
///
/// 纠错
///
///
///
public async static Task Correction(string content)
{
System.Collections.Specialized.NameValueCollection namevalue = new System.Collections.Specialized.NameValueCollection();
//需要纠错的内容
namevalue["project_id"] = "2";
namevalue["version"] = "1.0.1";
if (!string.IsNullOrEmpty(Settings.Default.UserDate.id))
{
namevalue["user_id"] = Settings.Default.UserDate.id;
}
else
{
namevalue["user_id"] = "3";
}
namevalue["content"] = content;
return await PostString(Uri_Correction, namevalue, "content");
}
///
/// 重写
///
///
///
public async static Task Rewrite(string content)
{
System.Collections.Specialized.NameValueCollection namevalue = new System.Collections.Specialized.NameValueCollection();
//需要纠错的内容
namevalue["project_id"] = "2";
namevalue["version"] = "1.0.1";
if (!string.IsNullOrEmpty(Settings.Default.UserDate.id))
{
namevalue["user_id"] = Settings.Default.UserDate.id;
}
else
{
namevalue["user_id"] = "3";
}
namevalue["content"] = content;
return await PostString(Uri_Rewrite, namevalue, "content");
}
/////
///// 页面跳转
/////
/////
/////
//public async static Task GoToView(string content)
//{
// System.Collections.Specialized.NameValueCollection namevalue = new System.Collections.Specialized.NameValueCollection();
// //需要翻译的内容
// namevalue["str"] = content;
// return await PostString(Uri_GoToView, namevalue, "flag");
//}
///
/// 从链接中返回存在的链接(仅返回第一个找到的链接)
///
///
///
public static List GetLinkFromString(string content)
{
if (string.IsNullOrEmpty(content))
{
return null;
}
// 创建正则表达式模式
string pattern = @"(https?://[^\s]+)";
// 获取所有匹配项
MatchCollection matches = Regex.Matches(content, pattern);
List list = new List();
// 遍历并打印所有匹配项
foreach (Match match in matches)
{
list.Add(match.Value);
}
return list;
}
///
/// 从接口获取信息,获取message对应value值
///
///
///
///
private async static Task PostString(string url, System.Collections.Specialized.NameValueCollection namevalue, string key = "message")
{
string repsonseData = "";
try
{
using (var client = new WebClient())
{
byte[] bytes = await client.UploadValuesTaskAsync(url, namevalue);
//转换成字符串类型
var json = Encoding.Default.GetString(bytes);
//将Json格式字符串转换成键值对
//var values = JsonConvert.DeserializeObject>(json);
JObject jobject = (JObject)JsonConvert.DeserializeObject(json);
string unicode = "";
// 遍历字典对象输出键值对
unicode = jobject["data"][key].ToObject().ToLower();
//将Unicode格式转换成String
//repsonseData = Regex.Unescape(unicode);
repsonseData = unicode;
}
}
catch (Exception ex)
{
return null;
}
return repsonseData;
}
public static List FromlanguageFamily { set; get; } = new List();
public static List SetFromlanguageOrigin()
{
FromlanguageFamily.Clear();
FromlanguageFamily.Add("Automatic Identification");
FromlanguageFamily.Add("English");
FromlanguageFamily.Add("Simplified Chinese");
FromlanguageFamily.Add("Traditional Chinese");
FromlanguageFamily.Add("Japanese");
FromlanguageFamily.Add("Korean");
FromlanguageFamily.Add("French");
FromlanguageFamily.Add("Spanish");
FromlanguageFamily.Add("Italian");
FromlanguageFamily.Add("German");
FromlanguageFamily.Add("Portuguese");
FromlanguageFamily.Add("Russian");
FromlanguageFamily.Add("Vietnamese");
FromlanguageFamily.Add("Thai");
FromlanguageFamily.Add("Arabic");
FromlanguageFamily.Add("Greek");
FromlanguageFamily.Add("Bulgarian");
FromlanguageFamily.Add("Finnish");
FromlanguageFamily.Add("Slovene");
FromlanguageFamily.Add("Dutch");
FromlanguageFamily.Add("Czech");
FromlanguageFamily.Add("Swedish");
FromlanguageFamily.Add("Polish");
FromlanguageFamily.Add("Danish");
FromlanguageFamily.Add("Romanian");
FromlanguageFamily.Add("Hungarian");
return FromlanguageFamily;
}
public static List TolanguageFamily { set; get; } = new List();
public static List SetTolanguageOrigin()
{
TolanguageFamily.Clear();
TolanguageFamily.Add("English");
TolanguageFamily.Add("Simplified Chinese");
TolanguageFamily.Add("Traditional Chinese");
TolanguageFamily.Add("Japanese");
TolanguageFamily.Add("Korean");
TolanguageFamily.Add("French");
TolanguageFamily.Add("Spanish");
TolanguageFamily.Add("Italian");
TolanguageFamily.Add("German");
TolanguageFamily.Add("Portuguese");
TolanguageFamily.Add("Russian");
TolanguageFamily.Add("Vietnamese");
TolanguageFamily.Add("Thai");
TolanguageFamily.Add("Arabic");
TolanguageFamily.Add("Greek");
TolanguageFamily.Add("Bulgarian");
TolanguageFamily.Add("Finnish");
TolanguageFamily.Add("Slovene");
TolanguageFamily.Add("Dutch");
TolanguageFamily.Add("Czech");
TolanguageFamily.Add("Swedish");
TolanguageFamily.Add("Polish");
TolanguageFamily.Add("Danish");
TolanguageFamily.Add("Romanian");
TolanguageFamily.Add("Hungarian");
return TolanguageFamily;
}
public static string UpdateLanguagebType(int index)
{
switch (index)
{
case 0:
return "auto";
case 1:
return "en";
case 2:
return "zh";
case 3:
return "cht";
case 4:
return "jp";
case 5:
return "kor";
case 6:
return "fra";
case 7:
return "spa";
case 8:
return "it";
case 9:
return "de";
case 10:
return "pt";
case 11:
return "ru";
case 12:
return "vie";
case 13:
return "th";
case 14:
return "ara";
case 15:
return "el";
case 16:
return "bul";
case 17:
return "fin";
case 18:
return "slo";
case 19:
return "nl";
case 20:
return "cs";
case 21:
return "swe";
case 22:
return "pl";
case 23:
return "dan";
case 24:
return "rom";
case 25:
return "hu";
default:
return"";
}
}
}
}