]> fortfriendship.online Git - gnargle.github.io.git/blobdiff - RSSGen/Program.cs
skeleton new entry, make rssgen platform agnostic (bin output folder is based on...
[gnargle.github.io.git] / RSSGen / Program.cs
index f64ac3f079af66c13cf08c4c16ada95a7816ef0d..dde1a5207ff68812309252ff46f474852e8d8d24 100644 (file)
@@ -1,12 +1,16 @@
-using RssFeedGenerator;
+using OpenGraphNet;
+using RssFeedGenerator;
 using System;
 using System.Collections.Generic;
 using System.IO;
+using System.Runtime.InteropServices;
 
 // See https://aka.ms/new-console-template for more information
 Console.WriteLine("Scanning entries folder for latest files");
 
-var filePaths = Directory.EnumerateFiles(Path.Combine(Directory.GetCurrentDirectory(), "../../../../entries"));
+var folder = FindDirectory("entries");
+
+var filePaths = Directory.EnumerateFiles(folder);
 var fileInfos = new List<FileInfo>();
 
 if (filePaths.Any())
@@ -22,7 +26,24 @@ if (filePaths.Any())
 
 Console.WriteLine("Scanning projects folder for latest files");
 
-filePaths = Directory.EnumerateFiles(Path.Combine(Directory.GetCurrentDirectory(), "../../../../projects"));
+folder = FindDirectory("projects");
+
+filePaths = Directory.EnumerateFiles(folder);
+
+if (filePaths.Any())
+{
+    foreach (var path in filePaths)
+    {
+        var fInfo = new FileInfo(path);
+        fileInfos.Add(fInfo);
+    }
+}
+
+Console.WriteLine("Scanning diversions folder for latest files");
+
+folder = FindDirectory("diversions");
+
+filePaths = Directory.EnumerateFiles(folder);
 
 if (filePaths.Any())
 {
@@ -33,7 +54,7 @@ if (filePaths.Any())
     }
 }
 
-fileInfos = fileInfos.OrderByDescending(f => f.CreationTimeUtc).Take(10).ToList();
+fileInfos = fileInfos.OrderByDescending(f => f.CreationTimeUtc).Take(20).ToList();
 
 var myRSS = new rss();
 
@@ -45,15 +66,25 @@ myRSS.channel = new rssChannel
     description = "blog entries for athene.gay",
     language = "en-GB",
     link = "https://athene.gay",
-    item = new List<rssChannelItem>()
+    item = new List<rssChannelItem>(),
+    link1 = new link
+    {
+        href = "https://athene.gay/feed.xml",
+        rel = "self",
+        type = "application/rss+xml",
+    }
 };
 
 foreach (var file in fileInfos)
 {
+    var htmlString = File.ReadAllText(file.FullName);
+    OpenGraph graph = OpenGraph.ParseHtml(htmlString);
+    var publishDate = DateTime.Parse(graph.Metadata["article:published_time"].First());
     var item = new rssChannelItem()
     {
-        title = Path.GetFileNameWithoutExtension(file.Name),
-        pubDate = file.CreationTimeUtc.ToString(),
+        title = graph.Title,
+        description = graph.Metadata["og:description"].First(),
+        pubDate = publishDate.ToString("r"),
     };
     if (file.FullName.Contains("entries"))
     {
@@ -63,12 +94,26 @@ foreach (var file in fileInfos)
     {
         item.link = "https://athene.gay/projects/" + Path.GetFileName(file.Name);
     }
+    else if (file.FullName.Contains("diversions"))
+    {
+        item.link = "https://athene.gay/diversions/" + Path.GetFileName(file.Name);
+    }
+    item.guid = new rssChannelItemGuid()
+    {
+        isPermaLink = true,
+        Value = item.link
+    };
     myRSS.channel.item.Add(item);
 }
 
 var output = Generator.SerializeRSS(myRSS);
 
-var rssPath = Path.Combine(Directory.GetCurrentDirectory(), "../../../../feed.xml");
+var rssPath = Path.Combine(Directory.GetCurrentDirectory(), "../feed.xml");
+
+if (!File.Exists(rssPath))
+{
+    rssPath = Path.Combine(Directory.GetCurrentDirectory(), "../../../../feed.xml");
+}
 
 if (File.Exists(rssPath))
 {
@@ -78,4 +123,14 @@ if (File.Exists(rssPath))
 Console.WriteLine("RSS generated, outputting to console and file");
 Console.WriteLine(output);
 
-File.WriteAllText(rssPath, output);
\ No newline at end of file
+File.WriteAllText(rssPath, output);
+
+string FindDirectory(string folderName)
+{
+    var folder = Path.Combine(Directory.GetCurrentDirectory(), $"../{folderName}");
+    if (!Directory.Exists(folder))
+    {
+        folder = Path.Combine(Directory.GetCurrentDirectory(), $"../../../../{folderName}");
+    }
+    return folder;
+}
\ No newline at end of file