Alex.1974: Newsfeed per RegEx verarbeiten

LiFo,

ich möchte auf meiner Website verschiedene Newsfeeds verarbeiten. Mit Regulären Ausdrücken in PHP habe ich mich jetzt das ganze Wochenende ohne nennenswerten Erfolg herumgeschlagen; ich bekomme im Netz verfügbare Scripte einfach nicht angepasst :-(

Dazu kommt, dass alle Newsfeeds *irgendwie* gleich aufgebaut sind - aber eben doch nicht identisch.

Was ich gerne machen würde, ist:

  • <item>
      <title>Rezept des Tages</title>
      <link>http://www.meine-domain.tld/tagestipp/</link>
      <description>Grießbrei mit heißen Kirschen</description>
      </item>

so zu verarbeiten, dass ich per Schleife und RegEx erstmal alle Einträge, die zwischen

<item> und </item>

stehen, in einen (assoziativen?) Array werfe und dann dann die jeweiligen Felder "herausziehe", also für

$title = alles zwischen <title> und </title>
$url = alles zwischen <link> und </link>

usw.

Ich glaube, wenn ich einmal kapiert habe, wie ich das mache (incl. wie die Ausdrücke für die Texte lauten, wenn statt einer zusammenhängenden Zeichenkette  [z.B. bei einer URL] eine Zeichenkette mit Leerzeichen ausgelesen werden soll), dann bekomme ich den Rest auch hin.

Wäre lieb, wenn mir einer den *grundsätzlichen* Aufbau verraten könnte, ggf. mit einem Code-Schipsel :-)

Vielleicht kann mir auch jemand sagen, wie ich in PHP eine Zeichenkette bis max. n Zeichen auslesen kann, aber beim letzten Leerzeichen vor dem n-ten Zeichen abbrechen kann, wenn das n-te Zeichen mitten in einem Wort ist...

Aufrichtigen Dank im voraus!

