Kommentare 2

Gegen Informationsüberflutung – RSS-Feeds nach Beliebtheit filtern (PHP-Script)

Vor bald drei Jahren habe ich über die konstante Informationsüberflutung geschrieben, welche uns täglich fordert (besonders im digitalen Umfeld und im Beruf). Wie damals beschrieben, beziehe ich einen grossen Teil meiner privaten und professionellen Aktualitäten mittels RSS-Feeds, woran sich bis heute nichts geändert hat. Inhaltlich hat sich jedoch viel getan: Ich folge mehr Seiten und erhalte folglich auch mehr Updates. Das ist grundsätzlich in Ordnung, besonders jedoch bei grossen Seiten wie zum Beispiel Mashable wird die schiere Masse (alleine da sind es >700 Artikel pro Woche) mühsam. Deshalb habe ich mir ein Script geschrieben, dass diese Einträge nach ihrer Beliebtheit filtert.

Viele Seiten bieten bereits von Haus aus ein „Top-Feed“, das nur ausgewählte oder beliebte Artikel ausliefert. Das ist selbstverständlich eine Lösung. Hier geht es aber um die unzähligen anderen Fälle, wo man sich selbst helfen muss.

Die Idee

Eigentlich ist der Ansatz ziemlich einfach: Ich will nicht alle Artikel in meinem RSS-Feed haben, sondern lediglich solche, welche bereits bei anderen Nutzern beliebt, sich als bereits bewährt haben. Die Beliebtheit messe ich an der Anzahl Shares auf diverser Social-Media-Plattformen. Ein neuer Artikel wird also erst im RSS-Feed angezeigt, wenn er eine Mindestanzahl an Shares hat:

  1. Seite veröffentlicht neuen Artikel
  2. Artikel wird von echten Nutzern auf Social Media geteilt
  3. Das festgelegte Share-Minimum wird erreicht
  4. Artikel wird im RSS-Feed angezeigt

Selbstverständlich gibt es hier keinerlei qualitative Filter-Komponente, es werden lediglich rohe, kontextfreie Zahlen verwendet. Das ist nicht perfekt, funktioniert aber ziemlich effizient.

Die Umsetzung

Ich bin kein Programmierer und überzeugt, dass das, was ich hier gebastelt habe, um einiges besser, sauberer und sicherer machbar wäre – aber egal, die Lösung hier funktioniert. Aber nun zur RSS-Feed-Filter-Code, der wie folgt aufgebaut ist:

  1. Das RSS-Feed (ich mache das in PHP mittels SimpleXML)
  2. Die Anzahl Shares für jeden Eintrag wird überprüft
  3. Einträge mit genügend Shares werden in das gefilterte Feed geschrieben
  4. Das gefilterte Feed kann von einem Feed-Reader (Empfehlung: Feedly) gelesen werden

Die wichtigste Komponente hier ist Punkt 2, das Überprüfen der Anzahl Shares eines RSS-Feed-Eintrages. Hierfür habe ich den genialen Service SharedCount.com gefunden und genutzt. Via API frage ich damit die Share-Anzahl für den jeweiligen Link ab. Solltet ihr den Code ausprobieren wollen, könnt ihr euch kostenlos hier registrieren und nach der E-Mail-Verifizierung hier den API-Key holen, den ihr im Code unten braucht.

Hier nun den Code selbst, angewendet am Beispiel von Mashable und mit einem Minimum von 300 Shares pro Eintrag:

<?php

$feedUrl = 'http://feeds.mashable.com/Mashable?format=xml';
$apiKey = 'API_KEY';
$sharedMin = 300;

$rawFeed = file_get_contents($feedUrl);
$xml = new SimpleXmlElement($rawFeed);

$rssfeed = '<?xml version="1.0" encoding="UTF-8"?>';
$rssfeed .= '<rss version="2.0">';
$rssfeed .= '<channel>';
$rssfeed .= '<title>' . $xml->channel->title . ' (Shared: ' . $sharedMin . '+)</title>';
$rssfeed .= '<link><![CDATA[' . $xml->channel->link . ']]></link>';
$rssfeed .= '<description>' . $xml->channel->title . ' (Shared: ' . $sharedMin . '+)</description>';
$rssfeed .= '<copyright>nebensachen.ch</copyright>';

