PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

Codeschnipsel

RSS 2.0 Klasse

Zurück zur Übersicht
Die folgende Klasse hilft beim erstellen von RSS 2.0 Feeds.

Features:
+ Erstellt valide RSS 2.0 Feeds
+ Vollständige Unterstützung der RSS 2.0 Spezifikation
+ Kann XHTML ausgeben
+ Unterstützt Caching

Die Klasse:
<?php
class rss {

    
/*
     * RSS 2.0 Class
     * Copyright: (c) by Markus P. N. (MARK.US at php-einfach.de)
     * Date (RFC 2822): Fri, 29 Oct 2010 23:15:38 +0200
    */

    /* Variables: */
    
protected $mime;
    protected 
$charset;
    protected 
$title;
    protected 
$link;
    protected 
$description;
    protected 
$language;
    protected 
$copyright;
    protected 
$managingEditor;
    protected 
$webMaster;
    protected 
$pubDate;
    protected 
$lastBuildDate;
    protected 
$category;
    protected 
$generator;
    protected 
$docs;
    protected 
$ttl;
    protected 
$textInput;
    protected 
$domain;
    protected 
$starttime;
    protected 
$itemid=0;
    protected 
$caching=FALSE;
    protected 
$cachefile;
    protected 
$cachetime;
    protected 
$items=array();
    
/* Constructor, sends header an sets required variables: */
    
public function  __construct($title, $link, $description, $charset="UTF-8", $starttime=null) {
        if (
stristr($_SERVER["HTTP_ACCEPT"],"application/rss+xml"))
            
$this->mime="application/rss+xml";
        elseif (
stristr($_SERVER["HTTP_ACCEPT"],"application/xml"))
            
$this->mime="application/xml";
        else
            
$this->mime="text/xml";
        
$this->charset=$charset;
        
header("content-type: ".$this->mime."; charset=".$this->charset);
        
$this->title=$title;
        
$this->link=$link;
        
$this->description=$description;
        if(
$starttime === null and $starttime !== false)
            
$this->starttime=microtime(true);
        elseif(
$starttime !== FALSE)
            
$this->starttime=floatval($starttime);
    }
    
/* Activates ($activated=true) or deactivates ($activated=false) the caching,
     * cached data will be ouputted to the file $cachefile,
     * the file will de refreshed after $cachetime seconds: */
    
public function caching($cachefile, $activate=true, $cachetime=900) {
        
$this->caching=TRUE;
        
$this->cachefile=$cachefile;
        
$this->cachetime=$cachetime;
    }
    
/* Sets the language of the feed: */
    
public function set_language($language) {
        
$this->language=$language;
    }
    
/* Sets the copyright of the feed: */
    
public function set_copyright($copyright) {
        
$this->copyright=$copyright;
    }
    
/* Sets the managing editor of the feed: */
    
public function set_managingEditor($email, $name) {
        
$this->managingEditor=array("email" => $email, "name" => $name);
    }
    
/* Sets the webmaster: */
    
public function set_webMaster($email, $name) {
        
$this->webMaster=array("email" => $email, "name" => $name);
    }
    
/* Sets the publication date of the feed: */
    
public function set_pubDate($timestamp) {
        
$this->pubDate=date("r", $timestamp);
    }
    
/* Sets the last build date of the feed: */
    
public function set_lastBuildDate($timestamp) {
        
$this->lastBuildDate=date("r", $timestamp);
    }
    
/* Sets the category of the feed: */
    
public function set_category($category) {
        
$this->category=(array)explode(",", $category);
        ;
    }
    
/* Sets the documentation of the feed version: */
    
public function set_docs($docs) {
        
$this->docs=$docs;
    }
    
/* Sets the time to life of the feed: */
    
public function set_ttl($minutes) {
        
$this->ttl=$minutes;
    }
    
/* Sets the image (logo) of the feed: */
    
public function set_image($url) {
        
$this->image=$url;
    }
    
/* Adds a text input box the feed: */
    
public function set_textInput($title, $description, $name, $link) {
        
$this->textInput=array("title" => $title, "description" => $description, "name" => $name, "link" => $link);
    }
    
/* Adds an item to the feed, returns the item ID (required by the following functions): */
    
public function add_item($title, $description, $link=NULL, $html=FALSE) {
        
$this->itemid++;
        if(
$html !== FALSE)
            
$description=htmlentities($description, ENT_QUOTES, $this->charset, TRUE);
        
$this->items[$this->itemid]=array("title" => $title, "description" => $description, "name" => $name, "link" => $link);
        return 
$this->itemid;
    }
    
/* Sets the author of the feed item: */
    
public function item_set_author($email, $name, $item=NULL) {
        if(
$item !== NULL and intval($item) > 0)
            
$item=intval($item);
        else
            
$item=$this->itemid;
        
$this->items[$item]["author"]=array("email" => $email, "name" => $name);
    }
    
/* Sets the category of the feed item: */
    
public function item_set_category($category, $item=NULL) {
        if(
$item !== NULL and intval($item) > 0)
            
$item=intval($item);
        else
            
$item=$this->itemid;
        
$this->items[$item]["category"]=(array)explode(",", $category);
    }
    
/* Sets the comment site of the feed item: */
    
public function item_set_comments($url, $item=NULL) {
        if(
$item !== NULL and intval($item) > 0)
            
$item=intval($item);
        else
            
$item=$this->itemid;
        
$this->items[$item]["comments"]=$url;
    }
    
/* Adds an attachment to the feed item: */
    
public function item_add_enclosure($url, $length, $type, $item=NULL) {
        if(
$item !== NULL and intval($item) > 0)
            
$item=intval($item);
        else
            
$item=$this->itemid;
        
$this->items[$item]["enclosure"][]=array("url" => $url, "length" => $length, "type" => $type);
    }
    
/* Sets an unique ID to the feed item: */
    
public function item_set_guid($guid, $isPermaLink="true", $item=NULL) {
        if(
$item !== NULL and intval($item) > 0)
            
$item=intval($item);
        else
            
$item=$this->itemid;
        if(
strval($isPermaLink) != "true")
            
$isPermaLink = "false";
        
$this->items[$item]["guid"]=array("guid" => $guid, "isPermaLink"  => strval($isPermaLink));
    }
    
/* Sets the publication date of the feed item: */
    
public function item_set_pubDate($timestamp, $item=NULL) {
        if(
$item !== NULL and intval($item) > 0)
            
$item=intval($item);
        else
            
$item=$this->itemid;
        
$this->items[$item]["pubDate"]=date("r", $timestamp);
    }
    
/* Sets the source of the feed item: */
    
public function item_set_source($url, $name, $item=NULL) {
        if(
$item !== NULL and intval($item) > 0)
            
$item=intval($item);
        else
            
$item=$this->itemid;
        
$this->items[$item]["source"]=array("url" => $url, "name" => $name);
    }
    
/* Outputs all item of this feed */
    
private function item_out() {
        
$out="";
        foreach (
$this->items AS $item) {
            
$out .= "<item>
<title>"
.$item["title"]."</title>
<description>"
.$item["description"]."</description>\r\n";
            if(isset (
$item["link"]))
                
$out .= "<link>".$item["link"]."</link>\r\n";
            if(isset (
$item["author"]))
                
$out .= "<author>".$item["author"]["email"]." (".$item["author"]["name"].")</author>\r\n";
            if(isset (
$item["category"]))
                
$out .= "<category>".implode("</category>\r\n<category>", $item["category"])."</category>\r\n";
            if(isset (
$item["comments"]))
                
$out .= "<comments>".$item["comments"]."</comments>\r\n";
            if(isset (
$item["guid"]))
                
$out .= "<guid isPermaLink=\"".$item["guid"]["isPermaLink"]."\">".$item["guid"]["guid"]."</guid>\r\n";
            if(isset (
$item["pubDate"]))
                
$out .= "<pubDate>".$item["pubDate"]."</pubDate>\r\n";
            if(isset (
$item["source"]))
                
$out .= "<source url=\"".$item["source"]["url"]."\">".$item["source"]["name"]."</source>\r\n";
            if(isset (
$item["enclosure"])) {
                foreach (
$item["enclosure"] AS $enclosure)
                    
$out .= "<enclosure url=\"".$enclosure["url"]."\" length=\"".$enclosure["length"]."\" type=\"".$enclosure["type"]."\" />\r\n";
            }
            
$out .= "</item>\r\n";
        }
        return 
$out;
    }
    
/* outputs the feed: */
    
public function output() {
        if(
$this->caching === TRUE and filemtime($this->cachefile) + $this->cachetime > time()) {
            
$handle=fopen($this->cachefile, "wb");
            
$out=fread($handle, filesize($this->cachefile));
            
fclose($handle);
            if(
$out !== FALSE) {
                echo 
$out;
                return 
TRUE;
            }
        }
        
$out="<?xml version=\"1.0\" ?>
<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">
<channel>
<title>"
.$this->title."</title>
<link>"
.$this->link."</link>
<description>"
.$this->description."</description>\r\n";
        if(
strlen($this->language) > 0)
            
$out .= "<language>".$this->language."</language>\r\n";
        if(
strlen($this->copyright) > 0)
            
$out .= "<copyright>".$this->copyright."</copyright>\r\n";
        if(
count($this->managingEditor) > 0)
            
$out .= "<managingEditor>".$this->managingEditor["email"]." (".$this->managingEditor["name"].")</managingEditor>\r\n";
        if(
count($this->webMaster) > 0)
            
$out .= "<webMaster>".$this->webMaster["email"]." (".$this->webMaster["name"].")</webMaster>\r\n";
        if(
strlen($this->pubDate) > 0)
            
$out .= "<pubDate>".$this->pubDate."</pubDate>\r\n";
        if(
strlen($this->lastBuildDate) > 0)
            
$out .= "<lastBuildDate>".$this->lastBuildDate."</lastBuildDate>\r\n";
        if(
count($this->category) > 0)
            
$out .= "<category>".implode("</category>\r\n<category>", $this->category)."</category>\r\n";
        if(
strlen($this->docs) > 0)
            
$out .= "<docs>".$this->docs."</docs>\r\n";
        if(
strlen($this->ttl) > 0)
            
$out .= "<ttl>".$this->ttl."</ttl>\r\n";
        if(
strlen($this->image) > 0)
            
$out .= "<image>
<url>"
.$this->image."</url>
<title>"
.$this->title."</title>
<link>"
.$this->link."</link>
</image>\r\n"
;
        if(
count($this->textInput) > 0)
            
$out .= "<textInput>
<title>"
.$this->textInput["title"]."</title>
<description>"
.$this->textInput["description"]."</description>
<name>"
.$this->textInput["name"]."</name>
<link>"
.$this->textInput["link"]."</link>
</textInput>\r\n"
;
        
$out .= "<atom:link href=\"http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]."\" rel=\"self\" type=\"application/rss+xml\" />\r\n";
        
$out .= $this->item_out();
        
$out .= "</channel>
</rss>"
;
        if(
$starttime !== FALSE)
            
$out .= "\r\n<!-- Generated in ".number_format(round((microtime(TRUE)-$this->starttime), 2), 2, ",", ".")."ms -->";
        if(
$this->caching === TRUE and filemtime($this->cachefile) + $this->cachetime < time()) {
            
$handle=fopen($this->cachefile, "wb");
            
fwrite($handle, $out);
            
fclose($handle);
        }
        echo 
$out;
    }
}
?>



