RSS Newsfeed (XML) mit PHP auslesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • RSS Newsfeed (XML) mit PHP auslesen

    Hallo erstmal, das hier ist mein erster Post

    Ich habe folgende Frage:

    Ich habe hier folgenden RSS Feed (XML Datei) der ausgelesen werden soll

    PHP-Code:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd"> 

    <rss version="0.91">

    <channel>
        <title>Meine Seite</title>
        <link>[url]http://www.seite.de[/url]</link>
        <description>Beschreibung meiner Seite</description>
        <language>de</language>

        <item>
            <title>Meine Nachricht</title>
            <link>[url]http://seite.de/meine-nachricht.html[/url]</link>
            <description>Beschreibung der Nachricht</description>
        </item>

    </channel>
    </rss>
    Ich bräuchte jetzt ein PHP Script, welches die xml ausließt und in der ich einstellen kann, wie die ausgabe hinterher aussehen soll. So wie in der nächsten Code Box sollte die Ausgabe aussehen:

    PHP-Code:
    <div align="center">
      <
    center>
      <
    table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#808080" width="380" height="13">
        <
    tr>
          <
    td width="380" height="13"><b><font face="Arial" size="2">[TITLE]</font></b><br>
          <
    font size="2" face="Arial">[DESCRIPTION]... 
          <
    a href="<link>">[mehr]</a>       
          <
    hr color="#000000" size="0">
          </
    font>
          </
    td>
        </
    tr>
      </
    table>
      </
    center>
    </
    div
    Könnte mir da vielleicht jemand mit helfen, ich bekomme das alleine und mit den Scripten die ich habe nicht hin. Wäre echt nett, wenn sich da mal jemand einschalten könnte. Im Anhang habe ich auch noch mal die HTML Ausgabe gezeigt, vielleicht hilft es ja jemandem

    Schöne Grüße

    Sabine
    (0005358)
    Angehängte Dateien

  • #2
    Du kannst nich erwarten dass dir das hier jemand komplett schreibt, aber helfen tun wird och gerne!

    Such mal nach "Regulären Ausdrücken" wir haben hier auch ein gutes Tutorial dazu, damit sollte es gehen!
    Die Musikreview Seite

    hi, i'm a signature virus. copy me into your signature to help me spread.

    Kommentar


    • #3
      Ich weiss nicht aber warum guckst du dir nicht mal den Schnipsel an:
      http://www.codeschnipsel.net/index.p...&id=1067500076

      Kommentar


      • #4
        PHP-Code:
        <?php

        /**
         * rdfparser
         * class to parse newsfeeds into arrays
         * @author clemens krack
         * @link [url]http://www.tripdown.de[/url]
         * @access public
         **/
        class rdfparser {
           var 
        $_items// array the items
           
        var $_may// array what may be done
           
        var $_act// string current active
           
        var $_index// integer current index
           
        var $_url// url to open

           /**
            * rdfparser::rdfparser()
            * 
            * @param $url url of  the feed
            * @return void
            **/
           
        function rdfparser($url)
           {
               
        $this->_url $url;
           }

            
        /**
             * rdfparser::parse()
             * parses a newsfeed an returns an array containing the items.
             * @return array
             **/
            
        function parse() 
            {
                
        $this->_items = array();
                
        $this->_index 0;
                
        $this->_may['parse'] = false;
                
                
        $parser xml_parser_create();
                
                
        xml_set_object($parser$this);
                
        xml_set_element_handler($parser"_startElement""_endElement");
                
        xml_set_character_data_handler($parser"_charHandler");
                
                
        $fp fopen($this->_url"r");
                while(!
        feof($fp)) {
                    
        $line fgets($fp4096);
                    
        xml_parse($parser$line);
                }
                
        fclose($fp);
                
                
        xml_parser_free($parser);
                
                return 
        $this->_items;
            }

            function 
        _startElement($parser$name$attrs)  
            {
                
        // allow parsing chardata as soon as an element is opened
                
        $this->_may['char'] = true;
                
                if (
        $name=="ITEM") {
                    
        // allow parsing as soon as an item element was opened
                    
        $this->_may['parse'] = true;
                    
        // one more item -> increment index
                    
        $this->_index++;
                    
        $this->_items[$this->_index] = Array('title' => '''link' => '''description' => '');
                } else if (
        $name=="TITLE") {
                    
        // current active: title
                    
        $this->_act "TITLE";
                } else if(
        $name=="LINK") {
                    
        // current active: link
                    
        $this->_act "LINK";
                } else if(
        $name=="DESCRIPTION") {
                    
        // current active: description
                    
        $this->_act "DESCRIPTION";
                } else {
                    
        // unknown tag, don't allow adding chardata
                    
        $this->_may['char'] = false;
                }
                
        $this->_act strtolower($this->_act);
            }

            function 
        _endElement($parser$name
            {
                if(
        $name=="ITEM") {
                    
        // item tag closed: parsing not allowed
                    
        $this->_may['parse'] = false;
                } elseif(
        $name=="TITLE" || $name=="LINK" || $name="DESCRIPTION") {
                    
        // datatag closed, we don't want different chardata
                    
        $this->_may['char'] = false;
                }
            }

            function 
        _charHandler($parser$data
            {
                
        $data trim($data);
                
                if(!
        $this->_may['char'] OR !$this->_may['parse']) {
                    return;
                }
                if (isset(
        $this->_items[$this->_index][$this->_act])) {
                    
        $this->_items[$this->_index][$this->_act] .= $data;
                } else {
                    
        $this->_items[$this->_index][$this->_act] = $data;
                }
            }
        }
        ?>

        Kommentar


        • #5
          Cool, echt ne geile Klasse!
          ich muss noch viel lernen.

          THX

          Kommentar


          • #6
            Danke schonmal für eure Hilfe. Bei dem code von rythms versteh ich nur nicht, wo ich die URL zur xml file einsetzen muss. Könnte mir da kurz noch jemand helfen?

            MfG

            Sabine

            Kommentar


            • #7
              PHP-Code:
              $rdfparser = new rdfparser('http://url/zum/feed.rss');
              $items $rdfparser->parse();
              echo 
              '<pre>' print_r($itemstrue) . '</pre>'
              [color="#334D7B"]"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"[/color]
              [color="#9C5245"]"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "[/color]
              [color="#334D7B"]"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."[/color]

              © Harald Schmidt

              Kommentar


              • #8
                Ich habe zwar das erste Problem noch nicht ganz gelöst, aber habe schon das nächste Problem.

                Ich habe einen zweiten RSS Feed in dem es nur den Title und die URL gibt (keine description). Das PHP Script sollte die Nachrichten jedoch nicht nur auslesen, sondern auch alphabetisch sortieren.

                Einer ne Idee?

                Kommentar


                • #9
                  [spam]ja, ich[/spam]
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    $rdfparser = new rdfparser('http://url/zum/feed.rss');
                    $items = $rdfparser->parse();
                    echo '<pre>' . print_r($items, true) . '</pre>';

                    und wie gebe ich jetzt "nur" <link> oder <description> aus? bzw. begrenze die ausgabe auf die ersten 10 einträge?

                    danke

                    Kommentar


                    • #11
                      Schau dir mal die Ausgabe von
                      PHP-Code:
                      echo '<pre>' print_r($itemstrue) . '</pre>'
                      an, das ist ein Array. Also wirds mit
                      PHP-Code:
                      $rdfparser = new rdfparser('http://url/zum/feed.rss');
                      $items $rdfparser->parse();
                      $count = (count($items) < 10) ? count($items) : 10;
                      for (
                      $i 0$i $count$i++) {
                          echo 
                      '<a href="'.$items[$i]['LINK'].'">'.$items[$i]['TITLE'].'</a><br />';
                          echo 
                      $items[$i]['DESCRIPTION'].'<hr />';

                      gehen.

                      *Alle Angaben ohne Gewähr - mit ist es zu spät, die Klasse zu lesen. Sorry.

                      Kommentar


                      • #12
                        Hallo allerseits,

                        Es ist zwar sehr lange her, dass dieses Thema behandelt wurde jedoch stehe ich auch nun vor dieses Problem.

                        ich möchte gerne Yahoo-Schlagzeilen auf meiner Seite einbinden.

                        siehe den Link
                        http://de.news.yahoo.com/panorama/fu...t2006.html.xml

                        PHP-Code:
                        <?php

                        /**
                         * rdfparser
                         * class to parse newsfeeds into arrays
                         * @author clemens krack
                         * @link <a href="http://www.tripdown.de" target="_blank">[url]http://www.tripdown.de[/url]</a>
                         * @access public
                         **/
                        class rdfparser {
                           var 
                        $_items// array the items
                           
                        var $_may// array what may be done
                           
                        var $_act// string current active
                           
                        var $_index// integer current index
                           
                        var $_url// url to open

                           /**
                            * rdfparser::rdfparser()
                            * 
                            * @param $url url of  the feed
                            * @return void
                            **/
                           
                        function rdfparser($url)
                           {
                               
                        $this->_url $url;
                           }

                            
                        /**
                             * rdfparser:<img src="images/smilies/tongue.gif" border="0" alt="">arse()
                             * parses a newsfeed an returns an array containing the items.
                             * @return array
                             **/
                            
                        function parse() 
                            {
                                
                        $this->_items = array();
                                
                        $this->_index 0;
                                
                        $this->_may['parse'] = false;
                                
                                
                        $parser xml_parser_create();
                                
                                
                        xml_set_object($parser$this);
                                
                        xml_set_element_handler($parser"_startElement""_endElement");
                                
                        xml_set_character_data_handler($parser"_charHandler");
                                
                                
                        $fp fopen($this->_url"r");
                                while(!
                        feof($fp)) {
                                    
                        $line fgets($fp4096);
                                    
                        xml_parse($parser$line);
                                }
                                
                        fclose($fp);
                                
                                
                        xml_parser_free($parser);
                                
                                return 
                        $this->_items;
                            }

                            function 
                        _startElement($parser$name$attrs)  
                            {
                                
                        // allow parsing chardata as soon as an element is opened
                                
                        $this->_may['char'] = true;
                                
                                if (
                        $name=="ITEM") {
                                    
                        // allow parsing as soon as an item element was opened
                                    
                        $this->_may['parse'] = true;
                                    
                        // one more item -> increment index
                                    
                        $this->_index++;
                                    
                        $this->_items[$this->_index] = Array('title' => '''link' => '''description' => '');
                                } else if (
                        $name=="TITLE") {
                                    
                        // current active: title
                                    
                        $this->_act "TITLE";
                                } else if(
                        $name=="LINK") {
                                    
                        // current active: link
                                    
                        $this->_act "LINK";
                                } else if(
                        $name=="DESCRIPTION") {
                                    
                        // current active: description
                                    
                        $this->_act "DESCRIPTION";
                                } else {
                                    
                        // unknown tag, don't allow adding chardata
                                    
                        $this->_may['char'] = false;
                                }
                                
                        $this->_act strtolower($this->_act);
                            }

                            function 
                        _endElement($parser$name
                            {
                                if(
                        $name=="ITEM") {
                                    
                        // item tag closed: parsing not allowed
                                    
                        $this->_may['parse'] = false;
                                } elseif(
                        $name=="TITLE" || $name=="LINK" || $name="DESCRIPTION") {
                                    
                        // datatag closed, we don't want different chardata
                                    
                        $this->_may['char'] = false;
                                }
                            }

                            function 
                        _charHandler($parser$data
                            {
                                
                        $data trim($data);
                                
                                if(!
                        $this->_may['char'] OR !$this->_may['parse']) {
                                    return;
                                }
                                if (isset(
                        $this->_items[$this->_index][$this->_act])) {
                                    
                        $this->_items[$this->_index][$this->_act] .= $data;
                                } else {
                                    
                        $this->_items[$this->_index][$this->_act] = $data;
                                }
                            }
                        }
                        ?>
                        Nun weiss ich nicht an welcher Stelle ich diesen Code hinzufügen soll

                        PHP-Code:
                        $rdfparser = new rdfparser('http://url/zum/feed.rss');
                        $items $rdfparser->parse();
                        echo 
                        '<pre>' print_r($itemstrue) . '</pre>'


                        Danke im vorraus

                        Kommentar


                        • #13
                          steh ich jetzt auf'm schlauch, oder kennt ihr alle kein XSLT?
                          Damit geht das sehhr einfach, ohne so einen riesigen code....



                          <?xml version="1.0" encoding="ISO-8859-1"?>
                          <xsl:stylesheet version="1.0"
                          xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                          <xsl:template match="/">

                          //hier kommt alles hin, das vor die Auflistung kommt
                          <xsl:for-each select="rss/channel/item">
                          <tr>
                          <td width="380" height="13"><b><font face="Arial" size="2"><xsl:value-of select="titel"/></font></b><br>
                          <font size="2" face="Arial"><xsl:value-of select="descreption"/>
                          <a href="<link>"><xsl:value-of select="mehr"/></a>
                          <hr color="#000000" size="0">
                          </font>
                          </td>
                          </tr>
                          </xsl:for-each>
                          //hier kommt alles hin, das nach die Auflistung kommt

                          </xsl:template>
                          </xsl:stylesheet>

                          vertanden? zumindest das prinzip sollte klar sein...

                          Kommentar


                          • #14
                            Danke für die antwort,

                            wenn ich dein Script ansetze bekomme ich folgende meldung:
                            ------------------------------------------------------
                            Das Zeichen '<' kann in einem Attributwert nicht verwendet werden. Fehler beim Bearbeiten der Ressource 'http://www.domain...

                            <a href="<link>"><xsl:value-of select="mehr"/></a>
                            ---------^

                            ------------------------------------------------------
                            So sieht nun der Code aus:
                            ------------------------------------------------------
                            <?xml version="1.0" encoding="ISO-8859-1"?>
                            <xsl:stylesheet version="1.0"
                            xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                            <xsl:template match="/">

                            //hier kommt alles hin, das vor die Auflistung kommt
                            <xsl:for-each select="http://www.n-tv.de/23.rss">
                            <tr>
                            <td width="380" height="13"><b><font face="Arial" size="2"><xsl:value-of select="titel"/></font></b><br>
                            <font size="2" face="Arial"><xsl:value-of select="descreption"/>
                            <a href="<link>"><xsl:value-of select="mehr"/></a>
                            <hr color="#000000" size="0">
                            </font>
                            </td>
                            </tr>
                            </xsl:for-each>
                            //hier kommt alles hin, das nach die Auflistung kommt

                            </xsl:template>
                            </xsl:stylesheet>
                            ------------------------------------------------------
                            Wenn ich auch dein Code ohne jegliche Änderungen reinsetze bekomme ich die gleiche Meldung.

                            Das ganez habe ich natürlich unter news.xml abgespeichert

                            Gruß

                            Kommentar


                            • #15
                              Original geschrieben von user_001
                              Das Zeichen '<' kann in einem Attributwert nicht verwendet werden.
                              Ja, so ist das nun mal in XML ...

                              Vielleicht möchtest du dich für den Anfang mal mit http://de.selfhtml.org/xml/regeln/zeichen.htm beschäftigen.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X