PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RSS - Feed einlesen



BlueJay
29-07-2006, 13:00
Hallo Leute,

ich bastele gerade an einem Script, um RSS-Feeds zu lesen.
Aktueller Stand:
liegt das xml-File auf meinem Server, läuft alles zufriedenstellend. Aber da müsst ich ja dauernd downloaden, das kann's ja wohl nicht sein.

Von der Seite her einlesen klappt nicht, wahrscheinlich einmal, weil das Feed von einer anderen Domain kommt. aber hauptsächlich wohl wegen unseres lieben Webmasters:, denn von unserer Seite kann ich url-mäßig auch nix lesen:

Fehlermeldung:


file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server


php.ini ändern ist nicht drin, der Webmaster ist in der Hinsicht ein wenig para.....

Gibt es einen Workaround, ähnlich wie bei der max. Rechenzeit?

so long,
BlueJay

undefined
29-07-2006, 13:14
Ein Beispiel aus der PHP Manual


<?php

// Define a context for HTTP.
$aContext = array(
'http' => array(
'proxy' => 'tcp://127.0.0.1:8080', // This needs to be the server and the port of the NTLM Authentication Proxy Server.
'request_fulluri' => True,
),
);
$cxContext = stream_context_create($aContext);

// Now all file stream functions can use this context.

$sFile = file_get_contents("http://www.php.net", False, $cxContext);

echo $sFile;
?>

BlueJay
29-07-2006, 14:08
Dein Beispiel hätte meine 2. Frage erschlagen :rolleyes: , aber leider bekomme ich erstmal immer noch den obigen Fehler (abgeschalteter url-Zugriff).

Und nein, ich kann wender den Webmaster überreden, den Schalter umzulegen, noch etwas mit der ini_set() drehen! allow_url_fopen ist off und wird wohl so bleiben. :(

Noch jemand mit einer guten Idee, wie ich an frische Feeds komme? (Bitte bitte nicht: regelmäßiger Download!)

so long,
BlueJay

---
Boah nee, da bieten sie einem die ganzen schönen Feeds an, und dann bremst der eigene Webbaster einen aus!

undefined
29-07-2006, 20:27
Das war einer der Gründe warum ich mich für einen VPS Server entschieden habe. Zu viele Webanbieter müssen die Server extrem einschränken damit Irgendwelche Anfänger keinen Unfug Treiben oder gar Server hacks verursachen. Ein gutes Beispiel AllInkl ich war dort 5 Jahre - von Jahr zu Jahr wurde immer mehr eingeschränkt. Wobei die Begründung durchaus gerechtfertigt ist. Wenn man Stellenweise sieht was es Scripten im net gibt :rolleyes:

Zurück zum Thema: Welche PHP Version hast du und wenn hast du XSLT ?

BlueJay
30-07-2006, 08:07
Hier läuft php 5.1.4 mit hardening patch auf einem Linux-System.
Anbieter wechseln geht nicht, der Webmaster ist mein Mann und handhabt das System sehr restriktiv. Er betreibt zusammen mit einem Kumpel den Server, da heisst es für ihn: safety first.

Es ist ein Wunder, dass ich für die Highscore-Listen Schreibrecht bekam!

php-BB wurde nach dem Heise-Urteil ziemlich lahmgelegt und ist für mich quelltextmäßig nicht mehr zugreifbar. Sonst hätte ich da mal nachgesehen.

(kurze Unterbrechung, Familie knatscht, weiteres folgt)

so long,
BlueJay

undefined
30-07-2006, 08:13
Dann kannst du Folgendes machen.
Erstelle mit XML ein fake Dom Objekt und lade mit document im XSLT das RSS File.
Ein Nachteil bei der Geschichte, du musst mit PHP eine Routine Schreiben die ein Server Connect Aktivität zum RSS Server übernimmt. XSLT würde sonst zu lange brauchen wenn der Server down ist ;) Hier helfem dir die dns Funktionen von PHP z.B. dns_get_record() beinhaltet den Key Connected


