RSS til alle

Jun 5, 2006

RSSRSS, RSS-feeds, RSS-streams eller Live-bookmarks, er muligvis stadig buzzwords for dig, teknologi som du ikke helt ved hvordan eller hvad du skal bruge til? Og det hjælper sikkert ikke meget, når jeg fortæller at RSS står for Really Simple Syndication eller de tidligere versioner Rich Site Summary?!
Teknologien er dog ikke specielt ny, den har bare ikke været så udbredt og understøttet som den er nu, og som den ganske sikkert vil blive det i fremtiden.

Kort sagt, er RSS et format, eller en måde hvorpå man kan posterer overskrifter og/eller indhold, sågar medie-filer, fra f.eks en hjemmeside, for derefter at hente og læse det posterede fra andre applikationer og/eller hjemmesider.

Den første version af RSS kan faktisk spores helt tilbage til 1999, og blev udviklet af Dan Libby i forbindelse med my.netscape.com - sådan skrives det på Wikipedia, ved en søgning på RSS. Idag findes RSS i version 2.0, og er blevet en anerkendt standard - W3C, som håndterer standarder på nettet, har sågar oprettet en valideringsfuntion til RSS feeds.
RSS bruges i vid udstrækning på de mange webblogs (som denne), der vælter frem for tiden, men også rigtig mange store nyhedssider er begyndt at benytte sig af RSS - F.eks TV2 nyhederne. Med RSS kan man nemt og hurtigt komme ud til mange brugere, og brugerne af en RSS-feed behøver ikke engang at skulle gå ind på den side hvorfra de vil læse - De skal blot bruge en applikation der kan håndterer RSS!

Selvom du måske stadig ikke kender specielt meget til RSS, findes der allerede adskillige programmer som kan håndterer formatet. Mozilla Firefox og Thunderbird kan begge håndterer RSS, og på Microsofts hjemmeside kan det læses at den næste version af Internet Explorer (version 7), også kommer til at understøtte dette. Derudover findes der flere programmer der er lavet specielt til RSS, se f.eks FeedReader og RSSOwl. Ja, faktisk findes der også programmer til din mobiltelefon, der undertøtter RSS.

Nok om RSS´ formål og historie, der er en grund til at denne post findes under kategorien Scripts - Det er nemlig ikke specielt svært at selv at lege med RSS!
Resten af denne post, vil koncentrerer sig om hvordan du kan få din hjemmeside til at leverer indhold via RSS (2.0), og hvordan du kan hente indhold fra andres RSS-feeds. Som programmeringssprog vil jeg benytte PHP, som du kan læse mere om i kategorien PHP.
Du kan i slutningen af hvert understående afsnit, download scripts som skulle være lige til at tilpasse dit eget site.

Postér RSS fra din side:
Den grundliggende idé er ganske simpel. Vi skal oprette en fil, hvortil vi skriver det indhold vi vil have andre skal kunne læse vha. understøttende applikationer. Tricket er så bare, at få skrevet denne fil, så de andre applikationer kan forstå den - Til dette er der heldigvis noget der hedder standarder.

En RSS-feed er i bund og grund blot et XML-dokument. Meget, meget kort fortalt, så indeholder et XML-dokument forskellige start- og slut-tags, hvor imellem den data man vil håndtere findes. Antallet af tags kan varierer, fra feed til feed, dog er nogle obligatoriske og findes dermed i alle feeds. På følgende link kan du læse mere om disse tags, og RSS specifikationerne gennerelt.

Det første vi skal have gang i, er en måde hvorpå vi kan oprette og skrive til en fil. Til dette har PHP den indbyggede funktion fopen(String, String). Første parameter vi giver dennne funktion er en fuld sti til den XML-fil vi vil oprette eller opdaterer. Findes denne fil ikke i forvejen, forsøger funktionen at oprettet den. Den næste parameter, er den mode, eller rettighed, som vi vil arbejde med. Der findes flere forskellige (læs linket til funktionen), men vi skal bruge skrive-rettigheden write, som betegnes med et "w". Funktionskaldet gemmer vi i en variabel, $rss_file, som vi skal bruge som resource til at skrive med:
$rss_file = fopen("./rss/index.xml", "w");
Når vi har åbnet en resource til filen, med fuktionen fopen, benytter vi funktionen fwrite(Resource, String) til at skrive til filen med. fwrite skrive en linie ad gangen, så vi skal bruge den en del gange.

Standard for vores XML-fil er, at den skal begynde med følgende:
<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
<channel>
<title>Feed titel</title>
<link>Link til din hjemmeside</link>
<description>En kort beskrivelse til din feed</description>
<language>da</language>

