PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schreiben eines RSS Feed Reader



Whiz-zarD
02.04.2009, 19:32
Hallo.

Ich plan derzeit eine Art Portalseite für Blogs. Auf der Seite stehen dann Blogeinträge der letzten x Tage. Die Einträge wollte ich per RSS auslesen und dann in eine Datenbank (oder einer Textdatei) speichern.
Allerdings stehe ich hier ein bisschen auf dem Schlauch. Das Auslesen von RSS Feeds ist nicht unbedingt das Thema, sondern vielmehr das automatische Auslesen.
Ich hatte es so geplant, dass alle x Stunden, ein Prozess auf dem Server aufgerufen wird, welches das Auslesen übernimmt. Alternativ wäre auch denkbar, wenn ein User auf die Seite geht und x Stunden vergangen sind, seit der letzten Aktualisierung, dass dann ein Prozess gestartet wird.
Ich wollte es auch so universal, wie möglich halten. Sprich, dass mein Projekt auf Windows und auf Linux Servern laufen kann. Als Scriptsprache wollte ich eigentlich php benutzen.

Wäre AJAX mir dafür eine Hilfe? Wenn ja, gibt es irgendwo deutsche Referenzen/Tutorials dafür?
Oder gibt es hier andere Lösungsmöglichkeiten?

Freezy
03.04.2009, 09:04
Ajax wird dir in diesem Fall nicht viel weiter helfen. Ajax verwendet man zum größten Teil, um Seiteninhalte im Browser ohne Relead zu aktualisieren bzw. nachzuladen.

Die Feeds zu aktualisieren, immer wenn ein Benutzer die Seite lädt und eine gewisse Zeitspanne verstrichen ist, könnte zu Problemen führen, da genau dieser Benutzer der den Prozess anschubst so lange auf die Seite warten muss, bis die Feeds aktualisiert worden sind. Je nach Menge und Verfügbarkeit kommt dort dann schon eine gewisse Zeit zusammen. Hier könnte man aber einen PHP-Prozess abspalten, was soweit ich weis nur unter *nix Systemen funktioniert.

Für die andere Möglichkeit brauchst du gewisse Rechte auf dem Server der das Script ausführt um den Cronjob/Task zu erstellen, der das Aktualisierungsscript ausführt - ist aber weitaus angenehmer, da der User davon nichts mitbekommt.

PHP von Windows auf Linux portieren und umgekehrt ist kein Problem, wenn man ein wenig bei der Entwicklung aufpasst. Beispielsweise die Konstante DIRECTORY_SEPERATOR verwenden wenn man Pfadangaben macht.

Da fällt mir noch ne möglichkeit ein: Der Benutzer bekommt die Seite ausgeliefert in der sich ein Javascript Block versteckt, der nach einem Timeout per Ajax :D das Aktualisierungsscript im Server startet. Ist im Grunde möglichkeit 1, ohne das der Benutzer das Aktualisieren durch eine verzögerte Ladezeit der Seite mitbekommt.

Whiz-zarD
03.04.2009, 11:15
Die Feeds zu aktualisieren, immer wenn ein Benutzer die Seite lädt und eine gewisse Zeitspanne verstrichen ist, könnte zu Problemen führen, da genau dieser Benutzer der den Prozess anschubst so lange auf die Seite warten muss, bis die Feeds aktualisiert worden sind. Je nach Menge und Verfügbarkeit kommt dort dann schon eine gewisse Zeit zusammen. Hier könnte man aber einen PHP-Prozess abspalten, was soweit ich weis nur unter *nix Systemen funktioniert.

Für die andere Möglichkeit brauchst du gewisse Rechte auf dem Server der das Script ausführt um den Cronjob/Task zu erstellen, der das Aktualisierungsscript ausführt - ist aber weitaus angenehmer, da der User davon nichts mitbekommt.
Für die erste Methode gibt es ein Mittel mit cURL.
Allerdings sind beide Methoden OS-Spezifisch (Pfade, Cronjob/Task), sodass ich dann zwei Versionen machen müsste aber dieses wollte ich, soweit wie möglich, verhindern.

Aber anscheinend gibt es da wohl wirklich keine andere Möglichkeit.

Jesus_666
03.04.2009, 12:02
Es gibt natürlich noch die Triviallösung: Das erfolgt einfach durch ein ganz normales Skript, welches als Parameter ein Passwort erwartet, um Mißbrauch zu verhindern. Wie man das Skript automatisch aufruft (cronjob, Windows-Tasks etc.) sei jedem Admin selbst überlassen.

