Publicer dine podcasts nemt med php og MySQL

For efterhånden lang tid siden skrev vi en guide til podcasting, fordi vi kunne se, at det var ret besværligt at komme i gang. Nu er vi gået skridtet videre og har lavet et slags publiceringssystem, som gør det meget nemt at administrere op til flere podcasts – alt kører i browseren, når bare man har sine mp3-filer eller video-filer klar.

En administrator kan oprette brugere af systemet, som så har hver sin podcast og kan gå ind med kodeord og brugernavn og oploade nye podcasts og sætte dem til at dukke op i et RSS-feed tilknyttet hver bruger, når det passer. På den måde kan man altså lave fx ti podcast-episoder og oploade alle sammen og sætte dem til at publiceres med en uges mellemrum.

Publiceringssystemet blev lavet for Xibit Öresund, som i dag bruger det til at administrere flere forskellige podcasts fra forskellige universiteter. Denne version inkluderer en flash-afspiller, så brugere kan se eller høre episoderne direkte på hjemmesiden, hvis de skulle være i tvivl om, hvor vidt de har lyst til at abonnere. Desuden kan man abonnere direkte på hvert feed ved hjælp af en knap, som starter itunes op med det samme.

Systemet gør brug af dynamiske RSS-feeds, der automatisk opdateres, så snart man har oploadet en fil – ikke noget med at skrive xml-kode mere! Og man har naturligvis mulighed for at redigere i beskrivelserne osv.

Kort forklaring af systemet
Brugeren logger ind med kodeord og brugernavn. Fra en indtastningsform får han eller hun lov til at indtaste en række felter: titel, beskrivelse, publiceringsdato og lignende. En “gennemse-knap” gør det muligt at oploade en fil fra brugerens egen maskine.

Indtastningsformen kalder et php-script, som sørger for at indtaste informationerne i en række i en databasetabel og give denne række et unikt nummer. Filen, som oploades, bliver sendt op i en bestemt folder på serveren, og adressen til denne fil bliver også indtastet i databasen – det er dette felt, som senere skal bruges som “enclosure” i RSS-feedet.

På samme måde registreres filens type (fx audio/mpeg) og størrelse i bytes. Af sikkerhedshensyn kan man kun få lov til at oploade visse filtyper og ikke fx exe-filer, og der er også en grænse for, hvor stor filen må være.

Nu er episoden oploadet og vil automatisk dukke op i feedet på den dato, brugeren har valgt. Brugeren kan se et overblik over de episoder, som hører til vedkommendes podcast og har her mulighed for at slette eller redigere i de enkelte episoder – det kunne jo være, at man var kommet til at skrive forkert dato.

Dynamiske RSS-feeds
Hvis man ved lidt om MySQL og php er det faktisk ikke så svært at lave dynamiske RSS-feeds – det gælder bare om at have en database og så ellers trække relevante data ud fra den.
Man kan lave et RSS-feed ved hjælp af php på samme måde som fx WordPress laver RSS-feeds – et sådant feed kommer altså til at have endelsen “.php” og ikke “.xml”, som nogle måske er vant til. Hvis det laves rigtigt, kan man nøjes med at lave det én gang og aldrig rette i det mere! Det vigtige er, at man har den rette encoding i toppen af php-dokumentet:
<code>

<?php
header(‘Content-type: text/xml; charset=UTF-8′);
print ‘<?xml version=”1.0″ encoding=”utf-8″?’.'>’;
?>

<rss version=”2.0″
xmlns:content=”http://purl.org/rss/1.0/modules/content/”
xmlns:wfw=”http://wellformedweb.org/CommentAPI/”
xmlns:dc=”http://purl.org/dc/elements/1.1/”>
<channel>
</code>

Ellers kan man få problemer med æ, ø og å og andre specielle tegn. Dette kan være lidt svært og afhænger også af din servers og databases indstilling.

Herefter kommer de velkendte xml-tags med feedets link og titel osv. Her er det RUC-feedet hos Xibit:

<code>
<title>Research podcasts from Roskilde University, Communication Studies
</title>
<link>http://ruc.xibit.info/</link>
<description>Researcher interviews from Roskilde University, Communication Studies
(XibitCast, Danish)</description>
<image>
<url>http://xibit.info/tools/podcast/feeds/ruc.gif</url>
<title>ruc logo</title>
<link>http://ruc.xibit.info/</link>
<width>144</width>
<height>144</height>
</image>
<pubDate>Sat, 10 Feb 2007 10:00:00 +0200</pubDate> <language>da</language>
</code>Det dynamiske ligger i de forskellige items. Her er det en simpel SQL-kommando, som henter informationerne i databasen. Hvis man ikke ved noget om databaser, er nedenstående nok ret sort, men hvis man gør, er det faktisk helt nemt:
<code>
$timestamp = mktime();$rows = mysql_query (“SELECT * FROM tabel_X WHERE pubdate<’$timestamp’ AND idnr=1 ORDER BY pubdate DESC LIMIT 50;”);
</code>
Oversat til dansk henter denne kommando de 50 seneste episoder og sorterer dem efter publiceringsdato med den nyeste episode øverst. Disse informationer “spyttes ud” som xlm-kode og genererer de items, som vi kender fra RSS-feeds. Et item repræsenterer en episode:<code>
while ( $row = mysql_fetch_row($rows) ) {

$podcasttitel = $row[1];
$description = $row[2];
$enclosure = $row[3];
$category = $row[4];
$pubdate = $row[5];
$size = $row[6];
$type = $row[7];

// convert unix timestamp to readable format
$pubdate1 = date(“D, d M Y H:i:s”, $pubdate);

print ‘<item><title>’; echo $podcasttitel; echo ‘</title>’;
print ‘<description>’; echo $description; echo ‘</description>’;
print ‘<link>’; echo $enclosure; echo ‘</link>’;
print ‘<guid>’; echo $enclosure; echo ‘</guid>’;
print ‘<category>’; echo $category; echo ‘</category>’;
print ‘<pubDate>’; echo $pubdate1; echo ‘ +0200</pubDate>’;
print ‘<enclosure url=”‘; echo $enclosure; echo ‘” length=”‘; echo $size; echo ‘” type=”‘; echo $type; echo ‘” /></item>’;
} ?>
</code>
Til sidst skal feedet bare “lukkes” som vi kender det med et

<code>
</channel>
</rss>
</code>

Det var en lidt forsimplet forklaring – men alligevel en ordentlig smøre! Altsammen kræver, at du har MySQL og php på din server, og det har de fleste. Vi arbejder i øjeblikket på at raffinere selve interface-designet, og vi vil blandt andet tilføje nogle skærmbilleder her i dette indlæg – men vi er altid klar til at installere det hos din organisation – bare ring eller skriv.

Leave a Reply