diff --git a/web/app/main.py b/web/app/main.py index f67fb2b..faa829c 100755 --- a/web/app/main.py +++ b/web/app/main.py @@ -1,7 +1,7 @@ from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash from models import db, Ad from sqlalchemy.orm import load_only -from sqlalchemy import desc, asc +from sqlalchemy import desc, asc, func import os from flask_caching import Cache import time @@ -9,7 +9,7 @@ app = Flask(__name__) db.init_app(app) DEBUG = os.environ["FLASK_DEBUG"] -ADS_PER_PAGE = 40 +ADS_PER_PAGE = 50 POSTGRES = { 'user': os.environ["POSTGRES_USER"], @@ -31,6 +31,11 @@ def get_advertisers(): return [ad.advertiser for ad in Ad.query.options(load_only("advertiser")).order_by(Ad.advertiser).distinct("advertiser").all() if ad.advertiser is not None] +def get_advertisers_and_count(): + return [(ad.advertiser, ad.count) for ad in Ad.query.with_entities(Ad.advertiser, func.count(Ad.advertiser).label('count')).group_by(Ad.advertiser).order_by(Ad.advertiser).all() if ad.advertiser is not None] + + + @app.route("/", methods=['GET']) @cache.cached(timeout=60*60*12, key_prefix=view_full_path_key) def index(): @@ -75,6 +80,14 @@ def ad(fbid): +@app.route("/annonsorer", methods=['GET']) +@cache.cached(timeout=60*60*12) +def advertisers(): + advertisers = get_advertisers_and_count() + return render_template('advertisers.html', advertisers=advertisers) + + + @app.route("/om-insamlingen", methods=['GET']) @cache.cached(timeout=60*60*12) def about(): diff --git a/web/app/templates/advertisers.html b/web/app/templates/advertisers.html new file mode 100644 index 0000000..fcf4829 --- /dev/null +++ b/web/app/templates/advertisers.html @@ -0,0 +1,33 @@ +{% extends "layout.html" %} +{% block title %}Annonsörer - Politiska annonser{% endblock %} +{% block body %} +
I tabellen listas de annonsörer och antal annonser som samlats in till ProPublicas databas.
+ + {% if advertisers %} +Annonsör | +Antal | +
---|---|
{{advertiser[0]}} | +{{advertiser[1]}} | +
Politisk annonsering kan idag vara målgruppsanpassad på detaljnivå. Genom att ta hjälp av frivilliga och verktyg från ProPublica har det samlats in {{total_adcount}} politiska annonser från Facebook. Genom att presentera dem här kan vi lära oss mer om hur politisk annonsering går till och vilka budskap som riktas till andra målgrupper än de man själv ingår i.
-Vill du hjälpa till att samla in annonser? Installera denna plugin för Chrome och Firefox och hjälp till att rapportera in annonser du med. Insamlingen sparar ingen information om dig som person.
+Vill du hjälpa till att samla in annonser? Installera denna plugin för Chrome och Firefox och hjälp till att rapportera in annonser och annonsörer du med. Insamlingen sparar ingen information om dig som person.