PHP Scripte
Atom Builder
PHP, Klassen, rss, xml, rdf, atom, generate, erzeugen, generieren, ausgeben, feed
There is also an english version of this document available!
Atom Builder sind PHP-Klassen die Atom-Feeds nach Spezifikation 1.0 erzeugen. Die Klassen sind sehr ähnlich aufgebaut wie die von RSS Builder. Sie können bei sourceforge.net runtergeladen werden. Achtung: Sie wurden ausschließlich mit PHP 5.1.0 getestet.
Zuerst erzeugen wir eine neue Instanz von der Mutterklasse:
include_once '../inc/class.AtomBuilder.inc.php';
$atom = new AtomBuilder('Titel des Feeds', 'http://example.com/link_zum_feed', 'tag:flaimo@example.com,2004-12-31:link_zum_feed');
Wie man sieht werden drei Argumente übergeben. Dies sind Pflichtangaben für jeden Atom Feed. Das erste Argument ist der Titel des Feeds, das zweite Argument ist die URL des Feeds und das letzte Argument ist eine ID die weltweit eindeutig für den Feed ist. Eindeutige IDs werden später auch noch für die einzelnen Einträge (Entries) benötigt. Für die Gestaltung solcher eindeutigen IDs gibt es eine Anleitung.
Eine weitere Pflichtangabe ist die Eigenschaft, wann der Feed das letzte mal geupdatet wurde:
$atom->setUpdated('2005-10-20T10:04:00Z');
Sollte diese Eigenschaft (ISO.8601.1988 konforme Angabe) nicht manuell gesetzt werden, so wird automatisch die aktuelle Uhrzeit hergenommen. Tipp: Seit PHP 5 kann man date('c', $timestamp) verwenden um ein gültiges ISO-Datum zu erzeugen.
Nun können einige optionale Angaben zu den Feed gemacht werden von denen die meisten selbsterklärend sind:
$atom->setEncoding('UTF-8');
$atom->setLanguage('en');
$atom->setSubtitle('Beschreibung des Feeds');
$atom->setRights('2006 © Example.com');
$atom->setIcon('http://flaimo.com/16x16_icon.png');
$atom->setLogo('http://flaimo.com/100x50_logo.png');
$atom->setAuthor('Flaimo', 'flaimo@example.com', 'http://example.com/');
$atom->addContributor('Jörg', 'joerg@example.com');
$atom->addContributor('Joe');
Subtitle ist die Kurzbeschreibung des Feeds. Es können auch Angaben zum Autor bzw. zu beteiligten Personen gemacht werden. Autor kann nur einer pro Feed bzw. später pro Eintrag angegeben werden. Contributors können beliebig viele verwendet werden. Jedesmal wenn man eine Personenangabe für einen Author/Contributor macht werden drei Argumente übergeben: Das erste Argument ist der Name der Person und ist eine Pflichtangabe. Die beiden weiteren Argumente sind die E-Mail Adresse und die Homepage. Diese sind optional.
Sowohl für den Feed als auch später für die einzelnen Beiträge können Links und Kategorien angegeben werden:
$atom->addLink('http://php.net/', 'Official PHP homepage', 'related', 'text/html', 'en');
$atom->addLink('http://example.com/', 'Example.com – HTML Homepage', 'alternate', 'text/html', 'en');
$atom->addCategory('Webdesign', 'http://www.example.com/tags', 'Web 2.0 Webdesign');
$atom->addCategory('PHP', 'http://www.example.com/tags', 'PHP-Scripting');
Für jeden Link können fünf Argumente angegeben werden. Das erste Argument ist die URL des Links. Das zweite Argument ist die Beschreibung der URL. Das dritte Argument ist Beziehung die der Link zum Feed hat. Mögliche Angaben sind:
- alternate
- related
- self
- enclosure
- via
Das vierte und fünfte Argument sind der MIME-Type und die Sprache des Links.
Auch die Angabe zu Kategorien hat mehrere Argumente. Das Erste ist der Name der Kategorie und ist eine Pflichtangabe. Das zweite Argument ist das Schema auf dem die Kategorienamen basieren und das dritte Argument ist die Kurzbeschreibung der Kategorie. Die letzten beiden Argumente sind optional.
Nun können wir beginnen die einzelnen Einträge (Entries) zu erzeugen:
$entry_1 = $atom->newEntry('Titel des ersten Beitrags', 'http://example.com/permalink_zum_ersten_beitrag', 'tag:flaimo@example.com,2004-12-31:permalink_zum_ersten_beitrag/detail/1');
$entry_1->setUpdated(''2005-10-29T14:44:00Z'');
Wie man sieht sind die Pflichtangaben die Gleichen wie beim Erzeugen des Feeds.
Ebenfalls gleich sind dann die optionalen Eigenschaften für jeden Eintrag:
$entry_1->setPublished('2005-10-29T14:34:00.25Z'); // Erstveröffentlichung des Beitrags
$entry_1->setAuthor('Flaimo', 'flaimo@example.com', 'http://example.com/');
$entry_1->addContributor('Matt', 'matt@example.com');
$entry_1->addContributor('Joe', '', 'http://joespage.com');
$entry_1->setRights('2006 © Example.com');
$entry_1->addLink('http://slashdot.org/', 'slashdot.org', 'via', 'text/html', 'en');
$entry_1->addLink('http://orf.com/', 'ORF ON', 'related', 'text/html', 'de');
$entry_1->addLink('http://netwold.com/', 'News Networld', 'related', 'text/html', 'de');
$entry_1->addCategory('Webdesign', 'http://www.flaimo.com/tags', 'Web 2.0 Webdesign');
Für den eigentlichen Inhalt können nun folgende optionale Angaben gemacht werden:
$entry_1->setSummary('Eine kurze Zusammenfassung');
$entry_1->setContent('Der ganze Inhalt des <b>Eintrags</b>', 'html');
Summary ist die Zusammenfassung des Beitrags. Content ist dann der eigentlich Inhalt. Überall wo eine Angabe zu Title, Subtitle, Summary oder Content gemacht werden kann wird als erste Argument immer der Text/Inhalt angegeben. Optional kann dann noch als zweites Argument angegeben werden welchen Typ der Inhalt hat (text, html, xhtml). Für Content-Angaben kann weiters als Typ auch jeder beliebiger MIME-Type verwendet werden.
Nachdem alle Angaben zum Beitrag gemacht wurden kann dieser nun zum Feed hinzugefügt werden:
$atom->addEntry($entry_1);
Weitere Beiträge werden dann auf die gleiche Art hinzugefügt.
Abschließend müssen wir nun noch den Feed ausgeben. Dazu gibt es drei Möglichkeiten:
$atom->outputAtom(1.0.0);
$foo = $atom->getAtomOutput('1.0.0');
echo $atom->saveAtom('1.0.0', 'pfad/zum/speicherort');
Mit outputAtom wird der Feed als application/atom+xml ausgegeben. Mit getAtomOutput kann man den erzeugten XML-Code in eine Variable ablegen und weiterverarbeiten. Mit saveAtom kann der Feed als XML-Dokument abgespeichert werden und der Name der XML-Datei wird zurückgegeben. Alle drei Methoden haben als erstes Argument die Atom-Version die erzeugt werden soll. Im Moment steht nur die Version 1.0.0 zur Verfügung.