Hallo zusammen,
mit unten stehendem Script, was ich im Internet gefunden habe, hab ich folgendes vor:
- RSS-Feed meines Blogs auslesen
- Ihn in einer Textdatei auf meinem Webspace zwischenspeichern (Vermeidung von zu viel Traffic)
- Nur Titel, Datum/Zeit, Description (Alles von aktuellem Eintrag) von Textdatei lesen
- Diese Daten in einem Div auf meiner Seite anzeigen.
Vor allem scheint mir allow_url_fopen=off auf bplaced.net im Weg zu stehen. Was wären denn Alternativen, die ohne allow_url_fopen auskommen?
Script:
<?php
$feed_path = "http://mycreations4u.blogsport.de/";
$cache_file_path = "rss_feeds.txt";
$content = file_get_contents($feed_path);
$xml = new SimpleXmlElement($content);
$result = "
";
foreach($xml->channel->item as $entry) {
$result .= '';
}
$result .= "
\n";
file_put_contents($cache_file_path, $result);
function getRSSFeeds($feed_path, $cache_file_path)
{
if (time() >= (filectime($cache_file_path)+24*60*60))
{
setRSSFeeds($feed_path, $cache_file_path);
print file_get_contents($cache_file_path);
}
else
{
print file_get_contents($cache_file_path);
}
}
getRSSFeeds($feed_path, $cache_file_path);
?>
Vielen Dank im Voraus.
Wenn ich das richtig verstanden habe, liegt alles auf dem gleichen Rechner - also dem hiesigen?
Dann solltest du die Dateien einfach nicht per URI abrufen, sondern mit absolutem oder relativem
Pfad im Dateisystem.
Also bei
’$feed_path = "http://mycreations4u.blogsport.de/'
gibst du keinen HTTP-Aufruf an, sondern nur den Dateinamen samt Pfad - entweder absolut
oder relativ von der PHP-Datei, die man aufruft, um das auszuführen.
Hallo Hoffmann,
der http-Aufruf ist erforderlich, denn unter der Adresse befindet sich mein Blog :-).
Dieser Blog soll dann in die genannte txt-Datei gespeichert werden und aus der txt-Datei soll wiederum Titel, Datum/Zeit, Description ausgelesen werden.
Also ist der ‘blog’ nicht auf dem gleichen Rechner.
Dann wird es komplizierter.
Prinzipiell mußt du ja ‘nur’ die Anfrage per HTTP mit PHP auf dem hiesigen Rechner umgehen.
Möglichkeit 1: Mit dem blog auf den hiesigen Rechner umziehen, warum nutzt du noch einen
anderen Dienst dafür?
Möglichkeit 2: Ein Skript auf deinem eigenen Rechner installieren, dort kannst du die PHP-Funktion
ja aktivieren und nutzen. Das Ergebnis könntest du dann per Methode POST an den hiesigen
Rechner schicken, der das dann abspeichert und bei Bedarf darstellt. Wenn das automatisch
erfolgen soll, kannst du zum Beispiel auf deinem eigenen Rechner einen cron-job laufenlassen,
der das dann regelmäßig automatisch erledigt.
Möglichkeit 3: Wenn auf dem Rechner mit dem blog entsprechende Möglichkeiten bestehen,
kannst du das Skript natürlich auch dort installieren, welches die Daten dann an den hiesigen
Rechner schickt, das spart dir den Einsatz des eigenen Rechners.
Möglichkeit 4: Sofern du das nur selbst bedienst, also Kontrolle darüber hast, daß java-script
aktiviert ist, könntest du es natürlich auch auf dem hiesigen Rechner damit (AJAX) versuchen -
also ein Skript, welches eine Anfrage an das Dienstprogramm mit dem blog stellt, das Ergebnis
dann an ein hiesiges PHP-Skript weiterleitet - etwa auch mit einer Anfrage (AJAX etc) - welches
den Kram verarbeitet. Die Methode eignet sich wie gesagt nicht, wenn sie jeder Nutzer
anwenden können soll.
Vermutlich gibt es noch mehr Möglichkeiten, wobei ich insbesondere mit Methode 4 keinerlei
Erfahrung habe - vielleicht fallen anderen ja noch mehr Möglichkeiten ein.
Naja 4 geht wenn man es bissle komplexer macht auch bei Leuten ohne JS 
Indem eben ein User die Anfrage macht, dann an nen PHP Script schickt welches die Ausgabe zwischenspeichert 
So dass nur alle paar Minuten (und wenn der User Javascript hat) die Daten aktualisiert werden 
Nen Cache macht auch allgemein Sinn, immerhin will man net unnötig Datenabfragen und die Server belassten.
Nachteil ist dann nur das man dem User vertrauen muss
Weil jeder dann im Prinzip falsch angaben schicken könnte… [size=85](auch wenn man das für den einen Request mit dem Key absichern könnte… dennoch kann der eine dann Theoretisch was falsches Einschleusen, muss halt den Moment dann abpassen)[/size]
Hallo,
Hm, ich glaub, ich muss noch mehr ins Detail gehen. Denn mein PC hat damit nichts zu tun :-):
-
blogsport.de ist ein Dienstanbieter der einen Blogging-Service anbietet
- Bei blogsport.de habe ich mir einen Blog erstellt
- Um nun nur meinen neuesten Blogeintrag auf der Startseite meiner Homepage einzubinden, möchte ich folgendes mit einem PHP-Script, welches zusammen mit meiner HP auf meinem Webspace bei bplaced.net läuft, machen:
- Meinen Blog auf blogsport.de auslesen und in einer txt-Datei auf meinem Webspace zwischenspeichern
- Nur die aktuellsten Daten aus der txt-Datei auslesen und in einem div-Rahmen auf meiner Startseite anzeigen.
Vermutlich entfällt dann Möglichkeit 3.
Mal abgesehen von Kommentaren von anderen Leuten zu deinem Blog weißt du ja selbst,
wann du dort was geschrieben hast, Möglichkeit 2 ist da also gut geeignet, um die Konversion
halbautomatisch ablaufen zu lassen - meist hat man auf dem eigenen Rechner doch ohnehin
ein Dienstprogramm für HTTP und PHP laufen, um die eigenen Projekte vor dem Hochladen
zu testen, von daher ist der eigene Rechner doch recht relevant.
Natürlich kann man dann nach der Konversion einfach das Ergebnis per FTP hier hochladen
und ist dann fertig, also alles recht einfach.
Wieviel man da automatisiert, ist mehr eine Frage von Kosten/Zeitaufwand und Nutzen, weniger
eine prinzipielle Komplikation.
Wenn man die Kommentare anderer Leute mitnehmen will, sofern man das dort hat, bietet sich
allerdings die automatische Variante mit einem cron-job an.
Rechtlich stellt sich natürlich die Frage, ob man die Kommentare überhaupt anderweitig
veröffentlichen darf, also eventuell ohnehin etwas, was man sich genauer überlegen muß - oder
was man bei dem blog in die Nutzungsbedingungen schreiben muß, damit man die Texte anderer
Leute anderweitig veröffentlichen darf.
Auch cron-jobs kann man hier nicht laufenlassen, müßte da also ohnehin improvisieren, selbst
wenn man die Datei direkt vom Rechner mit dem blog laden könnte.
Auch von daher ist der Umweg über einen anderen Rechner (den eigenen) eine passable
Möglichkeit. Wenn du damit einen Eintrag in dein Tagebuch schreibst, ist der ja ohnehin an.
Nachdem das veröffentlicht ist, reicht dann ja ein Aufruf des lokalen Skriptes, um das auch
hier verfügbar zu machen.
Hallo Hoffmann,
OK, allmählich verstehe ich Deine Idee :-).
Sorry, aber ist ja nicht einfach, wenn der eine aus der einen und der andere aus der anderen Richtung kommt. Aber nun scheint sich ja ein gemeinsamer Lösungsweg zu finden.
Ich werd mal schauen, wie ich Deine zweite Möglichkeit umsetzen kann.
welches Betriebssystem hast du denn? Weil für Windows php zu installieren der totale Horror ist (für mich zumindest) und unter Linux das relativ einfach von der Hand geht. Kannst du JAVA oder C++ oder batch-Scripting, denn du könntest einfach die komplette Seite weiterschicken und dort dann interpretieren.
edit: habe dir hier ein kleines Java-Programm gebastelt, damit schickst du es einfach weiter:
[code]import java.io.;
import java.net.;
public class Get_and_Post {
public String get(String geturl) {
HttpURLConnection connection = null;
String line;
String result = "";
try {
URL url = new URL(geturl);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while((line = rd.readLine()) != null) {
result += line;
}
rd.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(connection != null) {
connection.disconnect();
}
}
return result;
}
public static String post(String posturl, String parameters) {
HttpURLConnection connection = null;
String line;
String result = "";
try {
URL url = new URL(posturl);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(parameters);
wr.flush();
wr.close();
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
while((line = rd.readLine()) != null) {
result += line;
}
rd.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(connection != null) {
connection.disconnect();
}
}
return result;
}
public static void main(String args[]) {
String rssGET = new String("http://name.blogsport.org/path_to_rss.xml");
String rssPOST = new String("http://localhost/post-test.php");
Get_and_Post gap = new Get_and_Post();
String result = gap.get(rssGET);
System.out.println("GET-Request");
System.out.println(result);
System.out.println("\n\nPOST-Request");
result = gap.post(rssPOST, new String(result));
System.out.println(result);
}
}[/code]
Dieses kannst du mittels Cron-Job starten oder immer, wenn du den Blog aktualisierst manuell (falls du es für Windows brauchst, kann ich dir draus ein jar-Archiv packen, dann brauchst du nur ein Doppelklick darauf machen). Kann ich dir per Mail schicken, wenn du willst… (mein post-test.php-Code war: var_dump($_POST);
Am besten wäre es wenn du es auf der Konsole damit startest: java Get_And_Post > success.txt
Hallo do-it-yourself,
ich arbeite mit Win 7 32 Bit. PHP nutze ich lokal mit dem XAMPP-Programm, wenn man sich ein wenig damit beschäftigt, ist XAMPP eine tolle Sache. Aber ich nutze es nur zum Testen meiner HP, die viele PHP-Seiten enthält.
Die Sprachen, die ich gut kenne sind:
- HTML
- CSS
- RapidBatch (Im Vergleich zu C++ etc. nicht sehr bekannt aber kann dennoch einiges)
Über eine Privatnachricht von Dir mit dem Java-Tool würd ich mich sehr freuen. Denn das Abspeichern meines Blogs in eine Datei scheint mit PHP nicht einfach zu sein. Könntest Du Dein Script auch so erweitern, dass es, wie von mir eingangs beschrieben, auch die Textdatei auswertet? Wenns nicht zu viele Umstände macht. Denn dann bräuchte ich nicht mehr lange am PHP-Script rumbasteln. PHP ist für mich eher wie ein Puzzlespiel :-): Hier ein Script aus dem Netz, da ein Befehl nachgelesen und am Ende immer gehofft, dass es funktioniert. Aber eigentlich die Sprache nicht wirklich verstanden. Mir fehlt auch, zumindest momentan, die Zeit sie mal genauer zu erkunden.
XAMPP ist ganz gut, aber völlig überladen. Wer braucht diesen ganzen Müll, der mitgebracht wird? Habe AppServ für Windows gefunden; das ist wesentlich kompakter. Leider fehlt die ein odere andere Funktion unter Windows.
Soweit ich das beurteilen kann, ist NUR Perl besser/einfacher in String-Verarbeitung. php ist verdammt einfach für Einsteiger, warum es auch sehr verrufen ist, da sie fast keine Erfahrung damit haben und nie lückenlos programmieren. Aber die Sprache gefällt mir, weil sie für jeden einfach zu lesen ist.
Du hast eine PM 
Hallo do-it-yourself,
zwar konnte ich Deine Privatnachricht lesen, aber leider nicht beantworten. Evtl. macht da meine Blindensoftware Probleme.
Sende mir daher am besten als PN Deine Mailadresse, dann wirds auch klappen :-).
Hallo,
ich weiß, dass das Thema sehr alt ist. Ich hänge jedoch an einem Problem.
Wenn ich das Ausgelesene an meinen lokalen Webserver sende, geht es; sende ich es an einen anderen Webserver, der von mir administriert wird, geht es auch. Sende ich jedoch an bplaced.net werden die deutschen Sonderzeichen falsch decodiert.
Es handelt sich um folgendes Problem:
Ich mache body += URLEncoder.encode(irgendeinString, “UTF-8”); und vorher natürlich connection.addRequestProperty(“Content-Type”, “text/html; charset=”+encoding);
der body wird dann in den Stream geschrieben.
Die html-Tags werden richtig codiert und wieder decodiert, aber die Sonderzeichen wie ü,ä und ö spielen nicht mit. Muss ich da im Header noch was Besonderes mitschicken?
Ok, habe es gelöst.
Ich sende byteweise an euren Server, sodass es keinen Unterschied macht. Meine Server versenden nur standardmäßig im http-Header das Encoding=utf-8. Also muss man ins php-Skript header(“Content-Type: text/html; charset=utf-8”); angeben.