71 lines
2.6 KiB
C#
71 lines
2.6 KiB
C#
using Fizzler.Systems.HtmlAgilityPack;
|
|
using HtmlAgilityPack;
|
|
using DTLib.Console;
|
|
using File = DTLib.Filesystem.File;
|
|
using Directory = DTLib.Filesystem.Directory;
|
|
|
|
List<string> pageTexts=new List<string>();
|
|
string separator = "\n";
|
|
Action<string>? selectedTarget = null;
|
|
// file url separator
|
|
new LaunchArgumentParser(
|
|
new LaunchArgument(new []{"file"}, "loads local html page", LoadLocalPage, "file_path"),
|
|
new LaunchArgument(new []{"dir"}, "loads html pages from local directory", LoadLocalDir, "dir_path"),
|
|
new LaunchArgument(new []{"url"}, "downloads html page from a website", DownloadPage, "url"),
|
|
new LaunchArgument(new []{"col","collection"}, "parses workshop collection page", ()=>selectedTarget=ParseCollection),
|
|
new LaunchArgument(new []{"sub","subscriptions"}, "parses workshop subscriptions page", ()=>selectedTarget=ParseSubscriptions)
|
|
).ParseAndHandle(args);
|
|
if (selectedTarget is null)
|
|
throw new Exception("no action selected");
|
|
if (pageTexts.Count==0)
|
|
throw new Exception("no page path set");
|
|
foreach (string pageText in pageTexts)
|
|
selectedTarget(pageText);
|
|
|
|
void LoadLocalPage(string path)
|
|
{
|
|
pageTexts.Add(File.ReadAllText(path));
|
|
}
|
|
|
|
void LoadLocalDir(string path)
|
|
{
|
|
foreach (var f in Directory.GetAllFiles(path))
|
|
{
|
|
string text = File.ReadAllText(f);
|
|
if(text.StartsWith("<!DOCTYPE html>"))
|
|
pageTexts.Add(text);
|
|
}
|
|
}
|
|
void DownloadPage(string collectionUrl)
|
|
{
|
|
var http = new HttpClient();
|
|
pageTexts.Add(http.GetStringAsync(collectionUrl).GetAwaiter().GetResult());
|
|
}
|
|
|
|
void ParseCollection(string pageText)
|
|
{
|
|
var page = new HtmlDocument();
|
|
page.LoadHtml(pageText);
|
|
var collectionItems = page.DocumentNode.QuerySelectorAll(".collectionItem");
|
|
var ids = collectionItems.Select(n => n.Id.Remove(0, n.Id.LastIndexOf('_') + 1));
|
|
string rezult = string.Join(separator, ids);
|
|
Console.WriteLine(rezult);
|
|
}
|
|
|
|
void ParseSubscriptions(string pageText)
|
|
{
|
|
var page = new HtmlDocument();
|
|
page.LoadHtml(pageText);
|
|
var collectionItems = page.DocumentNode.QuerySelectorAll(".workshopItemSubscriptionDetails");
|
|
var ids = collectionItems.Select(n => GetSubscriptionId(n));
|
|
string rezult = string.Join(separator, ids);
|
|
Console.WriteLine(rezult);
|
|
}
|
|
|
|
string GetSubscriptionId(HtmlNode n)
|
|
{
|
|
HtmlNode a = n.ChildNodes.First(sn => sn.Name == "a");
|
|
HtmlAttribute href = a.Attributes.First(a => a.Name == "href");
|
|
string url = href.Value;
|
|
return url.Replace("https://steamcommunity.com/sharedfiles/filedetails/?id=", "");
|
|
} |