import datetime, os from importlib import import_module def classgen(string): return string.replace(" ","").replace("#","").replace("-","").replace("ç","c").replace("’","").replace("é","e").replace("(","").replace(")","").replace(":","").lower() def stringno(theno): if theno < 10: return "00" + str(theno) elif theno < 100: return "0" + str(theno) else: return str(theno) ficcount = 999 ficlist = [] while ficcount > 0: ficcount -= 1 ficcountstring = stringno(ficcount) if os.path.exists("files/originalsmeta/" + ficcountstring + ".py"): ficfile = "files.originalsmeta." + ficcountstring fileread = import_module(ficfile) try: if fileread.revealdate <= datetime.datetime.now(): goahead = True else: goahead = False except: goahead = True if goahead == True: ficdict = {} ficdict["id"] = ficcount if fileread.showtitle: ficdict["title"] = fileread.title if fileread.language == "fr": ficdict["french"] = "original" else: ficdict["french"] = False sumwords = 0 for instalment in fileread.datewords: sumwords = sumwords + instalment["words"] ficdict["totalwords"] = sumwords ficdict["startdate"] = fileread.datewords[0]["date"] ficdict["latestdate"] = fileread.datewords[-1]["date"] try: ficdict["approxdate"] = fileread.approxdate except: pass if len(fileread.datewords) > 1: ficdict["chaptered"] = True else: ficdict["chaptered"] = False try: ficdict["completion"] = fileread.status except: ficdict["completion"] = "complete" ficdict["fandoms"] = [] for fandom in fileread.fandom: if fandom == "FF15": ficdict["fandoms"].append("Final Fantasy XV") elif fandom == "FF16": ficdict["fandoms"].append("Final Fantasy XVI") elif fandom == "FF4": ficdict["fandoms"].append("Final Fantasy IV") elif fandom == "FF6": ficdict["fandoms"].append("Final Fantasy VI") elif fandom == "FF7": ficdict["fandoms"].append("Final Fantasy VII") elif fandom == "FF8": ficdict["fandoms"].append("Final Fantasy VIII") elif fandom == "FF9": ficdict["fandoms"].append("Final Fantasy IX") elif fandom == "FFX": ficdict["fandoms"].append("Final Fantasy X") elif fandom == "LOTR": ficdict["fandoms"].append("Lord Of The Rings") else: ficdict["fandoms"].append(fandom) ficlist.append(ficdict) ficdict["charmain"] = [] try: for character in fileread.charpov: ficdict["charmain"].append(character) except: pass try: for character in fileread.charmain: ficdict["charmain"].append(character) except: pass ficdict["charsec"] = [] try: for character in fileread.charsecondary: ficdict["charsec"].append(character) except: pass try: ficdict["ships"] = [] for ship in fileread.ship: if ship != None: ficdict["ships"].append(ship.replace("/"," × ")) except: pass if fileread.genre[0] == "slash" or fileread.genre[0] == "bl" or fileread.genre[0] == "yaoi": ficdict["type"] = "BL" elif fileread.genre[0] == "femslash" or fileread.genre[0] == "gl" or fileread.genre[0] == "yuri": ficdict["type"] = "GL" elif fileread.genre[0] == "het": ficdict["type"] = "hetero" else: ficdict["type"] = "gen" try: if len(fileread.genre) > 1 and fileread.genre[1] != "slash": ficdict["genre"] = fileread.genre[1] else: if fileread.time == "pre-canon" or fileread.time == "mid-canon" or fileread.time == "post-canon" or fileread.time == "AU": ficdict["genre"] = fileread.time except: pass try: ficdict["summary"] = fileread.summary except: pass try: ficdict["event"] = fileread.eventname ficdict["eventtype"] = fileread.event except: pass try: ficdict["prompt"] = fileread.prompt except: ficdict["prompt"] = False if fileread.locked: ficdict["locked"] = True else: ficdict["locked"] = False if fileread.epub: ficdict["epub"] = True else: ficdict["epub"] = False if fileread.pdf: ficdict["pdf"] = True else: ficdict["pdf"] = False try: transid = stringno(fileread.translation) if os.path.exists("files/translationsmeta/" + transid + ".py"): transfile = "files.translationsmeta." + transid transread = import_module(transfile) ficdict["transid"] = int(transid) if transread.showtitle: ficdict["transtitle"] = transread.title if transread.language == "fr": ficdict["french"] = "translation" transwords = 0 for instalment in transread.datewords: transwords = transwords + instalment["words"] ficdict["transwords"] = transwords ficdict["transstartdate"] = transread.datewords[0]["date"] ficdict["translatestdate"] = transread.datewords[-1]["date"] ficdict["transsummary"] = transread.summary except: pass ficlist = sorted(ficlist,key=lambda d: d["latestdate"],reverse=True) fandoms = [] challenges = [] exchanges = [] promptmemes = [] for fic in ficlist: for fandom in fic["fandoms"]: fandoms.append(fandom) try: if fic["eventtype"] == "challenge": challenges.append(fic["event"]) elif fic["eventtype"] == "exchange" or fic["eventtype"] == "ao3exchange": exchanges.append(fic["event"]) elif fic["eventtype"] == "prompt": promptmemes.append(fic["event"]) except: pass fandoms = sorted(list(dict.fromkeys(fandoms))) challenges = sorted(list(dict.fromkeys(challenges))) exchanges = sorted(list(dict.fromkeys(exchanges))) promptmemes = sorted(list(dict.fromkeys(promptmemes))) output = open("index.html", "w") output.write("\n\n \n \n \n praze • Fanfiction\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n

Fanfiction

\n

I’m partway through redesigning my fic archive and plan to gradually reinstate some of the features it used to have; for now, here’s a filterable masterlist. Warnings and ratings are not currently implemented, browse at your own risk. Some fics will have slight inaccuracies in metadata for the time being!

\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n
\n ") for fic in ficlist: output.write("\n
1: output.write(" fandom-crossover") three = False if fic["pdf"] == False: output.write(" format-unusual") # ok for now … elif fic["chaptered"]: output.write(" format-chaptered") else: try: if fic["event"] == "threesentenceficathon": output.write(" format-three") three = True except: pass if three == False: if fic["totalwords"] == 100: output.write(" format-drabble") elif fic["totalwords"] % 100 == 0: output.write(" format-drabblefam") else: output.write(" format-oneshot") try: output.write(" event-" + classgen(fic["event"])) except: output.write(" unprompted") if fic["locked"]: output.write(" locked") output.write("\">\n

no. " + stringno(fic["id"]) + "") try: output.write("/" + stringno(fic["transid"]) + "") except: pass titles = 0 try: if fic["title"]: titles += 1 except: pass try: if fic["transtitle"]: titles += 1 except: pass if titles > 0: output.write(": ") try: output.write(fic["title"]) except: pass if titles > 1: output.write("/") try: output.write(fic["transtitle"]) except: pass output.write("

\n
    \n
  • ") try: if fic["transid"]: if fic["french"] == "original": output.write("French: ") elif fic["french"] == "translation": output.write("English: ") except: pass thewords = fic["totalwords"] output.write(str(f"{thewords:,}" + " words, ")) # output.write(str(fic["totalwords"]) + " words, ") try: output.write(fic["approxdate"]) except: output.write("" + datetime.datetime.strftime(fic["startdate"],"%Y-%m-%d") + "") if fic["completion"] == "incomplete": output.write("–present") elif fic["latestdate"] != fic["startdate"]: output.write("–" + datetime.datetime.strftime(fic["latestdate"],"%Y-%m-%d") + "") if fic["completion"] == "abandoned": output.write(" (abandoned)") output.write("
  • ") try: if fic["transid"]: output.write("\n
  • ") if fic["french"] == "original": output.write("English: ") elif fic["french"] == "translation": output.write("French: ") output.write(str(fic["transwords"]) + " words, " + datetime.datetime.strftime(fic["transstartdate"],"%Y-%m-%d") + "") if fic["translatestdate"] != fic["transstartdate"]: output.write("–" + datetime.datetime.strftime(fic["translatestdate"],"%Y-%m-%d") + "") output.write("
  • ") except: pass output.write("\n
  • " + ", ".join(fic["fandoms"]) + "") if len(fic["charmain"]) > 0: output.write(", " + ", ".join(fic["charmain"])) if len(fic["charsec"]) > 0: output.write(", " + ", ".join(fic["charsec"]) + "") output.write("
  • \n
  • " + fic["type"] + "") try: output.write(", " + fic["genre"]) except: pass output.write("
  • ") try: output.write("\n
  • Written for " + fic["event"] + ".") if fic["prompt"]: output.write(" Prompt: " + fic["prompt"] + ".") output.write("
  • ") except: pass output.write("
  • ") try: if fic["transid"]: if fic["french"] == "original": output.write("French: ") elif fic["french"] == "translation": output.write("English: ") except: pass output.write("HTML") if fic["pdf"]: output.write(" • PDF") if fic["epub"]: output.write(" • EPUB") output.write("
  • ") try: if fic["transid"]: output.write("
  • ") if fic["french"] == "original": output.write("English: ") elif fic["french"] == "translation": output.write("French: ") output.write("HTML") if fic["pdf"]: output.write(" • PDF") if fic["epub"]: output.write(" • EPUB") output.write("
  • ") except: pass output.write("\n
") thesummary = "" try: thesummary += fic["summary"] except: pass try: thesummary += " " + fic["transsummary"] except: pass if len(thesummary) > 0: output.write("\n
\n

" + thesummary + "

\n
") output.write("\n
") output.write("\n
\n
\n \n
\n \n")