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); } }