-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Die Module in diesem Repo sind Teil eines Projekts zur automatisierten Erfassung, Analyse und Visualisierung von Nutzungsdaten.
Das Gesamtprojekt nutzt dazu zwei Komponenten:
- "Intelligence Layer": Ein System, das Daten aus unterschiedlichen Quellen (Instagram, Youtube, Spotify, Webserver-Statistiken, etc.) ausliest, in ein nutzbares Format bringt und in einer Datenbank bereitstellt.
- Daten-Visualisierung: Eine Reihe von Visualisierungen und Auswertungen in chart.io, die auf der Datenbank des Intelligence Layer basieren.
In diesem Repo befindet sich der Intelligence Layer.
Der Intelligence Layer verbindet die folgenden drei Elemente:
- Indiviuell angepasste Scraper für die einzelnen Datenquellen (Instagram, Youtube, Spotify, Webserver-Statistiken, etc.)
- Datenbank-Modell zum Speichern der Daten
- Django-basiertes CMS zum Anlegen und Editieren von Datenquellen
Die Scraper des Intelligence Layer machen externe Datenquellen für die weitere Analyse nutzbar. Für jede Datenquelle existiert ein individuell angepasstes Scraping-Modul.
Im Moment nutzt der Intelligence Layer die folgenden Daten-Quellen:
- Instagram-Accounts (über die Quintly-API)
- Youtube-Accounts (über die Quintly-API)
- Webseiten (über die APIs von Google Search Console und die Sophora)
- Podcasts (über öffentlich zugängliche RSS-Feeds sowie die APIs von Spotify, Podstat, Mediatrend und Webtrekk)
Sämtliche Daten des Intelligence Layer befinden sich in einer SQLite-Datenbank. Die Tabellen der Datenbank lassen sich vier Gruppen zuordnen:
-
Instagram TBD
-
Youtube TBD
-
Podcast
Tabellen-Name: podcast
Enthält Daten zu den einzelnen Podcast-Reihen. Die folgenden Tabellen nehmen auf die in der Spalte "id" vergebenen Schlüssel (als foreign key namens "podcast_id") Bezug.
Name Type NOT NULL Beschreibung id (primary key) integer ✓ ID des Podcasts name varchar (200) ✓ Name des Podcasts author varchar (200) ✓ Autor*in des Podcasts image varchar (1024) ✓ URL zum Coverbild des Podcasts description text ✓ Beschreibungstext des Podcasts last_updated datetime ✓ Datum der letzten Aktualisierung spotify_id varchar (32) 🚫 Spotify ID, falls vorhanden feed_url varchar (1024) ✓ URL des RSS-Feeds des Podcasts
Tabellen-Name: podcast_data_spotify
Enthält zusätzliche Daten zu den einzelnen Podcast-Reihen, die auf Spotify verfügbar sind.
Name Type NOT NULL Beschreibung id (primary key) integer ✓ ID des Eintrags date date ✓ Erstellungsdatum des Datenpunkts followers integer ✓ Anzahl der Follower des Podcasts podcast_id (foreign key) integer ✓ ID des Podcasts last_updated datetime ✓ Datum der letzten Aktualisierung listeners integer ✓ Hörer*innen listeners_all_time integer ✓ Hörer*innen insgesamt listeners_monthly integer ✓ Hörer*innen pro Monat listeners_weekly integer ✓ Hörer*innen pro Woche
Tabellen-Name: podcast_data_spotify_hourly
Enthält Daten über die stündliche Nutzung der Podcast-Reihen, die auf Spotify verfügbar sind.
Name Type NOT NULL Beschreibung id (primary key) integer ✓ ID des Eintrags date_time datetime ✓ Datum und Uhrzeit starts integer ✓ Anzahl der Starts streams integer ✓ Anzahl der Streams podcast_id (foreign key) integer ✓ ID des Podcasts
Tabellen-Name: podcast_episode
Enthält Daten zu den einzelnen Folgen der Podcasts. Die folgenden Tabellen nehmen auf die in der Spalte "id" vergebenen Schlüssel (als foreign key namens "episode_id") Bezug.
Name Type NOT NULL Beschreibung id (primary key) integer ✓ ID des Eintrags title varchar(400) ✓ Titel der einzelnen Folge description text ✓ Beschreibungstext der Folge publication_date_time datetime ✓ Datum der Veröffentlichung media varchar (1024) ✓ URL der Mediendatei zmdb_id integer ✓ ZMDB ID der Mediendatei podcast_id (foreign key) integer ✓ ID des Podcasts duration bigint ✓ Länge der Mediendatei last_updated datetime ✓ Letzte Aktualisierung spotify_id varchar (32) 🚫 Spotify ID, falls vorhanden
Tabellen-Name: podcast_episode_data_podstat
Enthält zusätzliche, tägliche Abrufzahlen von Podstat zu den einzelnen Folgen der Podcasts.
Name Type NOT NULL Beschreibung id (primary key) integer ✓ ID des Eintrags date date ✓ Datum der Abrufzahlen downloads integer ✓ Anzahl der Downloads ondemand integer ✓ Anzahl der Ondemand-Abrufe last_updated datetime ✓ Zeitpunkt der Datenaktualisierung episode_id (foreign key) integer ✓ ID der Folge
Tabellen-Name: podcast_episode_data_spotify
Enthält zusätzliche Daten zu einzelnen Folgen von Spotify. Nur für Podcasts, die auf Spotify verfügbar sind.
Name Type NOT NULL Beschreibung id (primary key) integer ✓ ID des Eintrags date date ✓ Datum der Abrufzahlen starts integer ✓ Anzahl der Starts streams integer ✓ Anzahl der Streams episode_id (foreign key) integer ✓ ID der Folge last_updated datetime ✓ Zeitpunkt der Datenaktualisierung listeners_all_time integer ✓ Gesamtzahl der Hörer listeners integer ✓ Hörer*innen für den jeweiligen Tag
Tabellen-Name: podcast_episode_data_spotify_performance
Enthält zusätzliche Performance-Daten zu den auf Spotify verfügbaren Folgen.
Name Type NOT NULL Beschreibung id (primary key) integer ✓ ID des Eintrags date date ✓ Datum der Performance-Daten quartile_1 integer ✓ Hörer*innen im 1. Viertel der Folge quartile_2 integer ✓ Hörer*innen im 2. Viertel der Folge quartile_3 integer ✓ Hörer*innen im 3. Viertel der Folge complete integer ✓ Hörer*innen der gesamten Folge episode_id (foreign key) integer ✓ ID der Folge last_updated datetime ✓ Zeitpunkt der Datenaktualisierung average_listen bigint ✓ Durchschnittliche Hörer*innenzahl
Tabellen-Name: podcast_episode_data_spotify_user
Enthält zusätzliche Daten von Spotify zu den auf Spotify verfügbaren Folgen.
Name Type NOT NULL Beschreibung id (primary key) integer ✓ ID des Eintrags date date ✓ Datum der Abrufzahlen age_0_17 integer ✓ Hörer*innen zwischen 0 und 17 age_18_22 integer ✓ Hörer*innen zwischen 18 und 22 age_23_27 integer ✓ Hörer*innen zwischen 23 und 27 age_28_34 integer ✓ Hörer*innen zwischen 28 und 34 age_35_44 integer ✓ Hörer*innen zwischen 35 und 44 age_45_59 integer ✓ Hörer*innen zwischen 45 und 59 age_60_150 integer ✓ Hörer*innen zwischen 60 und 150 age_unknown integer ✓ Hörer*innen ohne Altersangabe gender_female integer ✓ Anzahl der Hörerinnen gender_male integer ✓ Anzahl der Hörer gender_non_binary integer ✓ Anzahl der non-binary Hörer*innen gender_not_specified integer ✓ Hörer*innen ohne Geschlechtsangabe episode_id (foreign key) integer ✓ ID der Folge last_updated datetime ✓ Zeitpunkt der Datenaktualisierung
Tabellen-Name: podcast_episode_data_webtrekk_performance
Enthält zusätzliche Abruf-Daten von Webtrekk für die einzelnen Folgen.
Name Type NOT NULL Beschreibung id (primary key) integer ✓ ID des Eintrags date date ✓ Datum der Performance-Daten media_views integer ✓ Angefangene Abrufe der Mediendatei media_views_complete integer ✓ Abgeschlossene Abrufe der Mediendatei playing_time bigint ✓ Abspieldauer der Mediendatei last_updated datetime ✓ Zeitpunkt der Datenaktualisierung episode_id (foreign key) integer ✓ ID der Folge
-
Django-CMS und User-Management TBD
"Unsere Inhalte, unser Wissen und unsere Entwicklungen gehören allen." WDR Geschäftsbericht 2016, S.23