<?php

$xsl = dirname( __FILE__ ) . "/XSLRssReader.xslt";
if ( is_readable( $xsl ) )
{
$xslp = new XSLTProcessor;
$xslp->registerPHPFunctions();

$xstyle = new DomDocument( '1.0', 'utf-8' );
$xstyle->load( $xsl );
$xslp->importStyleSheet( $xstyle );

$xml = new DomDocument( '1.0', 'utf-8' );
$xml->appendChild( $xml->createElement( 'my-rss', 'Show RSS' ) );

header( "Content-Type: text/html; charset: utf-8;" );
echo $xslp->transformToXML( $xml );

}

?>


XSLT Code


<?xml version = '1.0' encoding = 'utf-8' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
extension-element-prefixes="php"
execlude-result-prefixes="php"
>

<xsl:output version="1.0"
method="xml"
indent="yes"
encoding="UTF-8"
omit-xml-declaration="yes"
media-type="application/xhtml+xml"
/>

<xsl:namespace-alias stylesheet-prefix="php" result-prefix="xsl" />
<xsl:strip-space elements="*" />

<!--
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title />
<description />
<language />
<pubDate />
<lastBuildDate />
<generator />
<managingEditor />
<webMaster />
<docs />
<link />
<item>
<guid />
<title />
<pubDate />
<description />
<link />
</item>
</channel>
</rss>
-->

<xsl:template match="my-rss">
<xsl:variable name="RSS" select="document('http://domain.com/rss.rdf')/rss/channel" />
<div>
<xsl:attribute name="class">
<xsl:text>RssBox</xsl:text>
</xsl:attribute>
<xsl:choose>
<xsl:when test="$RSS/item">
<dl>
<xsl:for-each select="$RSS/item">
<dt>
<xsl:value-of select="title" />
</dt>
<dd>
<xsl:value-of select="description" />
</dd>
</xsl:for-each>
</dl>
</xsl:when>
<xsl:otherwise>
<xsl:text>Kein RSS Verfügbar</xsl:text>
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>

</xsl:stylesheet>


PS: Dann sage deinen Mann einen schönen Gruss von mir und - Man[n] kann es auch Übertreiben :)

BlueJay
30-07-2006, 09:27
Ein Nachteil bei der Geschichte, du musst mit PHP eine Routine Schreiben die ein Server Connect Aktivität zum RSS Server übernimmt.


genau an *der* Stelle hakt es. Ist der Feed erstmal auf unserem Server, läuft alles zufriedenstellend.
Die Lösung wäre höchstens, einmal pro Tag den Feed downzuloaden. Männe knatscht gerade, weil XSLT seinen Server ausbremen würde, wenn z.B. php.net (oder andere Programmiersprachen-Feeds) nicht zu erreichen ist.

Und mit meinen bescheidenen Programmierkenntnissen würde das mein php-Konstrukt wohl ebenso.



PS: Dann sage deinen Mann einen schönen Gruss von mir und - Man[n] kann es auch Übertreiben :)

Da habe ich schlechte Karten, wenn sogar die Jungs vom php.net sagen: wenn die Option abgeschaltet ist, gibt es gute Gründe dafür, und deshalb kann sie über ini_set() nicht gesetzt werden.

so long,
BlueJay

undefined
30-07-2006, 09:54
Oh je, hier muss mal einer Aufgeklärt werden.:D
XSLT ist Schneller als jede PHP Klasse weil es auf C basiert und das bremmst in keinster weise den Server aus. Das ist absoluter Humbug und eher das Gegenteil von dem was er sagt. Was den Connect betrifft, wie ich schon geschrieben habe must du dir eine Routine schreiben die den Server überprüft.

