You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

204 lines
9.4 KiB
Python

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import datetime, os, re
from importlib import import_module
"""
Code to generate RSS feed
"""
def feedgen(local=False):
# delete existing file
if os.path.exists("build/feed.xml"):
os.remove("build/feed.xml")
# write header
header = open("build/feed.xml", "a")
header.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n<channel>\n<atom:link href=\"https://tre.praze.net/fic/feed.xml\" rel=\"self\" type=\"application/rss+xml\" />\n<title>Trés fic archive</title>\n<link>https://tre.praze.net/fic</link>\n<description>All my fanfiction</description>\n<language>en-gb</language>\n")
header.close()
datelist = []
ficcount = 500
while ficcount > 0:
ficcount -= 1
if ficcount < 10:
ficcountstring = "00" + str(ficcount)
elif ficcount < 100:
ficcountstring = "0" + str(ficcount)
else:
ficcountstring = str(ficcount)
if os.path.exists("files/originalsmeta/" + ficcountstring + ".py"):
ficfile = "files.originalsmeta." + ficcountstring
fileread = import_module(ficfile)
try:
if fileread.revealdate <= datetime.datetime.now():
datelist.append(fileread.revealdate)
except:
for instalment in fileread.datewords:
datelist.append(instalment["date"])
elif os.path.exists("files/translationsmeta/" + ficcountstring + ".py"):
ficfile = "files.translationsmeta." + ficcountstring
fileread = import_module(ficfile)
for instalment in fileread.datewords:
datelist.append(instalment["date"])
newlist = []
for date in datelist:
if date not in newlist:
newlist.append(date)
newlist = sorted(newlist,reverse=True)
for date in newlist:
ficcount = 500
while ficcount > 0:
ficcount -= 1
if ficcount < 10:
ficcountstring = "00" + str(ficcount)
elif ficcount < 100:
ficcountstring = "0" + str(ficcount)
else:
ficcountstring = str(ficcount)
targetfile = 0
if os.path.exists("files/originalsmeta/" + ficcountstring + ".py"):
ficfile = "files.originalsmeta." + ficcountstring
fileread = import_module(ficfile)
try:
if fileread.revealdate <= datetime.datetime.now():
if fileread.revealdate == date:
if targetfile == 0:
targetfile = ficfile
except:
for instalment in fileread.datewords:
if instalment["date"] == date:
if targetfile == 0:
targetfile = ficfile
elif os.path.exists("files/translationsmeta/" + ficcountstring + ".py"):
transfile = "files.translationsmeta." + ficcountstring
transread = import_module(transfile)
for instalment in transread.datewords:
if instalment["date"] == date:
if targetfile == 0:
targetfile = transfile
else:
targetfile = 0
if targetfile:
thefile = import_module(targetfile)
filewrite = open("build/feed.xml", "a")
filewrite.write("<item>\n<title>")
try:
if thefile.revealdate == True:
pass
except:
if (thefile.datewords[0])["date"] != date:
filewrite.write("Updated: ")
filewrite.write("Fic " + ficcountstring)
if thefile.language == "fr":
filewrite.write (" (French)")
filewrite.write(": ")
try:
origfile = "files.originalsmeta." + str(thefile.original)
origread = import_module(origfile)
try:
filewrite.write(origread.fandomtext)
except:
filewrite.write("/".join(origread.fandom))
try:
filewrite.write(", " + origread.ship[0].replace("/"," × "))
except:
try:
filewrite.write(", " + ", ".join(origread.charpov))
except:
pass
try:
filewrite.write(", " + ", ".join(origread.charmain))
except:
pass
if origread.rating == "g":
therating = "U"
elif origread.rating == "t":
therating = "G+"
elif origread.rating == "m":
therating = "M"
elif origread.rating == "e":
therating = "X"
filewrite.write(", rated " + therating)
if len(origread.genre) > 1:
genred = False
for thegenre in origread.genre:
if genred == False:
if thegenre == "gen" or thegenre == "slash" or thegenre == "pre-slash" or thegenre == "poly slash" or thegenre == "het" or thegenre == "pre-het" or thegenre == "femslash" or thegenre == "poly" or thegenre == "masturbation":
pass
else:
filewrite.write(", " + thegenre)
genred = True
except:
try:
filewrite.write(thefile.fandomtext)
except:
filewrite.write("/".join(thefile.fandom))
try:
filewrite.write(", " + thefile.ship[0].replace("/"," × "))
except:
try:
filewrite.write(", " + ", ".join(thefile.charpov))
except:
pass
try:
filewrite.write(", " + ", ".join(thefile.charmain))
except:
pass
if thefile.rating == "g":
therating = "U"
elif thefile.rating == "t":
therating = "G+"
elif thefile.rating == "m":
therating = "M"
elif thefile.rating == "e":
therating = "X"
filewrite.write(", rated " + therating)
if len(thefile.genre) > 1:
genred = False
for thegenre in thefile.genre:
if genred == False:
if thegenre == "gen" or thegenre == "slash" or thegenre == "pre-slash" or thegenre == "poly slash" or thegenre == "het" or thegenre == "pre-het" or thegenre == "femslash" or thegenre == "poly" or thegenre == "masturbation":
pass
else:
filewrite.write(", " + thegenre)
genred = True
filewrite.write("</title>\n<pubDate>")
futuredate = date + datetime.timedelta(days=2)
filewrite.write(futuredate.strftime("%a, %-d %b %Y"))
filewrite.write(" 00:00:00 GMT</pubDate>\n<link>")
if local:
filewrite.write("/home/mdd/Documents/proj/fic-archive/build/")
else:
filewrite.write("https://tre.praze.net/fic/")
filewrite.write("single/" + ficcountstring)
if local:
filewrite.write("/index.html")
filewrite.write("</link>\n<guid isPermaLink=\"false\">praze-fic-" + ficcountstring)
datecount = 0
dateindex = 0
for instalment in thefile.datewords:
if date == instalment["date"]:
dateindex = datecount
datecount += 1
if dateindex > 0:
filewrite.write("-" + str(dateindex + 1))
filewrite.write("</guid>\n<description>")
filewrite.write(str((thefile.datewords[dateindex])["words"]) + " words")
if dateindex > 0:
filewrite.write(" in this update")
filewrite.write(".")
try:
filewrite.write(" " + re.sub("<[^<]+?>","",re.sub("<span class=\"spoiler\">.*</span>","[spoiler]",thefile.summary)))
except:
filewrite.write(" No summary provided.")
try:
filewrite.write(" A translation of fic " + str(thefile.original) + ".")
except:
pass
filewrite.write("</description>\n</item>\n")
filewrite.close()
# write footer
footer = open("build/feed.xml", "a")
footer.write("</channel>\n</rss>")
footer.close()
if __name__ == "__main__":
feedgen()