Benutzung:
Die Funktionen, die mit set_ beginnen sind für Globale einstellungen. Die die mit item_set beginnen, sind für die einstellungen eines Eintrags (Standartmäßig der letzte).
Alle Funktionen sind in einem kurzen Kommentar darüber kurz beschrieben, zudem sind die Namen der Parameter Selbsterklärend.
Sollte es trotzdem Unklarheiten geben könnt ihr genaueres in der Spezifikation nachlesen, die Funktionen und Parameter sind nach den Elementen benannt für die sie zuständig sind.

Beispiele:
- Einfaches Feed mit einem Eintrag:
<?php
// erstelle neuen feed
$rss = new rss("feedname", "http://127.0.0.1/", "feedbeschreibung");
// Füge neuen Eintrag hinzu
$rss->add_item("titel vom Eintrag", "inhalt des eintrags");
// Gebe Feed aus
$rss->output();
?>

- Feed mit Logo und Eintrag mit Anhang:
<?php
$rss 
= new rss("feedname", "http://127.0.0.1/", "feedbeschreibung");
// füge logo zum feed hinzu
$rss->set_image("http://127.0.0.1/logo.gif");
$rss->add_item("titel vom Eintrag", "inhalt des eintrags");
// füge anhang zum Eintrag hinzu
$rss->item_add_enclosure("http://127.0.0.1/anhang.zip", "12216320", "application/zip");
$rss->output();
?>

