Add RSS feeds for books and films

This commit is contained in:
mez 2025-04-27 16:09:11 +01:00
parent 223fb2d88c
commit f98fd67f5a
3 changed files with 150 additions and 3 deletions

5
.gitignore vendored
View file

@ -4,5 +4,6 @@ build/games/*
!build/games/*.png
secrets.py
build/places/*
!build/places/.gitkeep
placelist.py
placelist.py
build/books/*
build/films/*

View file

View file

@ -30,6 +30,11 @@ while year < int(thisyear) + 1:
places = []
placenames = []
books = []
bookids = []
films = []
games = []
gamenames = []
holding = []
@ -102,9 +107,79 @@ for file in concernedfiles:
games.remove(origgame)
games.insert(0,gamemerge)
holding.remove(gameupdate)
if node.heading == "books":
for action in node.children:
if action.heading == "read":
for book in action.children:
bookid = re.sub(" and rated .*","",book.heading)
if bookid not in bookids:
status = "new"
bookids.append(bookid)
else:
status = "existing"
readdate = dateobj
if status == "new":
thedict = {"id":bookid,"readdates":[readdate],"progressdates":[],"obtaineddate":""}
books.append(thedict)
else:
twodict = {"id":bookid,"readdates":[readdate]}
for origbook in books:
if twodict["id"] == origbook["id"]:
origbook["readdates"].extend(twodict["readdates"])
if action.heading == "progress":
for book in action.children:
bookid = book.heading
if bookid not in bookids:
status = "new"
bookids.append(bookid)
else:
status = "existing"
progressdate = dateobj
if status == "new":
thedict = {"id":bookid,"readdates":[],"progressdates":[progressdate],"obtaineddate":""}
books.append(thedict)
else:
twodict = {"id":bookid,"progressdates":[progressdate]}
for origbook in books:
if twodict["id"] == origbook["id"]:
origbook["progressdates"].extend(twodict["progressdates"])
if action.heading == "obtained":
for book in action.children:
bookid = re.sub(" \(.*\)","",book.heading)
if bookid not in bookids:
status = "new"
bookids.append(bookid)
else:
status = "existing"
obtaineddate = dateobj
if status == "new":
thedict = {"id":bookid,"readdates":[],"progressdates":[],"obtaineddate":obtaineddate}
books.append(thedict)
else:
twodict = {"id":bookid,"obtaineddate":[obtaineddate]}
for origbook in books:
if twodict["id"] == origbook["id"]:
origbook["obtaineddate"] = twodict["obtaineddate"]
if node.heading == "films":
for action in node.children:
if action.heading == "watched":
for film in action.children:
filmid = re.sub(" and rated .*","",film.heading)
watchdate = dateobj
thedict = {"id":filmid,"watched":watchdate}
films.append(thedict)
except:
pass
for book in books:
try:
book["title"] = (re.findall(" /.*/",book["id"])[0])[2:-1]
except:
book["title"] = (re.findall("/.*/",book["id"])[0])[1:-1]
book["author"] = re.sub(" /.*/","",book["id"])
if book["author"][0] == "/":
book["author"] = ""
for place in places:
place["dates"] = list(dict.fromkeys(place["dates"]))
@ -927,7 +1002,7 @@ def history():
else:
filewrite.write(event["action"])
filewrite.write("\"></div>\n </div>\n <div> " + event["name"] + "\n <span>(" + event["console"] + ")</span>\n </div>\n </div>\n </div>\n")
feedwrite.write(" <item>\n <title>" + event["action"] + " " + event["name"] + " (" + event["console"] + ")</title>\n <pubDate>" + event["date"].strftime("%a, %-d %b %Y") + " 00:00:00 GMT</pubDate>\n <link>https://tre.praze.net/trackers/games/history</link>\n <guid isPermaLink=\"false\">" + event["action"] + "-" + event["name"].replace(" ","-") + "-" + event["console"] + "</guid>\n <description>" + event["action"] + " " + event["name"] + " (" + event["console"] + ")</description>\n </item>\n")
feedwrite.write(" <item>\n <title>" + event["action"] + " " + event["name"] + " (" + event["console"] + ")</title>\n <pubDate>" + event["date"].strftime("%a, %-d %b %Y") + " 00:00:00 GMT</pubDate>\n <link>https://tre.praze.net/trackers/games/history</link>\n <guid isPermaLink=\"false\">" + event["action"] + "-" + event["name"].replace(" ","-") + "-" + event["date"].strftime("%Y-%m-%d") + "</guid>\n <description>" + event["action"] + " " + event["name"] + " (" + event["console"] + ")</description>\n </item>\n")
checkdate = event["date"]
theyear -= 1
@ -1028,3 +1103,74 @@ def history():
if __name__ == "__main__":
history()
def bookfeed():
if not os.path.isdir("build/books"):
os.mkdir("build/books")
if os.path.exists("build/books/feed.xml"):
os.remove("build/books/feed.xml")
feedwrite = open("build/books/feed.xml", "a")
feedwrite.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/trackers/books/feed.xml\" rel=\"self\" type=\"application/rss+xml\" />\n <title>Book log</title>\n <link>https://tre.praze.net</link>\n <description>Feed for book updates</description>\n <language>en-gb</language>")
theyear = int(thisyear)
while theyear >= 1993:
yearlist = []
enddate = datetime.strptime((str(theyear) + "-12-31"),"%Y-%m-%d")
startdate = datetime.strptime((str(theyear) + "-01-01"),"%Y-%m-%d")
eachdate = enddate
while eachdate >= startdate:
for book in books:
if eachdate in book["readdates"]:
yearlist.append({"date":eachdate,"author":book["author"],"title":book["title"].replace("&","&amp;"),"action":"Read"})
try:
if book["progressdates"][0] == eachdate:
yearlist.append({"date":eachdate,"author":book["author"],"title":book["title"].replace("&","&amp;"),"action":"Reading"})
except:
pass
if book["obtaineddate"] == eachdate:
yearlist.append({"date":eachdate,"author":book["author"],"title":book["title"].replace("&","&amp;"),"action":"Added"})
eachdate -= timedelta(days=1)
checkdate = enddate
for event in yearlist:
feedwrite.write(" <item>\n <title>" + event["action"] + " " + event["title"] + "</title>\n <pubDate>" + event["date"].strftime("%a, %-d %b %Y") + " 00:00:00 GMT</pubDate>\n <link>https://tre.praze.net</link>\n <guid isPermaLink=\"false\">" + event["action"] + "-" + event["author"].replace(" ","-") + event["title"].replace(" ","-") + "-" + event["date"].strftime("%Y-%m-%d") + "</guid>\n <description>" + event["action"] + " " + event["title"] + " by " + event["author"] + "</description>\n </item>\n")
checkdate = event["date"]
theyear -= 1
feedwrite.write(" </channel>\n</rss>")
feedwrite.close()
if __name__ == "__main__":
bookfeed()
def filmfeed():
if not os.path.isdir("build/films"):
os.mkdir("build/films")
if os.path.exists("build/films/feed.xml"):
os.remove("build/films/feed.xml")
feedwrite = open("build/films/feed.xml", "a")
feedwrite.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/trackers/films/feed.xml\" rel=\"self\" type=\"application/rss+xml\" />\n <title>Film log</title>\n <link>https://tre.praze.net</link>\n <description>Feed of films I have watched</description>\n <language>en-gb</language>")
theyear = int(thisyear)
while theyear >= 1993:
yearlist = []
enddate = datetime.strptime((str(theyear) + "-12-31"),"%Y-%m-%d")
startdate = datetime.strptime((str(theyear) + "-01-01"),"%Y-%m-%d")
eachdate = enddate
while eachdate >= startdate:
for film in films:
if film["watched"] == eachdate:
yearlist.append({"date":eachdate,"id":film["id"].replace("&","&amp;")})
eachdate -= timedelta(days=1)
checkdate = enddate
for event in yearlist:
feedwrite.write(" <item>\n <title>Watched " + event["id"] + "</title>\n <pubDate>" + event["date"].strftime("%a, %-d %b %Y") + " 00:00:00 GMT</pubDate>\n <link>https://tre.praze.net</link>\n <guid isPermaLink=\"false\">" + event["id"].replace(" ","-") + "-" + event["date"].strftime("%Y-%m-%d") + "</guid>\n <description>Watched " + event["id"] + "</description>\n </item>\n")
checkdate = event["date"]
theyear -= 1
feedwrite.write(" </channel>\n</rss>")
feedwrite.close()
if __name__ == "__main__":
filmfeed()