Viele Grüsse
 Alex.1974

  1. Hallo Alex.

    ich möchte auf meiner Website verschiedene Newsfeeds verarbeiten. Mit Regulären Ausdrücken in PHP habe ich mich jetzt das ganze Wochenende ohne nennenswerten Erfolg herumgeschlagen; ich bekomme im Netz verfügbare Scripte einfach nicht angepasst :-(

    Warum probierst du es dann nicht mal von Anfang an selbst?
    Reguläre Ausdrücke sind ja recht kryptisch und wenn du einen anpasst, der nicht sonderlich kommentiert ist,
    so wirst du oft Dinge übersehen.

    Dazu kommt, dass alle Newsfeeds *irgendwie* gleich aufgebaut sind - aber eben doch nicht identisch.

    Dann finde die Teile heraus die immer gleich sind und füge für den Rest geeignete Platzhalter bzw Alternativen ein.
    Mit () kannst du dann die submatches speichern.
    Grundsätzlich sieht es so aus:
    /<item>
     (?:<(.*?)>(.*?)</.*?>)+?
    </item>/x;
    Allerdings akzeptiert dieser Ausdruck fast alles.
    Wenn dein Feed aus irgendwelchen Gründen fehlerhaft ist,
    kannst du sehr interessante Fehler bekommen.
    Eine Syntaxprüfung wäre dann sinnvoll, allerdings brauchst du dafür
    AFAIK mindestens mehrere Ausdrücke...

    Vielleicht kann mir auch jemand sagen, wie ich in PHP eine Zeichenkette bis max. n Zeichen auslesen kann, aber beim letzten Leerzeichen vor dem n-ten Zeichen abbrechen kann, wenn das n-te Zeichen mitten in einem Wort ist...

    Also beliebige Zeichen '.' zwischen 0 und n-1 '{0,n-1}' und ein Leerzeichen ' '.
    Ist doch gar nicht so schwer. (-:

    MfG _Siro.

    1. Hallo Siro,

      vielen Dank für Deine Antwort.

      Warum probierst du es dann nicht mal von Anfang an selbst?
      Reguläre Ausdrücke sind ja recht kryptisch und wenn du einen
      anpasst, der nicht sonderlich kommentiert ist,
      so wirst du oft Dinge übersehen.

      Hm... ich lerne leichter von konkreten Beispielen und versuche, auf diesem Weg die Struktur zu verstehen...

      Dann finde die Teile heraus die immer gleich sind und füge für den
      Rest geeignete Platzhalter bzw Alternativen ein.
      Mit () kannst du dann die submatches speichern.
      Grundsätzlich sieht es so aus:
      /<item>
       (?:<(.*?)>(.*?)</.*?>)+?
      </item>/x;

      Ich gestehe: ich kann damit (fast) nichts angangen?

      • Wie wende ich diesen Ausdruck nun an?
      • Wie komme ich an die Submatches heran?

      Vielleicht kann mir auch jemand sagen, wie ich in PHP eine
      Zeichenkette bis max. n Zeichen auslesen kann, aber beim
      letzten Leerzeichen vor dem n-ten Zeichen abbrechen kann, wenn
      das n-te Zeichen mitten in einem Wort ist...

      Also beliebige Zeichen '.' zwischen 0 und n-1 '{0,n-1}' und ein
      Leerzeichen ' '.
      Ist doch gar nicht so schwer. (-:

      Ohne nähere Anleitung ist leider auch das nur ein "bömisches Dorf" für mich :-(

      Dennoch Danke!

      Viele Grüsse
       Alex.1974

      MfG _Siro.

  2. Hallo Alex.1974,

    [... XML mit RegExen von Hand verarbeiten ...]

    Um XML zu verarbeiten gibt es XML-Parser. Die solltest du auch benutzen.

    Grüße,
     CK

    --
    Ich bewundere wirklich den Sinn der Bienen für kollektive Verantwortung. Obwohl sich einzelne Bienen hin und wieder bekämpfen, herrscht zwischen Ihnen grundsätzlich ein starkes Gefühl für Eintracht und Zusammenarbeit. Wir Menschen gelten als sehr viel weiter entwickelt, doch mitunter rangieren wir sogar hinter kleinen Insekten.
    http://wwwtech.de/
    1. Hallo CK :-)

      [... XML mit RegExen von Hand verarbeiten ...]

      Um XML zu verarbeiten gibt es XML-Parser. Die solltest du auch
      benutzen.

      Ich hab mal "XML-Parser" durchgegoogelt - bin aber nicht wirklich schlauer dadurch geworden.

      Vielleicht sollte ich dazu sagen, dass die fragliche Domain bei der 1&1 Internet AG gehostet ist und ich nicht wirklich am Server "rumschrauben" kann...

      Viele Grüsse
       Alex.1974

      1. Hallo nochmal.

        Ich hab mal "XML-Parser" durchgegoogelt - bin aber nicht wirklich schlauer dadurch geworden.
        Vielleicht sollte ich dazu sagen, dass die fragliche Domain bei der 1&1 Internet AG gehostet ist und ich nicht wirklich am Server "rumschrauben" kann...

        Manchmal liegt die Lösung näher als man denkt. (-:
        http://de3.php.net/manual/de/ref.xml.php
        Das sollte es auch bei 1&1 geben.

        MfG _Siro.

      2. Hallo,

        [... XML mit RegExen von Hand verarbeiten ...]

        Um XML zu verarbeiten gibt es XML-Parser. Die solltest du auch
        benutzen.

        Ich hab mal "XML-Parser" durchgegoogelt - bin aber nicht wirklich schlauer dadurch geworden.

        Dazu gibt es bereits ein PEAR-Paket, das das Parsen von RSS-Dateien für Dich erledigt: http://pear.php.net/manual/en/package.xml.xml-rss.example.php

        PEAR kannst Du auch manuell bei einem Hoster verwenden; dazu musst Du alle benötigten Dateien (schlimmstenfalls halt Deine komplette lokale PEAR-Installation) in ein Unterverzeichnis wie pear/ kopieren und dann per

        ini_set ('include_path', ini_get('include_path').':'.dirname(__FILE__).'/pear');

        den include-Path abändern, damit man dann per

        require 'XML/RSS.php';

        (o.ä.) die entsprechenden PEAR-Dateien einbinden kann. Mehr Informationen zu PEAR findest Du unter http://pear.php.net/.

        Viele Grüße,
        Christian