- Feed aus dem ersten Beispiel mit Caching:
<?php
// erstelle neuen feed
$rss = new rss("feedname", "http://127.0.0.1/", "feedbeschreibung");
// Füge neuen Eintrag hinzu
$rss->add_item("titel vom Eintrag", "inhalt des eintrags");

// Aktiviert das Caching, die gecachten Daten sind 60 Sekunden lang gültig
$rss->caching("rss_cache.xml", true, 60);

// Gebe Feed aus
$rss->output();
?>

In den Obrigen beispielen muss die Klasse natürlich auch eingebunden werden.


Kommentare und Vorschläge zur Verbesserung sind erwünscht.

Kommentare

Autor MARK.US

Zurück zur Übersicht
Autor: Nils Reimers
Zurück: URLs im Text identifizieren

Für Fortgeschrittene

  • Objektorientierte Programmierung
  • PHP Sicherheit
  • Script-Beispiele
  • Codeschnipsel
  • Stellenmarkt
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur
  • CasinoAndy Finland
  • Casinoohnelizenz.info
  • Cryptocasinomaster.com
  • CasinoHEX.at
  • inkedin.com

Hoster – Geringste Ausfallzeit

  1. webgo Ø 1 Min.
  2. Linevast Ø 2 Min.
  3. netcup Ø 3 Min.
  4. All-Inkl.com Ø 6 Min.
  5. checkdomain Ø 8 Min.
  6. dogado Ø 17 Min.
  7. bplaced Ø 17 Min.
  8. Contabo Ø 25 Min.
  9. Hetzner Ø 49 Min.
  10. ONE.com Ø 62 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2023

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}