from collections import OrderedDict import wikipedia from bookstack import Bookstack from vcinema_utils import VCinemaUtils # Page ID of https://wiki.jacknet.io/books/vcinema/page/references PAGE_ID = 62 def get_films_by_reference(viewings): viewings_filtered_by_keyword = VCinemaUtils.filter_viewings(viewings, "keywords") viewings_filtered_by_reference_keyword = {k: v for k, v in viewings_filtered_by_keyword.items() if k.startswith("reference-to")} return viewings_filtered_by_reference_keyword def update_page(token_id, token_secret, films_by_reference_keyword): page = build_page(films_by_reference_keyword) Bookstack.update_page(VCinemaUtils.JACKNET_WIKI_URL, token_id, token_secret, PAGE_ID, markdown=page) def build_page(films_by_reference_keyword): references = {} for reference_keyword in films_by_reference_keyword: print(reference_keyword) referenced = reference_keyword[13:].replace("-", " ") if referenced.startswith("a "): referenced = referenced[2:] else: referenced = referenced try: searches = wikipedia.search(referenced, suggestion=False) referenced_page = wikipedia.page(title=referenced, auto_suggest=False) page_title = referenced_page.title page_url = referenced_page.url except wikipedia.DisambiguationError as e1: page_title = e1.title page_url = "https://en.wikipedia.org/wiki/{}".format(e1.title.replace(" ", "_")) except wikipedia.PageError as _: try: referenced_page = wikipedia.page(title=searches[0], auto_suggest=False) page_title = referenced_page.title page_url = referenced_page.url except wikipedia.DisambiguationError as e2: page_title = e2.title page_url = "https://en.wikipedia.org/wiki/{}".format(e2.title.replace(" ", "_")) if page_title in references.keys(): references[page_title]["films"].extend(films_by_reference_keyword[reference_keyword]) else: references[page_title] = {"url": page_url, "films": films_by_reference_keyword[reference_keyword]} references_sorted = OrderedDict(sorted(references.items(), key=lambda t: t[0])) table = "| Referenced | Films |\n| - | - |" for reference, referenced in references_sorted.items(): table += "\n" row_data = [] reference_url = referenced["url"] reference_title = reference referenced_films = referenced["films"] row_data.append("[{}]({})".format(reference_title, reference_url)) row_data.append(VCinemaUtils.get_film_list(referenced_films)) table += " | ".join(row_data) return table