Vorteil: Komplett portabel.
Nachteil: Jeder, der das System bei sich nutzen will, muß selbst dafür sorgen, daß der Job läuft.

Freezy
03.04.2009, 12:19
Für die erste Methode gibt es ein Mittel mit cURL.
Allerdings sind beide Methoden OS-Spezifisch (Pfade, Cronjob/Task), sodass ich dann zwei Versionen machen müsste aber dieses wollte ich, soweit wie möglich, verhindern.

Aber anscheinend gibt es da wohl wirklich keine andere Möglichkeit.

Also ich könnte mir gut vorstellen, das erstere Methode sehr gut ohne größere Änderungen (höchstens paar Konfigurationen) auf beiden Systemem lauffähig ist. Oder wo genau siehst du dort das Problem?

Whiz-zarD
03.04.2009, 12:30
Also ich könnte mir gut vorstellen, das erstere Methode sehr gut ohne größere Änderungen (höchstens paar Konfigurationen) auf beiden Systemem lauffähig ist. Oder wo genau siehst du dort das Problem?

Bei der ersten Methode hab ich das Problem, dass cURL ein bestandteil von vielen Linux-Distros ist, während man bei Windowssystemen cURL erst einmal runterladen muss.
Dementsprechend wird cURL auch anders angesprochen.

Freezy
03.04.2009, 12:46
Genauso wie du auf Windowssystemen erstmal ein komplettes WAMP-System installieren musst, damit überhaupt was läuft ô_O. Ich glaub ich versteh die Anforderung nicht ganz genau ^^
Auf meinem Debian Server musste ich btw. auch erstmal PHP neu übersetzen damit cURL mit drin war. Das Php5, das man über den Packetmanager bekommt hat das nicht - zumindest wars vor nem Jahr noch so. ;)

Whiz-zarD
03.04.2009, 14:10
Auf meinem Debian Server musste ich btw. auch erstmal PHP neu übersetzen damit cURL mit drin war. Das Php5, das man über den Packetmanager bekommt hat das nicht - zumindest wars vor nem Jahr noch so. ;)

Weil bei cURL auf eine externe Anwendung zugegriffen wird, die bei vielen Linux Distros ein Bestandteil des Systems ist. Windows hat sowas nicht. Deswegen gibt es unter php Standardgemäß keine cURL Unterstützung mehr.


Genauso wie du auf Windowssystemen erstmal ein komplettes WAMP-System installieren musst, damit überhaupt was läuft ô_O. Ich glaub ich versteh die Anforderung nicht ganz genau ^^

Es geht mir halt darum, dass mein Projekt unabhängig vom Betriebssystem sein sollte. Ich rede jetzt nicht von der Installation eines WAMP oder LAMP Systems.
Ich möchte, dass mein Projekt auf beiden Systeme gleich läuft und ich möchte nicht zwei Versionen (einmal für Windows Server und einmal für Linux Server) haben, sodass jeder, unabhängig von seinem Server OS, dieses Projekt benutzen kann.
Also so portabel, wie möglich.

