Tips til design

Brugervenlighed

Benyt Internettets konventioner. Det giver brugeren tryghed.

Brugervenligt webdesign

RSS feed med PHP - en tutorial

Denne tutorial beskriver et simpelt PHP script, der kan vise XML på din side. XML er det sprog, som f.eks. RSS feeds er skrevet i.

Sciptet benytter PHP udvidelsen SimpleXML, som kan importere en XML fil fra en fremmed server. SimpleXML er indbygget i PHP5 og opefter, og er også aktiveret pr default.

En simpel PHP opskrift på en RSS feed reader

Mit script er meget simpelt, men mere skal der ikke til.

1. Feedet loades med funktionen simplexml_load_file(). XML'en gemmes som et objekt i variablen $feed.
2. En tæller initieres for at kunne styre, hvor mange nyheder, der skal vises.
3. En løkke startes. Den løbes igennem for hvert item-element i channel-elementet i feeden.
4. Så længe antallet af gennemløb($taeller) er mindre end det ønskede antal nyheder ($antal), skrives følgende ud:
5. titel, skrives i a-tag og link sættes som href
6. dato, i kursiv
7. og description, som er et resume af nyheden.
8. Break sender os ud af while-løkken, og ned til tælleren, der tæller 1 op, før vi kører foreach løkken igennem igen.

<?php
		
  // RSS feeden hentes. Gemmes som obejct i $feed
  $feed = simplexml_load_file('http://ing.dk/rss/nyheder');
			
  //Taeller til at begrænse antallet af nyheder
  $taeller  = 0;
  $antal = 5;

  //alt køres igennem utf8_decode() Der returner  ISO-8859-1
  foreach($feed->channel->item as $item){
      while($taeller<$antal){
         print utf8_decode("<a href='{$item->link}'>{$item->title}</a><br/>");
         print utf8_decode("<i>{$item->pubDate} </i><br/>");
         print utf8_decode("{$item->description} <br/><br/>");
         break;
         }
      $taeller ++;
      }  
?>

OBS: Scriptet er skrevet til RSS 2.0, og skal justeres for at virke med RSS1.0 eller atom. Se nedenfor

Potentielle problemer med XML

Scriptet er meget simpelt, men der er 2 potentielle problemområder.

Det første er tegnsættet, der voldte mig problemer. Det løste jeg ved at køre XML gennem med utf8_decode(), som returner ISO-8859-1 fra en utf-8 streng.

Et andet potentielt problem er formatet på feeden. Det varierer mellem rss 1.0, rss2.0 og atom.

Hvert format har sine egne tags og formateringer. Forskellen er imiddlertidig små, og når man først har styr på begreberne, skulle det være forholdsvist simpelt at tilpasse scriptet til det ønskede format.

Du skal bare kigge på kildekoden og så finde den rigtige "vej" ned gennem XML'ens struktur til de ønskede data.

Go' fornøjelse.

Et RSS 1.0 problem

Fik denne mail fra Flemming:

Tak for en fin lille tutorial om din RSS feed reader. Meget klar og velskrevet. Jeg har brugt koden til at blive inspireret til en lidt større reader, der læser flere feeds, og kun tager de, der matcher specielle søgeord, osv.

