RSS-Feed für YouTube Channels

RSS ist für mich fast schon ein Urgestein im Sammelsurium der Standards. Groß geworden durch das Web 2.0 und die Blogs dürfte es fast jedem etwas sagen, der sich mit Blogging oder Podcasting beschäftigt hat. Eine klasse Erfindung, um Seiten zu abonnieren und so auf dem aktuellen Stand zu bleiben.

Gestern habe ich an einer Automatisierung gearbeitet und möchte gerne über neue YouTube-Videos eines Channels Bescheid wissen. YouTube bietet eine großartige oAuth API an, aber der Aufwand war mir doch etwas zu groß. Denn ich will gar keine Videos posten, Playlists erstellen oder löschen. Ich möchte nur eine Liste der neusten Videos haben.

Wie gesagt, ich bin ein Kind des Web 2.0 und da kam mir die Frage, gibt es für Channels einen RSS-Feed? Die Antwort ist: Ja

Jeder Channel hat einen RSS-Feed

YouTube selber hat unter der Haube einen Feed für jeden Channel implementiert. Was man dafür braucht, ist lediglich die Channel-ID. Die bekommt man aber ganz schnell über die URL raus.

https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID

Die Feed-URL ist simple und man muss nur CHANNEL_ID ersetzen. Die Channel-ID findet ihr in der URL, wenn ihr auf einem Channel seid. Viele Kanäle haben inzwischen aber einen Handle, also die URL sieht z.B. so aus: https://www.youtube.com/@WordPress

Um die Kanal-ID zu bekommen, habe ich diese Website gefunden: https://www.streamweasels.com/tools/youtube-channel-id-and-user-id-convertor/. Dort kann man zu einem Handle die Channel-ID bekommen.

Damit können wir nun den Feed erstellen: https://www.youtube.com/feeds/videos.xml?channel_id=UCpJf6LGZ0a4n9Lj4aVt9spg

Text-Datei umdrehen (reverse)

Ich habe eine Text-Datei gehabt, mit Einträgen pro Zeile. Den Inhalt möchte ich in umgekehrter Reihenfolge wieder ausgeben, weil die Datei z.B. chronologisch sortiert ist, ich es aber in der anderen Reihenfolge benötige.

$ tac file.txt > file_reverse.txt

cat kennt man. Dieser Befehl gibt den Inhalt einer Datei aus. Mit tac (reverse cat) kann man genau dasselbe tun, aber rückwärts. Beide Befehle kommen mit dem coreutils package und sind somit in den meisten Linux Distros und MacOS vor installiert.

PHP Arrays als CSV ausgeben

Hier mal ein schneller Tipp. Ich habe ein CLI Skript in PHP programmiert. Dabei habe ich Daten über eine REST API abgefragt und wollte diese schnell und unkompliziert in CSV umwandeln und im Terminal (stdout) ausgeben. Das geht zum Glück ganz einfach mit PHP-Hausmittel.

fopen und fputcsv

Gegeben ist ein Array mit Daten. In meinem Fall habe ich sogar ein Array von Array und jedes Sub-Array soll eine CSV Zeile ergeben.

PHP bringt die Funktion fputcsv (php.net) mit und damit kann man Array Daten als CSV einem Stream übergeben. Damit können wir Daten direkt in eine Datei schreiben (falls es ein Datei-Stream wäre) oder in meinem Fall einfach stdout verwenden und die Daten auf dem Bildschirm durcken. Dazu öffne ich den Stream mittels fopen("php://stdout", "") (php.net). Der zweite Parameter hier muss gesetzt werden, wird bei stdout aber ignoriert, daher übergebe ich nur einen leeren String.

Damit iterieren wir nun über das Array, picken uns die Informationen heraus, die ich benötige (im Prinzip ist es ein map-Vorgang) und übergebe sie mit dem Stream an die Funktion fputcsv.

Am Schluss noch den Stream schließen und fertig ist die Kiste.

<?php

function toCsv(): void {
    // Array of Arrays
    $data = [[...], [...], [...]];
    
    // Stream öffnen: Hier der stdout, um die Daten auf den Bildschirm anzuzeigen
    $stdout = fopen("php://stdout", "");
    
    foreach ($data as $line) {
        $values = [
            'datum'          => $line['date'],
            'empfänger'      => $line['name'],
            'verbucht'       => '1'
        ];

        fputcsv($stdout, $values);
    }

    // Stream schließen nicht vergessen.
    fclose($stdout);
}

Warum überhaupt fputcsv?

Könnte an die Array-Daten nicht einfach mit einem `implode` (php.net) auch in eine CSV Zeile konvertieren? Im Grunde muss ich die Daten ja nur mit einem Komma trennen und zu einem String verwandeln?

Das ist im Kerngedanken richtig, aber es gibt ein Problem: Escaping. Wenn in einem Wert ein Komma oder andere Werte vorkommen, die escaped werden müssen, dann würde dieser Ansatz zu Fehlern führen. Mittels fputcsv müssen wir uns darum keine Gedanken machen. Werte werden mit “ (Anführungszeichen) als ein Wert markiert und Werte werden richtig escaped. So bekommen wir am Schluss ein valides CSV.

Multisite: Kein Login möglich, mit eigener Domain

Ich habe eine WordPress Multisite installation. Auch die Webschale läuft hier „nur“ als eine von mehreren Seiten. Nun hatte ich also wieder ein Projekt und brauchte eine neue Seite. Die WordPress Seite ist auch schnell angelegt, aber als ich dann die eigene Domain eingetragen habe (DNS war schon alles richtig eingestellt), konnte ich mich nicht mehr einloggen.

Also der Login für Webschale hat richtig funktioniert. Aber auf der neuen Seite ging es nicht. Ich habe die Login Seite gesehen, dass Passwort eingetippt, aber es ist nichts passiert. Die Seite hat neu geladen und ich war wieder auf der Login Seite.

Problem

Es wurden keine Cookies für diese Domain gesetzt. Kein Cookie, kein Login. Das ist soweit logisch.

Lösung

In der wp-config.php Datei musste ich folgenden Eintrage hinzufügen:

define(‘DOMAIN_CURRENT_SITE’, $_SERVER[‘HTTP_HOST’]);

Freie Ressourcen

Es gibt viele Ressourcen im Internet, aber nicht jedes Bild oder Video dürfen wir einfach so nutzen. Sollten wir es doch tun, könnte es teuer werden, wenn wir Post von einem (Abmahn-)Anwalt bekommen. Das muss aber nicht sein. Denn inzwischen gibt es viele Plattformen, die kostenlose und frei nutzbare Ressourcen zur Verfügung stellen. Da ich immer wieder selber auf der Suche nach guten Alternativen bin, schreibe ich mal eine lose Liste zusammen:

Wichtig: Du bist selber dafür verantwortlich die Lizenz der einzelnen Ressource zu prüfen. Nicht jede Plattform stellt das Material unter der Public Domain Lizenz zur Verfügung!

Bilder

Videos

Vectors

Music / Audio

Video Production


Du hast noch weitere Seiten gefunden? Schreib es unten in die Kommentare oder per Twitter.