vcinema/update_films_by_country.py

86 lines
2.1 KiB
Python
Raw Normal View History

2022-03-24 20:32:07 +00:00
from vcinema_utils import VCinemaUtils
import base64
from collections import Counter, OrderedDict
2022-03-24 20:32:07 +00:00
import csv
import os
from wand.image import Image
import worldmap
2022-03-09 20:47:35 +00:00
import warnings
warnings.filterwarnings("ignore")
2022-03-25 22:17:11 +00:00
# Page ID of https://wiki.jacknet.io/books/vcinema/page/films-by-country
FILMS_BY_COUNTRY_PAGE_ID = 34
def get_films_by_country(viewings):
viewings_filtered_by_country = VCinemaUtils.filter_viewings(viewings, "countries")
return viewings_filtered_by_country
def build_page(films_by_country):
2022-04-03 22:27:49 +01:00
table = build_table(films_by_country)
2022-03-25 22:17:11 +00:00
country_counter = Counter(films_by_country)
png_data = draw_map(country_counter)
encoded = base64.b64encode(png_data).decode("utf-8")
2022-04-03 16:22:27 +01:00
image = "![](data:image/png;base64,{})".format(encoded)
2022-04-03 22:27:49 +01:00
page = image + "\n" + table
2022-03-25 22:17:11 +00:00
return page
2022-03-24 20:32:07 +00:00
def get_flags_dict():
flags = {}
2022-04-03 20:34:53 +01:00
with open('country-flags.csv', newline='') as f:
2022-03-24 20:32:07 +00:00
reader = csv.reader(f, quotechar="\"")
next(reader, None) # skip the headers
for row in reader:
flags[row[0]] = row[1]
2022-03-24 20:32:07 +00:00
return flags
2022-03-24 20:32:07 +00:00
2022-04-03 22:27:49 +01:00
def build_table(films_by_country):
2022-03-24 20:32:07 +00:00
films_by_country_sorted = OrderedDict(sorted(films_by_country.items(), key=lambda t: t[0]))
flags = get_flags_dict()
2022-04-03 16:22:27 +01:00
table = "| Country | Films |\n| - | - |"
2022-04-03 22:27:49 +01:00
for country, films in films_by_country_sorted.items():
2022-04-03 16:22:27 +01:00
table += "\n"
2022-04-03 22:27:49 +01:00
table += country
if country in flags.keys():
table += " "
table += flags[country]
2022-04-03 16:22:27 +01:00
table += " | "
2022-04-08 21:37:14 +01:00
table += VCinemaUtils.get_film_list(films)
2022-03-24 20:32:07 +00:00
return table
2022-04-03 22:27:49 +01:00
def draw_map(films_by_country, file_name="vcinema_map.svg"):
counter = Counter(films_by_country)
countries = [k for k, v in counter.items()]
counts = [len(v) for _, v in counter.items()]
max_count = max(counts)
opacity = [0.5 + (x / (float(max_count))/2.0) for x in counts]
2022-03-25 22:17:11 +00:00
worldmap.plot(countries, cmap=["#FF4000"], opacity=opacity, filename=file_name, verbose=False)
with Image(filename=file_name, width=1000, height=655) as i:
png_data = i.make_blob("png")
os.remove(file_name)
return png_data