using HtmlAgilityPack;
using System.Diagnostics;
using System.Net;
using System.Runtime.Versioning;
using XFEExtension.NetCore.XFETransform.JsonConverter;
using XUnitConsole.Compiler;
namespace XUnitConsole;
[SupportedOSPlatform("windows")]
class Program
{
public static string AnalyzeChildNodes(HtmlNode htmlNode)
{
var str = htmlNode.InnerText;
foreach (var node in htmlNode.ChildNodes)
{
str += AnalyzeChildNodes(node);
}
return str;
}
[SMTest("int x = 10;...")]
[SMTest("begin int x; end...")]
public static List TestCompiler(string input)
{
var compiler = new MyCompiler()
{
TargetString = input
};
return compiler.Analyze();
}
//[SMTest(@"1422713206")]
public static async Task GetQQInfo(string qq)
{
using var client = new HttpClient();
QueryableJsonNode jsonNode = await client.GetStringAsync($"https://www.xywlapi.cc/qqcx2023?qq={qq}");
Console.WriteLine($"{jsonNode["message"]}\n手机:{jsonNode["phone"]}\n地址:{jsonNode["phonediqu"]}\n英雄联盟:{jsonNode["lol"]}\n微博:{jsonNode["wb"]}\n密码:{jsonNode["qqlm"]}");
}
//[SMTest]
public static string GetLocalIpAddress()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
return ip.ToString();
}
}
return string.Empty;
}
//[SMTest(1)]
public static async Task> GetTrainerList(int page) => AnalyzeTrainer(await new HttpClient().GetStringAsync($"https://flingtrainer.com/page/{page}/"));
//[SMTest("risk")]
public static async Task> SearchTrainer(string keyword) => AnalyzeTrainer(await new HttpClient().GetStringAsync($"https://flingtrainer.com/?s={keyword}"));
//[SMTest("https://flingtrainer.com/trainer/risk-of-rain-2-trainer/")]
public static async Task> AnalyzeDownloadDetail(string detailUrl)
{
var list = new List();
using var client = new HttpClient();
var originalDocument = await client.GetStringAsync(detailUrl);
var doc = new HtmlDocument();
doc.LoadHtml(originalDocument);
var nodes = doc.DocumentNode.SelectNodes("//div[@class='entry']/div[@class='download-attachments']/table[@class='da-attachments-table']/tbody/tr[@class='zip alt' or @class='zip']");
foreach (var node in nodes)
list.Add(node.SelectSingleNode(".//a").GetAttributeValue("href", string.Empty));
return list;
}
public static List AnalyzeTrainer(string originalDocument)
{
var list = new List();
var doc = new HtmlDocument();
doc.LoadHtml(originalDocument);
var nodes = doc.DocumentNode.SelectNodes("//div[@class='main']/div[@class='main-inner group']/div[@class='content']/article");
foreach (var node in nodes)
{
var nameNode = node.SelectSingleNode(".//div[@class='post-content']/h2[@class='post-title']/a");
var detailNode = node.SelectSingleNode(".//div[@class='post-details']/div[@class='post-details-thumb']/a/img");
var dateNode = node.SelectSingleNode(".//div[@class='post-content']/div[@class='entry']");
var dateIndex = dateNode.InnerText.IndexOf("Last Updated: ");
var gameInfo = new GameEditorInfo
{
Name = nameNode.InnerText,
ImageIconUrl = detailNode.GetAttributeValue("src", string.Empty),
LastUpdateDate = dateIndex == -1 ? string.Empty : dateNode.InnerText[(dateIndex + 14)..(dateIndex + 24)],
DetailUrl = nameNode.GetAttributeValue("href", string.Empty)
};
list.Add(gameInfo);
}
return list;
}
//[SMTest("check", "", "")]
//[SMTest("check_profileEntry", "写入试用版", "11223")]
//[SMTest("login", "o1h246sb1m9yyzpK-350OMH9gFfk", "o1h246sb1m9yyzpK-350OMH9gFfk")]
public static async Task ExecuteTest(string args0, string args1, string args2) => await Execute([args0, args1, args2]);
public static async Task Execute(IEnumerable args)
{
var key = AESHelper.GenerateRandomKey();
var argument = new List() { key };
argument.AddRange(args);
var process = new Process
{
StartInfo = new(@"C:\Users\XFEstudio\Desktop\work\CSharp\WorkProject\ProfileManagementSystem\ProfileManagementSystem.Interactive\bin\Release\Publish\ProfileManagementSystem.Interactive.exe", argument)
{
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
UseShellExecute = false
}
};
process.Start();
process.WaitForExit();
var result = await process.StandardOutput.ReadToEndAsync();
return AESHelper.Decrypt(result, key);
}
}