]> fortfriendship.online Git - gnargle.github.io.git/blob - RSSGen/Program.cs
final update for tonight
[gnargle.github.io.git] / RSSGen / Program.cs
1 using OpenGraphNet;
2 using RssFeedGenerator;
3 using System;
4 using System.Collections.Generic;
5 using System.IO;
6 using System.Runtime.InteropServices;
7
8 // See https://aka.ms/new-console-template for more information
9 Console.WriteLine("Scanning entries folder for latest files");
10
11 var folder = FindDirectory("entries");
12
13 var filePaths = Directory.EnumerateFiles(folder);
14 var fileInfos = new List<FileInfo>();
15
16 if (filePaths.Any())
17 {
18 foreach (var path in filePaths)
19 {
20 if (Path.GetFileNameWithoutExtension(path).Equals("template", StringComparison.InvariantCultureIgnoreCase))
21 continue;
22 var fInfo = new FileInfo(path);
23 fileInfos.Add(fInfo);
24 }
25 }
26
27 Console.WriteLine("Scanning projects folder for latest files");
28
29 folder = FindDirectory("projects");
30
31 filePaths = Directory.EnumerateFiles(folder);
32
33 if (filePaths.Any())
34 {
35 foreach (var path in filePaths)
36 {
37 var fInfo = new FileInfo(path);
38 fileInfos.Add(fInfo);
39 }
40 }
41
42 Console.WriteLine("Scanning diversions folder for latest files");
43
44 folder = FindDirectory("diversions");
45
46 filePaths = Directory.EnumerateFiles(folder);
47
48 if (filePaths.Any())
49 {
50 foreach (var path in filePaths)
51 {
52 var fInfo = new FileInfo(path);
53 fileInfos.Add(fInfo);
54 }
55 }
56
57 fileInfos = fileInfos.OrderByDescending(f => f.CreationTimeUtc).Take(20).ToList();
58
59 var myRSS = new rss();
60
61 myRSS.version = 2.0m;
62
63 myRSS.channel = new rssChannel
64 {
65 title = "athene.gay entries",
66 description = "blog entries for athene.gay",
67 language = "en-GB",
68 link = "https://athene.gay",
69 item = new List<rssChannelItem>(),
70 link1 = new link
71 {
72 href = "https://athene.gay/feed.xml",
73 rel = "self",
74 type = "application/rss+xml",
75 }
76 };
77
78 foreach (var file in fileInfos)
79 {
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()
84 {
85 title = graph.Title,
86 description = graph.Metadata["og:description"].First(),
87 pubDate = publishDate.ToString("r"),
88 };
89 if (file.FullName.Contains("entries"))
90 {
91 item.link = "https://athene.gay/entries/" + Path.GetFileName(file.Name);
92 }
93 else if (file.FullName.Contains("projects"))
94 {
95 item.link = "https://athene.gay/projects/" + Path.GetFileName(file.Name);
96 }
97 else if (file.FullName.Contains("diversions"))
98 {
99 item.link = "https://athene.gay/diversions/" + Path.GetFileName(file.Name);
100 }
101 item.guid = new rssChannelItemGuid()
102 {
103 isPermaLink = true,
104 Value = item.link
105 };
106 myRSS.channel.item.Add(item);
107 }
108
109 var output = Generator.SerializeRSS(myRSS);
110
111 var rssPath = Path.Combine(Directory.GetCurrentDirectory(), "../feed.xml");
112
113 if (!File.Exists(rssPath))
114 {
115 rssPath = Path.Combine(Directory.GetCurrentDirectory(), "../../../../feed.xml");
116 }
117
118 if (File.Exists(rssPath))
119 {
120 File.Delete(rssPath);
121 }
122
123 Console.WriteLine("Main RSS generated, outputting to file");
124
125 File.WriteAllText(rssPath, output);
126
127 Console.WriteLine("Generating hentai subseries feed");
128
129 folder = FindDirectory("diversions/hentaigames");
130
131 filePaths = Directory.EnumerateFiles(folder);
132 fileInfos = new List<FileInfo>();
133
134 if (filePaths.Any())
135 {
136 foreach (var path in filePaths)
137 {
138 if (Path.GetFileNameWithoutExtension(path).Equals("template", StringComparison.InvariantCultureIgnoreCase))
139 continue;
140 if (Path.GetFileNameWithoutExtension(path).Equals("list", StringComparison.InvariantCultureIgnoreCase))
141 continue;
142 var fInfo = new FileInfo(path);
143 fileInfos.Add(fInfo);
144 }
145 }
146
147 fileInfos = fileInfos.OrderByDescending(f => f.CreationTimeUtc).Take(20).ToList();
148
149 myRSS = new rss();
150
151 myRSS.version = 2.0m;
152
153 myRSS.channel = new rssChannel
154 {
155 title = "athene.gay - hentai games subseries entries",
156 description = "entries in the hentai game sub-series for athene.gay",
157 language = "en-GB",
158 link = "https://athene.gay/hentaigames/list.html",
159 item = new List<rssChannelItem>(),
160 link1 = new link
161 {
162 href = "https://athene.gay/hentaigames.xml",
163 rel = "self",
164 type = "application/rss+xml",
165 }
166 };
167
168 foreach (var file in fileInfos)
169 {
170 var htmlString = File.ReadAllText(file.FullName);
171 OpenGraph graph = OpenGraph.ParseHtml(htmlString);
172 var publishDate = DateTime.Parse(graph.Metadata["article:published_time"].First());
173 var item = new rssChannelItem()
174 {
175 title = graph.Title,
176 description = graph.Metadata["og:description"].First(),
177 pubDate = publishDate.ToString("r"),
178 link = "https://athene.gay/diversions/hentaigames/" + Path.GetFileName(file.Name)
179 };
180 item.guid = new rssChannelItemGuid()
181 {
182 isPermaLink = true,
183 Value = item.link
184 };
185 myRSS.channel.item.Add(item);
186 }
187
188 output = Generator.SerializeRSS(myRSS);
189
190 rssPath = Path.Combine(Directory.GetCurrentDirectory(), "../hentaigames.xml");
191
192 if (!File.Exists(rssPath))
193 {
194 rssPath = Path.Combine(Directory.GetCurrentDirectory(), "../../../../hentaigames.xml");
195 }
196
197 if (File.Exists(rssPath))
198 {
199 File.Delete(rssPath);
200 }
201
202 Console.WriteLine("Hentai Games RSS generated, outputting to file");
203
204 File.WriteAllText(rssPath, output);
205
206
207 string FindDirectory(string folderName)
208 {
209 var folder = Path.Combine(Directory.GetCurrentDirectory(), $"../{folderName}");
210 if (!Directory.Exists(folder))
211 {
212 folder = Path.Combine(Directory.GetCurrentDirectory(), $"../../../../{folderName}");
213 }
214 return folder;
215 }