Jeg kan uden problemer læse feeds fra alle de steder, jeg har forsøgt, undtagen Politiken (fx http://politiken.dk/rss/senestenyt.rss). Det undrer mig. Har forsøgt at udelade extension/ændre til xml/... Hvis jeg forsøger at dumpe strukturen med print_r ser det ud til at simplexml_loadfile slet ikke læser noget?

Har du erfaret noget tilsvarende, og har du en forklaring?


Politikkens feed er en RSS 1.0, derfor skal der laves en lille ændring i strukturen. I den første fremhævede linje har jeg fjernet "-> channel", da de "items" som vi skal bruge, ikke ligger inde i "channel-tagget" i RSS 1.0 XML'en.

I den anden fremhævede linie har jeg udkommenteret RSS 1.0's dato tag. PHP kan ikke "parse" kolonnet i "dc:date".

Har ikke fundet en løsning på det problem, så hvis du kender en, så gi' mig lige et hint.

<?php
		
  // RSS feeden hentes. Gemmes som object i $feed
  $feed = simplexml_load_file('http://politiken.dk/rss/senestenyt.rss');

  //Taeller til at begrænse antallet af nyheder
  $taeller  = 0;
  $antal = 5;

  //alt køres igennem utf8_decode() Der returner  ISO-8859-1 
  foreach($feed->item as $item){
      while($taeller<$antal){
         print utf8_decode("<a href='{$item->link}'>{$item->title}</a><br/>");
         //print utf8_decode("<i>{$item->dc:date} </i><br/>"); 
         print utf8_decode("{$item->description} <br/><br/>");
         break;
         }
      $taeller ++;
      }  
?>

OBS: RSS 1.0 feedreader. Dato-funktionen er udkommenteret

OpenSearch. Et alternativt eksempel

OpenSearch er en samling af teknologier, som giver søgemaskiner mulighed for at levere søgeresultater i et simpelt og lettilgængeligt XML format (RSS eller ATOM).

Søgemaskiner, der benytter open search teknologier, kan bruges af webudviklere til at vise resultaterne af en søgning i egne applikationer.

Statsbibliotekets suveræne søgemaskine Summa har en OpenSearch grænseflade, der kan benyttes på url'en:
http://statsbiblioteket.dk/search/opensearch.jsp?query=eksempel&start=1&number=10

Da resultatet fra Summa leveres som XML i RSS format, kan vi altså bruge vores hjemmebyggede feedreader til at vise søge resultatet med. De eneste forskel er, at der skal sendes en række parametrer med url'en. F.eks. en query-streng (en søgestreng), og et number, der angiver hvor mange poster, vi gerne vil se.

Dvs. at vi skal bruge brugerens søgeinput til at opbygge url'en med. Det er ganske simpelt. Du laver en formular ligesom den nedenstående, og tilføjer følgende kode for at opbygge url'en:

<?php
  //Brugerinput hentes, konverteres til utf-8, url'encodes, 
  //Derefter opbygges url og RSS feeden hentes
  if($_POST["soeg"] == "ok"){
	$query = urlencode(utf8_encode( $_POST["querystreng"]));
	$poster = $_POST["poster"];
	$url = "http://statsbiblioteket.dk/search/opensearch.jsp?query=";
	$url = $url . $query . "&start=1&number=" . $poster;
	$feed = simplexml_load_file($url);
	}			 
?>

Søgestrengen skal først konverteres fra ISO-8859-15 til utf-8, for at Summa Opensearch kan forstå de danske karakterer æ,ø og å.

Derefter bliver strengen url-encoded for at kunne sende de samme danske tegn og mellem rum i søgestrengen med i url'en.

OpenSearch i Summa

  Tast søgeordet ind:
  Antal poster du vil se:
 

RSS feed reader - et eksempel

Feed fra Ingeniøren

Atombombe fra elselskab: Danskerne kan nu købe akraft-strøm
Wed, 04 Dec 2024 15:36:41 +0100
Københavnsk elselskab udbyder nu elektricitet fra atomkraftværker. Der er dog ingen garanti for, at netop dit elforbrug stammer for den omstridte energikilde.

Synspunkt: Forretningsnær og forandringsparat digitalisering
Wed, 04 Dec 2024 15:30:00 +0100
Det er som om, at det er blevet en selvfølge, at digitaliseringsprojekter går over tid, at nye it-systemer giver anledning til stress, og at de ender med at gøre skade eller være direkte ulovlige. Ingen nævnt, ingen glemt. En væsentlig del af problemet er, at vi ikke formår at komme tæt nok på forretningen og organisationen – altså dem, der anvender systemerne og forstår domænet, it-systemet skal benyttes i.

Påbud og påtale efter fatal silo-ulykke: Ansatte faldt 25 meter ned
Wed, 04 Dec 2024 14:56:49 +0100
Arbejdstilsynet har udstedt strakspåbud og en påtale til nogle af de virksomheder, der var involveret i arbejdsulykken hos Flemløse Biogas, der har kostet tre personer livet. Årsagen til ulykken er dog stadig ukendt.

Blogindlæg: Er softwareopdatering blevet svaret på alle fejl?  
Wed, 04 Dec 2024 14:10:00 +0100
I nat fik 585 ejere af en elbil fra VW - og deres naboer - sig noget af en overraskelse. Uden den mindste varsel satte alarmen i bilerne i gang. Det fortsatte med få minutters mellemrum gennem natten. Det fik folk til at ringe til politiets vagtcentraler, som dog intet kunne gøre. En frustreret bilejer fra Struer sagde til TV2, at, »Det er simpelthen så frustrerende. Alarmen går hvert femte til tiende minut«. Alt blev prøvet for at slukke for alarmen og i sidste ende skulle der en afmontering af 12 volts-batteriet for at få gjort bilerne tavse.

Klimaaktivister styrede droner, der lukkede Københavns Lufthavn
Wed, 04 Dec 2024 13:05:29 +0100
12 personer blev anholdt som følge af droner i luftrummet omkring lufthavnen.

RSS feed og ophavsretten

Du skal være opmærksom på ophavsretten til det feed du ønsker at hente, og få tjekket rettighederne inden du går igang.

Det er nemlig de færreste nyhedsformidlere, som tillader at man bruger deres feed. De fleste vil helst prakke os en færdig designet nyhedsbox på.

En af undtagelserne er Ingeniøren, der p.t. tillader, at man bruger deres RSS feed på egen hjemmeside, så længe der linkes tilbage de originale artikler.