+ Antworten
Ergebnis 1 bis 11 von 11

Thema: [Tutorial] RSS-Feed in eigene Website einbinden

  1. #1
    TP-Specialist His.Master's.Voice lebt für das TP und seine User His.Master's.Voice lebt für das TP und seine User His.Master's.Voice lebt für das TP und seine User His.Master's.Voice lebt für das TP und seine User His.Master's.Voice lebt für das TP und seine User His.Master's.Voice lebt für das TP und seine User His.Master's.Voice lebt für das TP und seine User His.Master's.Voice lebt für das TP und seine User Avatar von His.Master's.Voice
    Registriert seit
    Mar 2006
    Ort
    Wörrstadt
    Beiträge
    2.454

    [Tutorial] RSS-Feed in eigene Website einbinden

    Viele Webseitenbetreiber bieten einen sog. RSS-Feed als Infokanal, den man mit seinem Browser abonnieren kann. Diese Schlagzeilen oder Info's kann man jedoch auch auf seine eigene Website einbinden um seinen Besuchern einen zusätzlichen Service anzubieten.

    Was brauche ich?
    1. Einen RSS-Parser, der die Daten ausliesst und vorab aufbereitet. Zum Beispiel: http://magpierss.sourceforge.net
    2. PHP ab der Version 4.2 auf dem eigenen Webspace
    3. Einen RSS-Feed den man einbinden möchte. Diese sind häufig nach dem Muster http:// www.einedomain.de/feedname.xml aufgebaut.

    Wie komme ich an solch einen RSS-Feed?
    Einfach mal in folgenden Verzeichnissen nach einem News-Feed suchen. Diese sind nach Kategorien aufgebaut. Zum Beispiel Sport, Nachrichten, Internet usw.
    www.rss-scout.de
    www.rss-verzeichnis.de
    www.rss-nachrichten.de
    www.xmlfeeds.de
    www.web-feed.de
    www.all4rss.com
    www.rss-katalog.com
    www.feedster.com

    Vorbereitung auf dem eigenem Webspace:
    Habt ihr Euch den magpie Parser downgeloadet, kopiert ihr folgende Dateien in das Verseichnis wo auch die HTML-Datei liegt wo ihr den NewsFeed einbauen wollt. Bsp. soll es die Startseite (index.html) sein, kopiert die "rss_fetch.inc", "rss-parser.inc", "rss-cache.inc" und "rss-utils.inc" in das Hauptverzeichnis. Weiterhin das Verzeichnis /extlib mit der darin enthaltenen Datei Snoopy.class.inc übernehmen.
    Das Script versucht automatisch noch ein Verzeichnis /cache anzulegen. Sicherheitshalber einfach dieses anlegen und die Rechte auf chmod(775) setzen.

    Script in die Website einbauen:
    Den folgenden php Code einfach an die Stelle der HTML-Datei setzen, wo der News-Feed erscheinen soll. Anschließend muss die Datei aber mit der Endung php abgespeichert werden (bei der Startseite wäre dies z.B. index.php)

    PHP-Code:
    <?php
    define
    ('MAGPIE_CACHE_DIR''cache');
    define('MAGPIE_CACHE_AGE''600');
    require_once(
    'rss_fetch.inc');
    $url 'http://www.tagesschau.de/newsticker.rdf';

    if ( 
    $url ) {
    $num_items 10;
    $rss fetch_rss$url );
    $items array_slice($rss->items0,$num_items);
    echo 
    $rss->channel['title'];}

    echo 
    "<ul id='feed'>";
    foreach (
    $items as $item) {
    $href $item['link'];
    $title $item['title'];
    echo 
    "<li><a href=$href target='_blank'>$title</a></li>";}
    echo 
    "</ul>";
    ?>
    Im Beispielcode habe ich mir den News-Feed von der ARD - Tagesschau ausgesucht. Unter der Variablen $url müsst ihr daher die http Adresse eintragen.
    Der definierte Cache dient zur Entlastung des Quellservers und die Zahl 600 ist die Zeit in Sek. wie auf neue Nachrichten abgefragt wird. Mit $num_items = 10; wird die Zahl der einzulesenden Schlagzeilen auf 10 beschränkt. Wer nur 5 möchte schreibt somit $num_items = 5;
    Anschließend werden die Schlagzeilen über den normalen ul tag in Listenform auf der Website ausgegeben. Das Standard html Listenelement ist ein einfacher kleiner Kreis. Den kann man mit den üblichen css Befehlen über die id="feed" formatieren, z.B. eine kleine Grafik zuweisen.

    Und wie sieht das jetzt aus?
    Ich habs mal auf einer monsterhaften Seite eingebaut. Guckst du bei der Überschrift News Top10

    Wichtig: Nicht jeden RSS-Feed darf man einbauen. Der Beispiel-Feed von der ARD - Tagesschau darf für nichtkommerzielle Seiten benutzt werden, jedoch mit der Auflage das keine Ansicht in Frames erfolgt. Daher target='_blank' im obigen php Code benutzt, bewirkt die Ansicht im neuen Browserfenster. Weiterhin muss die Quelle benannt wierden. Falls derartige Hinweise nicht auf der jeweiligen Anbieterseite vorhanden sind im Zweifelsfall per netter E-Mail nachfragen.

    Viel Spaß beim Nachbauen...!
    Geändert von His.Master's.Voice (23.07.2007 um 19:05 Uhr)
    Gruß HMV

  2. #2
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Sehr schön !

    Ich habe noch ein rudimentäres Beispiel. Der Parser ist ein einfacher xml-Parser, das Array muss sozusagen "händisch" ausgelesen werden.
    Als Beispiel hab ich mal den Spiegelfeed ausgegeben

    PHP-Code:
    <?php
    #Feed in string einlesen
    $news file_get_contents('http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml');

    $content='<h1>Spiegel Newsfeed</h1>';
    #Feed parsen 
    $p =& new xmlParser();
    $p->parse($news);
    #Referenzobjekt mit den items
    $items =& $p->output[0]['child'][0]['child'];

    #wer sich das array anschauen möchte                                             
    #echo '<pre>'.print_r($items,true).'</pre>'; 

    #die ersten 10 Ergebnisse ausgeben
    for($i=5;$i<15;$i++) {
        
    $content.='<div class="item_link">
        <a href="'
    .$items[$i]['child'][1]['content'].'" target="_blank">'.
        
    utf8_decode($items[$i]['child'][0]['content']).
        
    '</a></div>';
    }
    #und ausgeben
    echo $content;

    #der parser
    class xmlParser{

       var 
    $xml_obj null;
       var 
    $output = array();

       function 
    xmlParser(){

           
    $this->xml_obj xml_parser_create();
           
    xml_set_object($this->xml_obj,$this);
           
    xml_set_character_data_handler($this->xml_obj'dataHandler');
           
    xml_set_element_handler($this->xml_obj"startHandler""endHandler");

       }

       function 
    parse($inp){

           
           if (!
    xml_parse($this->xml_obj,$inp)) {
               die(
    sprintf("XML error: %s at line %d",
               
    xml_error_string(xml_get_error_code($this->xml_obj)),
               
    xml_get_current_line_number($this->xml_obj)));
               
    xml_parser_free($this->xml_obj);
           }
          

           return 
    true;
       }

       function 
    startHandler($parser$name$attribs){
           
    $_content = array('name' => $name);
           if(!empty(
    $attribs))
             
    $_content['attrs'] = $attribs;
           
    array_push($this->output$_content);
       }

       function 
    dataHandler($parser$data){
           if(!empty(
    $data)) {
               
    $_output_idx count($this->output) - 1;
               
    $this->output[$_output_idx]['content'] .= $data;
           }
       }

       function 
    endHandler($parser$name){
           if(
    count($this->output) > 1) {
               
    $_data array_pop($this->output);
               
    $_output_idx count($this->output) - 1;
               
    $this->output[$_output_idx]['child'][] = $_data;
           }
       }

    ?>


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  3. #3
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Klasse Tutorial, Feeds sind immer gut


  4. #4
    TP-Specialist Mich@el lebt für das TP und seine User Mich@el lebt für das TP und seine User Mich@el lebt für das TP und seine User Mich@el lebt für das TP und seine User Mich@el lebt für das TP und seine User Mich@el lebt für das TP und seine User Mich@el lebt für das TP und seine User Avatar von Mich@el
    Registriert seit
    Oct 2005
    Ort
    Würzburg
    Beiträge
    2.810
    Auch wenn´s ein wenig länger gedauert hat... dem schließe ich mich definitiv an! Ne Menge Arbeit, die ganz bestimmt nicht umsonst war/ist.

    Grüße
    Michael
    Back to business!

  5. #5
    TP-Newbie lala macht alles soweit korrekt
    Registriert seit
    Sep 2003
    Ort
    MUC
    Beiträge
    4
    suche schon länger ne lösung

    hier mein feed

    bei dem mir die titel als links angezeigt werden
    bei ner auswahl werden sie in der news.php alle nacheinander gelistet angezeigt

    --> ich möchte aber nur eine news oder genau die angewälte news direkt in der liste anzeigen

    nicht immer die ganze liste mit den zur verfügung stehenden news ganz von oben angezeigt - so wenn man die letzte news anklickt sieht man erst die erste und muss dann bis zur letzten scrollen

    weiß jemand nen rat?


    <?php
    require_once('magpierss-0.72/rss_fetch.inc');
    $url = 'http://www.newsfeedwebsite.de/news/NewsFeed.php';
    $rss = fetch_rss($url);
    foreach ($rss->items as $item) {
    $title = $item[title];
    $link = 'http://www.meinewebsite.de/news.php class="news"';
    $desc = $item[description];
    if($i < 10) {
    echo "<a href=$link>$title</a><br>\n";
    $i++;
    }
    }
    ?>

  6. #6
    TP-Newbie lala macht alles soweit korrekt
    Registriert seit
    Sep 2003
    Ort
    MUC
    Beiträge
    4
    weiß keiner nen rat ?

  7. #7
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Du musst natürlich für jede News statt der Übersicht-URL auch die individuelle URL angeben. Soll heissen, statt z.B. news.php gibst Du für jede News die entsprechende ID mit an, z.B. news.php?id=18
    Dann wertest Du beim Aufruf aus welche ID angefordert wurde, lädst die zugehörige News aus der DB und schickst sie an den Browser.

  8. #8
    TP-Newbie lala macht alles soweit korrekt
    Registriert seit
    Sep 2003
    Ort
    MUC
    Beiträge
    4
    danke Dir aber das versteh ich so nicht ganz wie ich die links einzeln verlinken soll?

    durch das script unten werden 10 titel ausgegeben
    diese sind dann auf die news.php verlinkt
    -> wie verlinkt man aber links einzelln auf eigene seiten?

  9. #9
    TP-Newbie DjDope macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Ort
    Nürnberg
    Beiträge
    1
    Also ich wollte jetzt mal einen RSS-Feed nach dem ersten Tut einbauen, hab alles gemacht wie beschrieben, nun bekomme ich folgende Fehlermeldungen:

    Code:
    Warning: MagpieRSS: Failed to fetch http://www.gegen-hartz.de/assets/rss/news.xml (HTTP Error: connection failed ) in /usr/export/www/vhosts/funnetwork/hosting/rrshare/al/rss_fetch.inc on line 238
    
    Warning: array_slice() expects parameter 1 to be array, null given in /usr/export/www/vhosts/funnetwork/hosting/rrshare/al/index.php on line 18
    
    
    Warning: Invalid argument supplied for foreach() in /usr/export/www/vhosts/funnetwork/hosting/rrshare/al/index.php on line 22
    die index.php sieht so aus:

    PHP-Code:
    <?
    include ("configurationsdateinameistgeheim.php");
    include (
    "head.php");
    echo 
    "<table width='95%' height='95%' border='0'><tr><td>";

    echo 
    "<h3>IRGENDEIN TEXT</h3>

    <font size='3'><b>Aktuelle News:</b></font><br>"
    ;

    define('MAGPIE_CACHE_DIR''cache');
    define('MAGPIE_CACHE_AGE''3600');
    require_once(
    'rss_fetch.inc');
    $url 'http://www.gegen-hartz.de/assets/rss/news.xml';

    if ( 
    $url ) {
    $rss fetch_rss$url );
    $items array_slice($rss->items0,5);
    echo 
    $rss->channel['title'];}

    echo 
    "<ul id='feed'>";
    foreach (
    $items as $item) {
    $href $item['link'];
    $title $item['title'];
    echo 
    "<li><a href=$href target='_blank'>$title</a></li>";}
    echo 
    "</ul>";


    echo 
    "</td></tr></table>";
    include (
    "foot.php");
    ?>
    die .inc Dateien hab ich alle so belassen wie sie waren.

    Weiß jemand wo da der fehler liegt?

  10. #10
    TP-Newbie garett macht alles soweit korrekt
    Registriert seit
    Oct 2011
    Beiträge
    2
    Hat super funktioniert danke für das Tutorial.

    Ich hätte allerdings gerne das auch gleich der Content angezeigt wird und nicht nur der Titel des Feeds. Kann mir da jemand weiterhelfen?

    Vielen Dank

  11. #11
    TP-Newbie garett macht alles soweit korrekt
    Registriert seit
    Oct 2011
    Beiträge
    2
    Ich hab es geschafft mit $description.
    Stehe jetzt allerdings vor 2 Problemen.

    1. es wird nicht der gesamte Text sondern nur Teile angezeigt. Wenn noch mehr Content kommen sollte steht nur ein [...] wie kann ich das ändern?

    2. Ich würde gerne nur die Feeds aus einer Kategorie anzeigen lassen.

    Mein Code derzeit:

    PHP-Code:
     <?php 
        define
    ('MAGPIE_CACHE_DIR''cache');
        
    define('MAGPIE_CACHE_AGE''6000000');
        require_once(
    'rss_fetch.inc');
        
    $url 'http://www.css4you.com/blog/feed/';
        
        
        if ( 
    $url ) {
        
    $num_items 100;
        
    $rss fetch_rss$url );
        
    $items array_slice($rss->items0,$num_items);
        }
        
        echo 
    "<ul id='feed' class='ex40'>";
        foreach (
    $items as $item) {
        
    $href $item['link'];
        
    $title $item['title'];
        
    $description $item['description'];
        
        echo 
    "<li class='none'><h1>$title</h1></li>";
        echo 
    "<p>$description</p>";
        }
        echo 
    "</ul>"
        
    ?>

+ Antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51