Newsfeed per RegEx verarbeiten
Alex.1974
- php
0 siro0 Christian Kruse0 Alex.19740 siro0 Christian Seiler
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:
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
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.
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?
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.
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
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
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.
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