Benutzer-Werkzeuge

Webseiten-Werkzeuge


webdev:php:podcast-mit-simplexmlelement

Podcast erstellen mit SimpleXMLElement

Ein Podcast mit PHP zu erstellen kann so simpel sein, wie die Klasse SimpleXMLElement sich selbst nennt. Folgend ein Beispiel, wo aber nicht alle Tags berücksichtigt wurden, die von Apple spezifiziert sind; Weiter unten gibt es ein erweitertes Beispiel mit Itunes spezifischen Tags. Die Kodierung spezieller Zeichen in Child und Attribute übernimmt simpleXMLElement::asXML(), daher ist in diesem Beispiel die Funktion htmlspecialchars nicht nötig - Verlassen kann man sich aber nicht darauf, wenn zum Beispiel HTML-Code geliefert wird.

Einfach

simplexmlelement.podcast.php
<?php
/* podcast mit simpleXMLElement */
 
// beispiel datensatz
$data = array("http://example.com/1.mp3","http://example.com/2.mp3");
 
$xml = new SimpleXMLElement('<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"></rss>');
 
$channel = $xml->addChild("channel");
    $channel->addChild("title","Mein Podcast");
    $channel->addChild("link","http://example.com/podcast");
    $channel->addChild("language","de-de");
    $channel->addChild("copyright","meine Lizenz");
 
foreach ( $data as $item ) {
 
    $items = $channel->addChild("item");
        $items->addChild("title",$item);
        $items->addChild("link","http://example.com/podcast/item/");
        $items->addChild("description","Ein neuer Podcast: ".$item);
        $items->addChild("pubDate",date("D, d M Y H:i:s O",time()));
 
        $enclosure = $items->addChild("enclosure");
            $enclosure->addAttribute("url",$item);
            $enclosure->addAttribute("type","audio/x-mp3");
 
}
 
 
// und abschicken
header("Content-Type: text/xml");
 
print $xml->asXML();
 
 
?>

asXml() formatiert die Ausgabe nicht, ich habe mich einem Plugin für Notepad++ bedient; es gibt aber in den Comments Hinweise dazu, zb prettyprint. Ausgabe:

<?xml version="1.0"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
	<channel>
		<title>Mein Podcast</title>
		<link>http://example.com/podcast</link>
		<language>de-de</language>
		<copyright>meine Lizenz</copyright>
		<item>
			<title>http://example.com/1.mp3</title>
			<link>http://example.com/podcast/item/1</link>
			<description>Ein neuer Podcast: http://example.com/1.mp3</description>
			<pubDate>Sat, 16 Oct 2010 14:46:55 +0200</pubDate>
			<enclosure url="http://example.com/1.mp3" type="audio/x-mp3"/>
		</item>
		<item>
			<title>http://example.com/2.mp3</title>
			<link>http://example.com/podcast/item/2</link>
			<description>Ein neuer Podcast: http://example.com/2.mp3</description>
			<pubDate>Sat, 16 Oct 2010 14:46:55 +0200</pubDate>
			<enclosure url="http://example.com/2.mp3" type="audio/x-mp3"/>
		</item>
	</channel>
</rss>

Erweitertes Beispiel mit Namespaces

// Wenn man Namespaces zum übergeordneten Element hinzufügt, muss es explizit auf die NS-URI verweisen, zu dessen es gehört.
 
$ns = "http://www.itunes.com/dtds/podcast-1.0.dtd";
        $xml = new SimpleXMLElement('<rss xmlns:itunes="'.$ns.'" version="2.0"></rss>');
        $channel = $xml->addChild("channel");
        $channel->addChild("title","Mein Podcast");
        $channel->addChild("link","http://example.com/podcast");
        $channel->addChild("language","de-de");
        $channel->addChild("copyright","cc3.0");
        $channel->addChild("itunes:image", null,$ns)->addAttribute("href","http://example.com/bild.png");
        $channel->addChild("itunes:category", null,$ns)->addAttribute("text","Music");
        $channel->addChild("itunes:subtitle","Mein Podcast mit Nerdnews",$ns);
        $channel->addChild("itunes:author","Mein Name",$ns); 
        foreach ( $data as $item ) {
 
            $items = $channel->addChild("item");
            $items->addChild("title",$item["title"]);
            $items->addChild("link",$item["link"]);
            $items->addChild("description",htmlspecialchars($item["description"]));
            $items->addChild("pubDate",date("D, d M Y H:i:s O",strtotime($item["pubDate"])));
            $items->addChild("itunes:keywords",$item["keywords"],$ns);
 
            $enclosure = $items->addChild("enclosure");
            $enclosure->addAttribute("url",$item["url"]);
            $enclosure->addAttribute("type","audio/x-mp3");
 
        }
        // und abschicken
        // und abschicken
        header("Content-Type: text/xml");
        print $xml->asXML();

Ausgabe:

<?xml version="1.0"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
	<channel>
		<title>Haiko Hall Podcast</title>
		<link>http://datenfahrt.de/haikohall</link>
		<language>de-de</language>
		<copyright>cc3.0</copyright>
		<itunes:image href="http://example.com/image.png"/>
		<itunes:category text="Music"/>
		<itunes:subtitle>Tanzmusik from Berlin</itunes:subtitle>
		<itunes:author>Haiko Hall</itunes:author>
		<item>
			<title>Tanz in die Mitte</title>
			<link>http:/example.com/item/15</link>
			<description>Neuer Podcast aus Berlin-Mitte</description>
			<pubDate>Wed, 13 Oct 2010 21:41:28 +0200</pubDate>
			<itunes:keywords>podcast,techno,berlin</itunes:keywords>
			<enclosure url="http://example.com/podcast10210.mp3" type="audio/x-mp3"/>
		</item>
</channel>
</rss>
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
webdev/php/podcast-mit-simplexmlelement.txt · Zuletzt geändert: 2012/07/10 07:37 (Externe Bearbeitung)

hello, world