2 using RssFeedGenerator;
4 using System.Collections.Generic;
6 using System.Runtime.InteropServices;
8 // See https://aka.ms/new-console-template for more information
9 Console.WriteLine("Scanning entries folder for latest files");
11 var folder = FindDirectory("entries");
13 var filePaths = Directory.EnumerateFiles(folder);
14 var fileInfos = new List<FileInfo>();
18 foreach (var path in filePaths)
20 if (Path.GetFileNameWithoutExtension(path).Equals("template", StringComparison.InvariantCultureIgnoreCase))
22 var fInfo = new FileInfo(path);
27 Console.WriteLine("Scanning projects folder for latest files");
29 folder = FindDirectory("projects");
31 filePaths = Directory.EnumerateFiles(folder);
35 foreach (var path in filePaths)
37 var fInfo = new FileInfo(path);
42 Console.WriteLine("Scanning diversions folder for latest files");
44 folder = FindDirectory("diversions");
46 filePaths = Directory.EnumerateFiles(folder);
50 foreach (var path in filePaths)
52 var fInfo = new FileInfo(path);
57 fileInfos = fileInfos.OrderByDescending(f => f.CreationTimeUtc).Take(20).ToList();
59 var myRSS = new rss();
63 myRSS.channel = new rssChannel
65 title = "athene.gay entries",
66 description = "blog entries for athene.gay",
68 link = "https://athene.gay",
69 item = new List<rssChannelItem>(),
72 href = "https://athene.gay/feed.xml",
74 type = "application/rss+xml",
78 foreach (var file in fileInfos)
80 var htmlString = File.ReadAllText(file.FullName);
81 OpenGraph graph = OpenGraph.ParseHtml(htmlString);
82 var publishDate = DateTime.Parse(graph.Metadata["article:published_time"].First());
83 var item = new rssChannelItem()
86 description = graph.Metadata["og:description"].First(),
87 pubDate = publishDate.ToString("r"),
89 if (file.FullName.Contains("entries"))
91 item.link = "https://athene.gay/entries/" + Path.GetFileName(file.Name);
93 else if (file.FullName.Contains("projects"))
95 item.link = "https://athene.gay/projects/" + Path.GetFileName(file.Name);
97 else if (file.FullName.Contains("diversions"))
99 item.link = "https://athene.gay/diversions/" + Path.GetFileName(file.Name);
101 item.guid = new rssChannelItemGuid()
106 myRSS.channel.item.Add(item);
109 var output = Generator.SerializeRSS(myRSS);
111 var rssPath = Path.Combine(Directory.GetCurrentDirectory(), "../feed.xml");
113 if (!File.Exists(rssPath))
115 rssPath = Path.Combine(Directory.GetCurrentDirectory(), "../../../../feed.xml");
118 if (File.Exists(rssPath))
120 File.Delete(rssPath);
123 Console.WriteLine("RSS generated, outputting to console and file");
124 Console.WriteLine(output);
126 File.WriteAllText(rssPath, output);
128 string FindDirectory(string folderName)
130 var folder = Path.Combine(Directory.GetCurrentDirectory(), $"../{folderName}");
131 if (!Directory.Exists(folder))
133 folder = Path.Combine(Directory.GetCurrentDirectory(), $"../../../../{folderName}");