Og skrives med fwrite, på følgende måde:
fwrite($rss_file, "<?xml version="1.0" encoding="ISO-8859-1"?>");
fwrite($rss_file, " ");
fwrite($rss_file, "<rss version="2.0">");
fwrite($rss_file, " ");
fwrite($rss_file, "<channel>");
fwrite($rss_file, " ");
fwrite($rss_file, "<title>Feed titel<title>");
fwrite($rss_file, " ");
fwrite($rss_file, "<link>Link til din hjemmeside</link>");
fwrite($rss_file, " ");
fwrite($rss_file, "<description>Feed beskrivelse</description>");
fwrite($rss_file, " ");
fwrite($rss_file, "<language>da</language>");
fwrite($rss_file, " ");

Herefter kan du f.eks. lave et kald til en database, hente titler, poster, tidspunkter, hvad det nu end måtte være du vil posterer, og udskrive disse mellem tagget <item> og </item>. Det er her antallet af tags kan varierer. Denne version har kun medtaget de mest anvendte, og nødvendige:
while(der er poster der skal skrives)
{
    fwrite($rss_file, "<item>");
    fwrite($rss_file, " ");
    fwrite($rss_file, "<title>".$title."</title>");
    fwrite($rss_file, " ");
    fwrite($rss_file, "<link>".$link."</link>");
    fwrite($rss_file, " ");
    fwrite($rss_file, "<description>");
    fwrite($rss_file, " ");
    fwrite($rss_file, "<![CDATA[".$post."]]>");
    fwrite($rss_file, " ");
    fwrite($rss_file, "</description>");
    fwrite($rss_file, " ");
    fwrite($rss_file, "</item>");
    fwrite($rss_file, " ");
}
Endelig afslutter du din RSS-feed, og lukker skrivningen til filen vha. funktionen fclose(Resource):
fwrite($rss_file, "</channel>");
fwrite($rss_file, " ");
fwrite($rss_file, "</rss>");
fclose($rss_file);

o DOWNLOAD funktionen rss_generate og begynd at postere via RSS.

Hvis du, som jeg, benytter Mozilla Firefox, kan du anbringe et lille ikon i adresselinien (som det i topen af denne artikel), ved at tilføje følgende linie i sidens <head>-sektion:
<link rel="alternate" type="application/rss xml" title="Min feed" href="http://www.din-side.dk/rss/" />

F.eks. Internet Explorer 6 undestøtter endnu ikke RSS, så du kan også placerer ikonet på din side på traditionel vis, ved at linke til din feed. Du kan downloade forskellige formater, farver og størrelser af ikonet fra www.feedicons.com.

Hent RSS til din side:
For at kunne læse andres RSS-feeds, skal vi have lavet en parser, mere præcist, en XML-parser.
En XML-parser benytter sig af de definerede tags, ved at genkende disse, og håndtere de data, der måtte eksisterer imellem dem. I denne version vil jeg kun håndterer tagsene title og link, for på den måde at kunne udskrive en liste med titler, som indeholder links til den tilsvarende titels post.

Parseren er bygget op af følgende fire funktioner:
readFeeds
startElement
characterDataHandler
endElement

readFeeds(String, Int) fungerer som en slags "main", og er den vi kalder for at parse en RSS-feed. Stengen skal indeholde stien til den feed du vil parse, og tallet er antallet af nyheder vi vil have vist.
Herudover findes funktionerne startElement, endElement og endelig characterDataHandler, som erstandard XML-parser funktioner.
I readFeeds opretter vi en resource til den feed vi vil parse, og selve parsingen af dataen udførers herefter af de tre sidstnævnte funktioner.
i startElement funktionen vælger vi kun at ville håndterer hvad der findes mellem item tagsene. Herefter benyttes characterDataHandler fukntionen til at gemme dataen for title og link gemt i variabler. Endelig udskriver vi selve dataen i endElement funktionen, hvorefter vi nulsætter variablerne. Denne process fortsætter indtil vi har fået udskrevet hvad der svarer til det tal vi gav som sidste parameter til readFeeds funktionen.

Det er en process der er lidt svær at forklarer på tekst, men vælger du at downloade scriptet nedenfor, er det faktisk ikke særlig svært selv at lege med. Vil du have flere tags med, kan du tilføje disse til de globale variabler, og gemme dataen for disse i characterDataHandler funktionen. Selve udskrivelsen foregår i endElement funktionen, og fungere som normalt i PHP.

Scriptet nedenfor indeholder de fire funktioner, samt eksempeler på hvordan scriptet anvendes.

o DOWNLOAD XML-parseren readFeeds.

Comments

comments powered by Disqus