import datetime, os, re from importlib import import_module starttime = datetime.datetime(1998,1,1) endtime = datetime.datetime.today().date() choosetime = input("Select a date range? [y/N]\n") if choosetime == "y": choosestart = input("Select a start date? [Y/n]\n") if choosestart != "n": starttimestring = input("Input start date (YYYYMMDD):\n") starttime = datetime.datetime.strptime(starttimestring, "%Y%m%d") chooseend = input("Select an end date? [Y/n]\n") if chooseend != "n": endtimestring = input("Input end date (YYYYMMDD):\n") endtime = datetime.datetime.strptime(endtimestring, "%Y%m%d") while endtime < starttime: print("End date is before start date") choosestart = input("Select a new start date? [Y/n]\n") if choosestart != "n": starttimestring = input("Input start date (YYYYMMDD):\n") starttime = datetime.datetime.strptime(starttimestring, "%Y%m%d") endtimestring = input("Input end date (YYYYMMDD):\n") endtime = datetime.datetime.strptime(endtimestring, "%Y%m%d") if starttime == datetime.datetime(1998,1,1): if endtime == datetime.datetime.today().date(): print("Date range selected: all time") else: print("Date range selected: start to " + endtime.strftime("%Y-%m-%d")) elif endtime == datetime.datetime.today().date(): print("Date range selected: " + starttime.strftime("%Y-%m-%d") + " to now") else: print("Date range selected: " + starttime.strftime("%Y-%m-%d") + " to " + endtime.strftime("%Y-%m-%d")) if endtime == datetime.datetime.today().date(): endtime = datetime.datetime.today() minwords = 0 maxwords = 500000 choosewords = input("Select a word count range? [y/N]\n") if choosewords == "y": chooseminwords = input("Select a minimum word count? [Y/n]\n") if chooseminwords != "n": minwords = int(input("Input minimum word count:\n")) choosemaxwords = input("Select a maximum word count? [Y/n]\n") if choosemaxwords != "n": maxwords = int(input("Input maximum word count:\n")) while maxwords < minwords: print("Minimum word count exceeds maximum word count") chooseminwords = input("Select a new minimum word count? [Y/n]\n") if chooseminwords != "n": minwords = int(input("Input minimum word count:\n")) maxwords = int(input("Input maximum word count:\n")) if minwords == 0: if maxwords == 500000: print("Word count range selected: all") else: print("Word count range selected: up to " + str(maxwords)) elif maxwords == 500000: print("Word count range selected: at least " + str(minwords)) else: print("Word count range selected: " + str(minwords) + " to " + str(maxwords)) chooselang = input("Choose languages: English only [e], French only [f], or all [any key]\n") ficlist = [] ficcount = 500 while ficcount > 0: fileread = "" 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) elif os.path.exists("files/translationsmeta/" + ficcountstring + ".py"): ficfile = "files.translationsmeta." + ficcountstring fileread = import_module(ficfile) if fileread: if (fileread.datewords[0])["date"] >= starttime: if (fileread.datewords[-1])["date"] <= endtime: sumwords = 0 for instalment in fileread.datewords: sumwords = sumwords + instalment["words"] if minwords <= sumwords <= maxwords: if chooselang == "e": if fileread.language == "en": ficlist.append(ficcount) elif chooselang == "f": if fileread.language == "fr": ficlist.append(ficcount) else: ficlist.append(ficcount) fandomslist = [] for fic in ficlist: fileread = "" if fic < 10: ficstring = "00" + str(fic) elif fic < 100: ficstring = "0" + str(fic) else: ficstring = str(fic) if os.path.exists("files/originalsmeta/" + ficstring + ".py"): ficfile = "files.originalsmeta." + ficstring fileread = import_module(ficfile) elif os.path.exists("files/translationsmeta/" + ficstring + ".py"): ficfile = "files.translationsmeta." + ficstring fileread = import_module(ficfile) if fileread: try: fandomslist.extend(fileread.fandom) except: try: origno = fileread.original if origno < 10: orignostring = "00" + str(origno) elif origno < 100: orignostring = "0" + str(origno) else: orignostring = str(origno) if os.path.exists("files/originalsmeta/" + orignostring + ".py"): orignofile = "files.originalsmeta." + orignostring origread = import_module(orignofile) fandomslist.extend(origread.fandom) except: pass fandomlist = [] for fandom in fandomslist: if fandom not in fandomlist: fandomlist.append(fandom) fandomlist.sort() fandomnumbers = [] for fandom in fandomlist: thenumber = 0 for fic in ficlist: fileread = "" if fic < 10: ficstring = "00" + str(fic) elif fic < 100: ficstring = "0" + str(fic) else: ficstring = str(fic) if os.path.exists("files/originalsmeta/" + ficstring + ".py"): ficfile = "files.originalsmeta." + ficstring fileread = import_module(ficfile) elif os.path.exists("files/translationsmeta/" + ficstring + ".py"): ficfile = "files.translationsmeta." + ficstring fileread = import_module(ficfile) if fileread: try: if fandom in fileread.fandom: thenumber += 1 except: try: origno = fileread.original if origno < 10: orignostring = "00" + str(origno) elif origno < 100: orignostring = "0" + str(origno) else: orignostring = str(origno) if os.path.exists("files/originalsmeta/" + orignostring + ".py"): orignofile = "files.originalsmeta." + orignostring origread = import_module(orignofile) if fandom in origread.fandom: thenumber += 1 except: pass fandomnumbers.append({"fandom":fandom,"number":thenumber,"filtercheck":False}) fandomnumbers = sorted(fandomnumbers, key=lambda d: d["number"],reverse=True) print("Fandoms:") for fandom in fandomnumbers: if fandom["number"] > 1: print(fandom["fandom"] + ": " + str(fandom["number"]) + " fics") else: print(fandom["fandom"] + ": " + str(fandom["number"]) + " fic") fandomfilter = input("Filter by fandom? [y/N]\n") if fandomfilter == "y": filteredfandoms = [] fandommin = 0 fandommax = 500 choosemin = input("Choose only fandoms over a certain number of fics? [y/N]\n") if choosemin == "y": minstring = input("Minimum number of fics:\n") fandommin = int(minstring) choosemax = input("Choose only fandoms under a certain number of fics? [y/N]\n") if choosemax == "y": maxstring = input("Maximum number of fics:\n") fandommax = int(maxstring) refinefandoms = "y" if choosemin == "y" or choosemax == "y": refinefandoms = input("Refine fandoms further? [y/N]\n") for fandom in fandomnumbers: if fandommin <= fandom["number"] <= fandommax: if refinefandoms == "y": while fandom["filtercheck"] == False: thefilter = input("Include " + fandom["fandom"] + " (" + str(fandom["number"]) + ")? [y/n]\n") if thefilter == "y": filteredfandoms.append(fandom) fandom["filtercheck"] = True elif thefilter == "n": fandom["filtercheck"] = True else: print("Choose y or n") continue else: filteredfandoms.append(fandom) newficlist = [] for fic in ficlist: fileread = "" if fic < 10: ficstring = "00" + str(fic) elif fic < 100: ficstring = "0" + str(fic) else: ficstring = str(fic) if os.path.exists("files/originalsmeta/" + ficstring + ".py"): ficfile = "files.originalsmeta." + ficstring fileread = import_module(ficfile) elif os.path.exists("files/translationsmeta/" + ficstring + ".py"): ficfile = "files.translationsmeta." + ficstring fileread = import_module(ficfile) if fileread: for fandom in filteredfandoms: try: if fandom["fandom"] in fileread.fandom: newficlist.append(fic) except: try: origno = fileread.original if origno < 10: orignostring = "00" + str(origno) elif origno < 100: orignostring = "0" + str(origno) else: orignostring = str(origno) if os.path.exists("files/originalsmeta/" + orignostring + ".py"): orignofile = "files.originalsmeta." + orignostring origread = import_module(orignofile) if fandom["fandom"] in origread.fandom: newficlist.append(fic) except: pass ficlist = list(dict.fromkeys(newficlist)) shipslist = [] for fic in ficlist: fileread = "" if fic < 10: ficstring = "00" + str(fic) elif fic < 100: ficstring = "0" + str(fic) else: ficstring = str(fic) if os.path.exists("files/originalsmeta/" + ficstring + ".py"): ficfile = "files.originalsmeta." + ficstring fileread = import_module(ficfile) elif os.path.exists("files/translationsmeta/" + ficstring + ".py"): ficfile = "files.translationsmeta." + ficstring fileread = import_module(ficfile) if fileread: try: for ship in fileread.ship: if ship != None: shipslist.append(ship) except: try: origno = fileread.original if origno < 10: orignostring = "00" + str(origno) elif origno < 100: orignostring = "0" + str(origno) else: orignostring = str(origno) if os.path.exists("files/originalsmeta/" + orignostring + ".py"): orignofile = "files.originalsmeta." + orignostring origread = import_module(orignofile) try: for ship in origread.ship: if ship != None: shipslist.append(ship) except: shipslist.append("Gen") except: shipslist.append("Gen") shiplist = [] for ship in shipslist: if ship not in shiplist: shiplist.append(ship) shiplist.sort() genlist = {} for fic in ficlist: fileread = "" if fic < 10: ficstring = "00" + str(fic) elif fic < 100: ficstring = "0" + str(fic) else: ficstring = str(fic) if os.path.exists("files/originalsmeta/" + ficstring + ".py"): ficfile = "files.originalsmeta." + ficstring fileread = import_module(ficfile) elif os.path.exists("files/translationsmeta/" + ficstring + ".py"): ficfile = "files.translationsmeta." + ficstring fileread = import_module(ficfile) if fileread: try: if ship in fileread.ship: pass except: try: origno = fileread.original if origno < 10: orignostring = "00" + str(origno) elif origno < 100: orignostring = "0" + str(origno) else: orignostring = str(origno) if os.path.exists("files/originalsmeta/" + orignostring + ".py"): orignofile = "files.originalsmeta." + orignostring origread = import_module(orignofile) try: if ship in origread.ship: pass except: genlist[fic] = True except: genlist[fic] = True shipnumbers = [] for ship in shiplist: if ship != "Gen": thenumber = 0 for fic in ficlist: if fic not in genlist.keys(): fileread = "" if fic < 10: ficstring = "00" + str(fic) elif fic < 100: ficstring = "0" + str(fic) else: ficstring = str(fic) if os.path.exists("files/originalsmeta/" + ficstring + ".py"): ficfile = "files.originalsmeta." + ficstring fileread = import_module(ficfile) elif os.path.exists("files/translationsmeta/" + ficstring + ".py"): ficfile = "files.translationsmeta." + ficstring fileread = import_module(ficfile) if fileread: try: if ship in fileread.ship: thenumber += 1 except: try: origno = fileread.original if origno < 10: orignostring = "00" + str(origno) elif origno < 100: orignostring = "0" + str(origno) else: orignostring = str(origno) if os.path.exists("files/originalsmeta/" + orignostring + ".py"): orignofile = "files.originalsmeta." + orignostring origread = import_module(orignofile) try: if ship in origread.ship: thenumber += 1 except: pass except: pass if thenumber > 0: shipnumbers.append({"ship":ship,"number":thenumber,"filtercheck":False}) shipnumbers.append({"ship":"Gen","number":len(genlist),"filtercheck":False}) shipnumbers = sorted(shipnumbers, key=lambda d: d["number"],reverse=True) # print(shipnumbers) print("Ships:") for ship in shipnumbers: if ship["number"] > 1: print(ship["ship"] + ": " + str(ship["number"]) + " fics") else: print(ship["ship"] + ": " + str(ship["number"]) + " fic") shipfilter = input("Filter by ship? [y/N]\n") if shipfilter == "y": filteredships = [] shipmin = 0 shipmax = 500 choosemin = input("Choose only ships over a certain number of fics? [y/N]\n") if choosemin == "y": minstring = input("Minimum number of fics:\n") shipmin = int(minstring) choosemax = input("Choose only ships under a certain number of fics? [y/N]\n") if choosemax == "y": maxstring = input("Maximum number of fics:\n") shipmax = int(maxstring) refineships = "y" if choosemin == "y" or choosemax == "y": refineships = input("Refine ships further? [y/N]\n") for ship in shipnumbers: if shipmin <= ship["number"] <= shipmax: if refineships == "y": while ship["filtercheck"] == False: thefilter = input("Include " + ship["ship"] + " (" + str(ship["number"]) + ")? [y/n]\n") if thefilter == "y": filteredships.append(ship) ship["filtercheck"] = True elif thefilter == "n": ship["filtercheck"] = True else: print("Choose y or n") continue else: filteredships.append(ship) newficlist = [] for fic in ficlist: fileread = "" if fic < 10: ficstring = "00" + str(fic) elif fic < 100: ficstring = "0" + str(fic) else: ficstring = str(fic) if os.path.exists("files/originalsmeta/" + ficstring + ".py"): ficfile = "files.originalsmeta." + ficstring fileread = import_module(ficfile) elif os.path.exists("files/translationsmeta/" + ficstring + ".py"): ficfile = "files.translationsmeta." + ficstring fileread = import_module(ficfile) if fileread: for ship in filteredships: if ship["ship"] != "Gen": try: if ship["ship"] in fileread.ship: newficlist.append(fic) except: try: origno = fileread.original if origno < 10: orignostring = "00" + str(origno) elif origno < 100: orignostring = "0" + str(origno) else: orignostring = str(origno) if os.path.exists("files/originalsmeta/" + orignostring + ".py"): orignofile = "files.originalsmeta." + orignostring origread = import_module(orignofile) if ship["ship"] in origread.ship: newficlist.append(fic) except: pass else: try: if fileread.ship: pass except: try: origno = fileread.original if origno < 10: orignostring = "00" + str(origno) elif origno < 100: orignostring = "0" + str(origno) else: orignostring = str(origno) if os.path.exists("files/originalsmeta/" + orignostring + ".py"): orignofile = "files.originalsmeta." + orignostring origread = import_module(orignofile) try: if fileread.ship: pass except: newficlist.append(fic) except: newficlist.append(fic) ficlist = list(dict.fromkeys(newficlist)) totalwords = 0 for fic in ficlist: fileread = "" if fic < 10: ficstring = "00" + str(fic) elif fic < 100: ficstring = "0" + str(fic) else: ficstring = str(fic) if os.path.exists("files/originalsmeta/" + ficstring + ".py"): ficfile = "files.originalsmeta." + ficstring fileread = import_module(ficfile) elif os.path.exists("files/translationsmeta/" + ficstring + ".py"): ficfile = "files.translationsmeta." + ficstring fileread = import_module(ficfile) if fileread: for instalment in fileread.datewords: totalwords = totalwords + instalment["words"] print("Total word count: " + str(totalwords) + "\n") print("Summaries of selected fics:\n") for fic in ficlist: fileread = "" if fic < 10: ficstring = "00" + str(fic) elif fic < 100: ficstring = "0" + str(fic) else: ficstring = str(fic) if os.path.exists("files/originalsmeta/" + ficstring + ".py"): ficfile = "files.originalsmeta." + ficstring fileread = import_module(ficfile) elif os.path.exists("files/translationsmeta/" + ficstring + ".py"): ficfile = "files.translationsmeta." + ficstring fileread = import_module(ficfile) if fileread: print("Fic " + str(fic) + ", " + (fileread.datewords[-1])["date"].strftime("%-d %B %Y") + " • https://tre.praze.net/fic/single/" + ficstring) try: if fileread.showtitle: print("\033[1m" + fileread.title + "\033[0m") except: pass try: print(re.sub("<[^<]+?>","",(re.sub(" "," ",fileread.summary)))) except: pass print("\n")