Skip to content
Timo Cornelius Metzger edited this page Nov 25, 2020 · 10 revisions

Willkommen im Wiki für wdr-okr!

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.

Aufbau des 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

1. Scraper

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)

2. Datenbank-Modell

Sämtliche Daten des Intelligence Layer befinden sich in einer SQLite-Datenbank. Die Tabellen der Datenbank lassen sich vier Gruppen zuordnen:

  1. Instagram TBD

  2. Youtube TBD

  3. 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

  4. Django-CMS und User-Management TBD

3. Django-basiertes CMS

Clone this wiki locally