Freezy
03.04.2009, 14:28
Also ich bin mir zu 95% sicher, dass auf einem WAMP System mit cURL das hier (http://de.php.net/manual/en/curl.examples-basic.php) genause läuft wie auf einem LAMP System. Oder bin ich immernoch auf der falschen Fährte?

Whiz-zarD
03.04.2009, 15:53
sobald, wie ich das weiss, läuft das nur auf Linux Systemen, da bei cURL eine externe Anwendung aufgerufen wird, die ein Prozess im Hintergrund startet, welches das php Script ausführt.

Aber das kann sein, dass ich hier falsch liege.

Freezy
03.04.2009, 16:34
Ach daher das Missverständniss :D
Habs gerade getestet. Meine lokale PHP5 Windows Installation hatte schon im Ordner ./ext eine php_curl.dll. Die musste ich nur noch in die php.ini eintragen und es hat gefunzt. (Nach Apache Restart natürlich)

Jesus_666
03.04.2009, 17:49
sobald, wie ich das weiss, läuft das nur auf Linux Systemen, da bei cURL eine externe Anwendung aufgerufen wird, die ein Prozess im Hintergrund startet, welches das php Script ausführt.

Aber das kann sein, dass ich hier falsch liege.
Das wäre problemlos portabel; auch Windows kennt Dinge wie Multitasking und Interprozesskommunikation. Man muß es nur anders implementieren. Allerdings ist das hinfällig, da php einfach libcurl benutzt; cURL ist eigentlich nur ein Kommandozeilen-Frontend für die Bibliothek.

Was eher Probleme machen könnte wäre, daß dein Server PHP ohne cURL-Support gebaut hat. Aber das kann man ja per phpinfo() rausfinden.

Whiz-zarD
03.04.2009, 18:21
ah, ok. Ich war da wohl dann falsch informiert.
Danke erstmal für die Antworten ^^

Whiz-zarD
08.04.2009, 01:32
Doppelpost ... bla ...

Kann mir vielleicht einer verraten, wie ich cURL unter Windows zum Laufen bekomme? Ich hab Apache 2.2.11 und php 5.2.9 installiert.

Was ich bis jetzt getan habe:
In der php.ini:
- extension_dir = "e:\php5\ext" geschrieben (ist richtiger Pfad)
- Semikolon bei extension=php_curl.dll entfernt

Dateien in den Windows\system32 Order kopiert:
- libeay32.dll
- ssleay32.dll
- php_curl.dll
- php5ts.dll
(die letzten Beiden wurden auf einer Seite empfohlen zu kopieren)

Datei in den Apache2\bin Order kopiert:
- php5ts.dll

Ich hab nun alles gemacht, was ich innerhalb von 2 Stunden recherche finden konnte und dennoch lädt der das cURL Modul nicht. Also es taucht nicht einmal bei phpinfo() auf.

Weiss jemand da evtl. weiter?
Auf XAMPP wollte ich nun nicht zurückgreifen, weil eigentlich alles läuft. Bis auf cURL.

Xardas der Dunkle
08.04.2009, 11:19
Die php_curl.dll liegt aber zusätzlich auch noch im e:\php5\ext, wo sie hin gehört? Bei mir liegt gar nix von php im System32 ...

Elementare, wahrscheinlich sinnlose Frage. Apache auch neu gestartet?

Bei mir ist curl aktiviert und taucht auch in der phpinfo() auf. Installiert ist auch Apache 2.2.11 und PHP 5.2.9. Wobei ich noch die kompletten Windows-Binarys mit drauf geworfen habe.

Whiz-zarD
08.04.2009, 11:38
ja, php_curl.dll liegt im extensions-Ordner, da wo sie auch hingehört.
Apache habe ich schon öfters neugestartet. Musste zwischenzeitlich sogar öfters die VM (wo Windows läuft) neustarten.
Also dran liegt es auch nicht.

Achso, hab noch vergessen zu erwähnen, dass das OS Win XP ist und dass ich die Datei msvcr70.dll auch in den System32-order kopiert habe, wie auf einigen Seiten ebenfalls empfohlen wurde.

Xardas der Dunkle
08.04.2009, 11:59
Hast du das curl in der richtigen php.ini einkommentiert?

Whiz-zarD
08.04.2009, 17:06
Es gibt nur die eine. Ich habe kein XAMPP installiert, wo es zwei php.ini Dateien gibt, sondern alles einzeln und es läuft auch alles, bis auf curl.

Xardas der Dunkle
08.04.2009, 18:02
PHP unter Windows vermag echt kranke Fehler hervorrufen, z.B. das dlls nicht gefunden werden, die aber existieren (in der Fehlermeldung steht dann sogar der korrekte Pfad!).

Für mal das entsprechende Äquivalent hierzu bei dir aus:

I:\www\php\php5.2.9>php --ri curl

curl

cURL support => enabled
cURL Information => libcurl/7.16.0 OpenSSL/0.9.8i zlib/1.2.3

I:\www\php\php5.2.9>php -m
[PHP Modules]
bcmath
calendar
com_dotnet
ctype
curl
date
dom
filter
ftp
gd
hash
iconv
imap
json
libxml
mbstring
mcrypt
mysql
mysqli
odbc
pcre
PDO
pdo_mysql
Reflection
session
SimpleXML
SPL
ssh2
standard
tokenizer
wddx
xml
xmlreader
xmlwriter
zip
zlib

[Zend Modules]

Whiz-zarD
08.04.2009, 20:04
so, nach vielen Hin- und Her hat php wohl nun endlich alles geladen aber nun scheint es Probleme mit mysql zu geben.
Jedesmal, wenn er sich mit mysql verbinden will, stürzt Apache ab -_-

edit: hab jetzt die schnauze voll. Hab nun wieder alles gelöscht und XAMPP installiert. Nun läuft wenigsten alles ...