Zum Thema fsockopen, der Grund warum man empfiehlt dies zu Deaktivieren ( Was im übrigen nicht von php.net kommen kann ;) ) ist. Das viele User nicht Sauber Programmieren und somit Sinnlosen Traffic verursachen oder diese Funktion mißbrauchen. Keiner dieser Punkte dürfte auf dich zutreffen ;)

Aber wenn er dein Administrator ist - Ein anderer Vorschlag!
CRONJOB jeden Abend um 11Uhr ;)
wget http://domain.om/rss.rdf --output-file=/home/BlueJay/public_html/tmp/rss.xml

Wenn er hier auch meckert dann tust du mir leid, und ich empfehle dir Fremd zu gehen (Ich meine einen neuen Provider) :D

BlueJay
30-07-2006, 18:21
Ähm, sie sagen es genau hier:
http://de.php.net/manual/en/ref.filesystem.php, such mal nach allow_url_fopen.



CRONJOB jeden Abend um 11Uhr ;)


Das ginge im Prinzip klar. Es ist nur so, dass er bei jedem Servereintrag, den er für mich machen soll, erst mal stundenlang brummelt. Ehemann halt ;)

Siehe auch hier, letzte Strophe (unter dem Totalbild):
http://blog.ujaswelt.de/?p=27




Wenn er hier auch meckert dann tust du mir leid, und ich empfehle dir Fremd zu gehen (Ich meine einen neuen Provider) :D

Gute Idee, aber seine Preise sind unschlagbar. :D

so long,
BlueJay

undefined
31-07-2006, 07:34
Also da steht das die Einstellung für mehr Sicherheit sein soll, aber nicht das es empfohlen wird. Das würde auch klar gegen die Philosophie von php.net gehen. Wie schon oben geschrieben dient es mehr zur Traffic Begrenzung und dem User Missbrauch. Zum Glück werden mit der nächsten Version solche Einstellungen verschwinden ;) http://oss.backendmedia.com/PhP60
Wenn er wirklich wissen möchte wie viel Sicherheit eine Seiner Kundenseiten bietet dann empfehle ich im Moment Chorizo (siehe mein News Posting in diesem Forum). Man kann eine Domain Kostenlos anmelden. Ich habe es selbst im Einsatz. Es verwundert schon, an welcher Stelle die Sicherheitslöcher wirklich liegen.

PS: Da du ja viel mit JavaScript arbeitest, du kannst auch einen RRS Reader mit JS und XMLHttpRequest GET bauen. Das Prinzip des Aufbaus läuft dann über den Dom XPath.

BlueJay
31-07-2006, 10:05
PS: Da du ja viel mit JavaScript arbeitest, du kannst auch einen RRS Reader mit JS und XMLHttpRequest GET bauen. Das Prinzip des Aufbaus läuft dann über den Dom XPath.

Ich sollte mich tatsächlich in AJAX einarbeiten, dann lebt aber erst mal ein anderes Projekt wieder auf. Der Newsfeed wäre nice to have, und es war nett, mit einem eigenen Feed zu spielen. Habe einige Spiele sogar dazu gebracht, vom Akregator aus gezockt werden zu können.

Warum kann der eigentlich kein Protokoll javascript:? Geht man über DOM-Events, geht's doch auch. Leider sieht man dann nicht, was er tut oder ob er was tut, auch nicht, welches Element aktiv ist.

so long,
BlueJay

Romanday
31-07-2006, 11:06
http://blog.ujaswelt.de/?p=27

so long,
BlueJay

Netter Blog,
... Gibt auch schöne Styles für deinen Blog. :D

http://themes.wordpress.net/
http://blog.wordpress.de/2006/02/12/liste-deutschsprachiger-wordpress-themes.html

BlueJay
01-08-2006, 08:10
Netter Blog,
... Gibt auch schöne Styles für deinen Blog. :D


"Corporate Design" :)
Aber du bringst mich da auf eine Idee...

so long,
BlueJay

p.s.
auch ein Heiz-Erhard-Fan?