foreach ($xml->channel->item as $item) {
 
 $url = 'http://free.sharedcount.com/url?apikey=' . $apiKey . '&url=' . (string) $item->link;
 $json = file_get_contents($url);
 $json_data = json_decode($json, true);
 $total = $json_data["Facebook"]["total_count"] + $json_data["Twitter"] + $json_data["GooglePlusOne"] + $json_data["LinkedIn"];

 if ($total > $sharedMin) {
 
 $rssfeed .= '<item>';
 $rssfeed .= '<title><![CDATA[' . (string) $item->title . ']]></title>';
 $rssfeed .= '<description><![CDATA[' . (string) $item->description . ']]></description>';
 $rssfeed .= '<link><![CDATA[' . (string) $item->link . ']]></link>';
 $rssfeed .= '<pubDate>' . (string) $item->pubDate . '</pubDate>';
 $rssfeed .= '</item>';
 
 }
}

$rssfeed .= '</channel>';
$rssfeed .= '</rss>';

echo $rssfeed;

?>

(hier gibt es ein Beispiel für The Verge, bei welchem anstelle eines RSS- ein Atom-Feed verwendet wird, wodurch der Syntax etwas angepasst werden musste)

Was ich hier mache? Zuerst lese ich das original Feed aus.

Danach wird die Variable „$rssfeed“ mit den neuen Feed-Definitionen gefüllt, welche vor den Einträgen ausgegeben werden. Anschliessend wird für jeden RSS-Feed-Eintrag die Anzahl Shares aus der SharedCount-API gelesen.

Ist diese Zahl grösser als das definierte Minimum, wird der Eintrag an die $rssfeed-Variable angehängt. Abschliessend wird die Variable mit den nötigen RSS-Abschluss-Tags ergänzt und ausgegeben. Was angezeigt wird, ist ein in Echtzeit generiertes RSS-Feed mit lediglich den Inhalten, die eine Mindestanzahl an Shares überschritten haben.

Fazit

Gerne dürft ihr das obige Script verwenden und anpassen – natürlich ohne Gewähr, dass irgendetwas klappt 😉 Ich habe diesen PHP-Code für mehrere grosse Seiten im Einsatz, um deren RSS-Feed zu filtern und ein bisschen weniger Information verarbeiten zu müssen, ohne ganz darauf zu verzichten. Ich bin zufrieden und definitiv entspannter, wenn ich mein Feedly anschaue.

Selbstverständlich kann man diese Idee noch weiterentwickeln und beispielsweise mehrere Feeds in einem Script abarbeiten oder gar deren Syntax automatisiert erkennen. Aber das kommt dann vielleicht später mal.

Share on FacebookTweet about this on TwitterShare on LinkedInBuffer this pageEmail this to someone

2 Kommentare

  1. Dank Twitter bin ich auf Ihren Artikel aufmerksam geworden. Da ich selbst blogge und knapp 13.000 RSS-Abonnenten bisher meinem Blog folgen, las ich Ihren Ansatz sehr aufmerksam. Deswegen entdeckte ich in einem „Nebensatz“ diesen interessanten Hinweis: „Viele Seiten bieten bereits von Haus aus ein „Top-Feed“, das nur ausgewählte oder beliebte Artikel ausliefert.“. Wissen Sie, ob dies händisch oder automatisiert erfolgt?

    Die Idee finde ich clever. Jedoch hat sie eine Schattenseite. Um einen Artikel im RSS-Feed anzuzeigen, muss sie eine bestimmte Hürde (im Artikel sind dies 300 Shares) überspringen. Bis dahin bleibt mir dieser Artikel mit seinen Informationen im RSS-Feed meines Tools verborgen. Damit erfahre ich Informationen später wegen des Erreichens bzw. Überspringens der Hürde. Dies kann im digitalen Business hinderlich sein.

    Wird die Idee weiter verfolgt?

    Beste Grüße

    Ralph

    • Roger

      Hallo Ralph
      hmm, eine gute Frage bezgl. dem Top-Feed. Ich wüsste da spontan keines.
      Spannend aber der Ansatz, meine Technik hier von der Anbieter.Seite her einzusetzen – das hatte ich mir tatsächlich noch gar nicht überlegt. Da würde die Teilrate als Basis für die Erfolgsberechnung tatsächlich etwas wenig Sinn ergeben 🙂
      Vielen Dank für deinen Kommentar!

Schreibe eine Antwort