RSS parsen

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

  • RSS parsen

    hi leute
    nach langem hab ich mal wieder ein anliegen. ich verstehe die ganze XML sache leider noch nicht so ganz:

    ich will ein RSS newsfeed parsen und mit php ausgeben.

    und zwar ist der newsfeed hier:
    http://de.trendmicro-europe.com/ente...fo/rssinfo.php

    ich habe ein vorgegebenes parse-script verwendet und die ausgabe von diesem newsfeed oben sieht momentan so aus:

    http://www.neo-geo.ch/rss_parser.php

    leider finde ich nicht raus, wie ich nun diese ausgabe einzeln ausgeben kann und selber noch formatieren kann.
    kann mir da jemand helfen, wie ich den output in einzelne variablen oder arrays kriege?

    vielen dank fuer allfaellige hilfe!!

    der quelltext sieht so aus:

    PHP-Code:
    <?
    header('content-type: text/plain');

    // define hooks to rss_parser class as xml functions do not allow object methods as handlers.
    function rss_start_element($parser, $name, $attributes) {
      global $rss;
      $rss->start_element($parser, $name, $attributes);
      if( $description )
      {
        print "<h2>$description</h2>";
      }
    }

    function rss_end_element($parser, $name) {
      global $rss;
      $rss->end_element($parser, $name);
    }

    function rss_character_data($parser, $data) {
      global $rss;
      $rss->character_data($parser, $data);
    }


    class rss_parser {

    // constructor. setup parser options and handlers.
    function rss_parser() {
      $this->error = '';
      $this->file = '';
      
      $this->channel = array();
      $this->data = ''; 
      $this->stack = array();
      $this->num_items = 0;

      $this->xml_parser = xml_parser_create();
      xml_set_element_handler($this->xml_parser, "rss_start_element", "rss_end_element");
      xml_set_character_data_handler($this->xml_parser, "rss_character_data");
    }

    function character_data($parser, $data) {
      if (empty($this->data)) $this->data = trim($data); // concatenate non-parsed data...
      else $this->data .= ' '.trim($data);               // and get rid of white space.
    }

    function start_element($parser, $name, $attrs) {
      switch($name) {
        case 'RSS':
          break;
      
        case 'CHANNEL':
          break;
      
        case 'IMAGE':
          array_push($this->stack, $name);
          break;
        
        case 'ITEM': 
          array_push($this->stack, $name);
          array_push($this->stack, $this->num_items); // push item index.
          $this->item[$this->num_items] = array();
          $this->num_items++;
          break;

        case 'TEXTINPUT':
          array_push($this->stack, $name);
          break;
          
        default:
          array_push($this->stack, $name);
          break;

      }  
    }

    function end_element($parser, $name) {
      switch ($name) {
        case 'RSS':
          break;
          
        case 'CHANNEL':
          break;
           
        case 'IMAGE':
          array_pop($this->stack);
          break;
        
        case 'ITEM':
          array_pop($this->stack);
          array_pop($this->stack);
          break;
          
        case 'TEXTINPUT':
          array_pop($this->stack);
          break;
          
        default: // child element.
          $element = (implode("']['",$this->stack));     
          eval("\$this->channel['$element']=\$this->data;"); // this does all the hard work.
          array_pop($this->stack);
          $this->data = '';
          break;
      }
    }


    function parse() {
      if (!($fp = @fopen($this->file, "r"))) {
        $this->error = "Could not open RSS source \"$this->file\".";
        return false;
      }
      while ($data = fread($fp, 4096)) {
        if (!xml_parse($this->xml_parser, $data, feof($fp))) {
          $this->error = sprintf("XML error: %s at line %d.",
            xml_error_string(xml_get_error_code($this->xml_parser)),
            xml_get_current_line_number($this->xml_parser));
          return false;
        }
      }
      xml_parser_free($this->xml_parser);
      return true;
    }




    } // class rss_parser.

    $rss = new rss_parser();
    $rss->file = 'http://de.trendmicro-europe.com/enterprise/security_info/rssinfo.php';
    $rss->parse() or die($rss->error);
    if ($rss->error) print $rss->error;

    print_r($rss->channel);

    ?>

  • #2
    hmmm.. an der stelle bin ich jetzt neugierig, ob und wie man über php auf dem server ein xslt stylesheet drüberbügeln würde (den code schnippsel für asp findet man an jeder ecke, aber wer rührt schon asp an?). oder alternativ wie groß die unterschiede sind zwischen formatieren über xslt und parsen/ausgeben über php.

    Kommentar

    Lädt...
    X