Oha
ja, ich wusste, dass das relativ lange dauert und habe mit javascript erste Versuche gemacht, ohne dass es alles viel schneller lief - ich wollte nicht so viel damit herumpfuschen, ich habe aber immer nach Lösungen gesucht, die Seite Stück für Stück zu laden, damit man schon mal die erste feeds gezeigt werden, während die nächsten noch laden. Ich hatte auch an Cron-Jobs gedacht, damit schon was da ist, wenn die Seite aufgerufen wird, aber mein provider unterstützt das nicht.
Du musst Dir das so vorstellen: Es gab eine Seite eines Ex-Kollegen von mir, die aber urheberrechtliche Schwierigkeiten hatte, weil der Ex-Kollege leider nicht nur die feeds, sondern auch ein paar urheberrechtlich geschützte contents verbreitete, ohne einen Vertrag mit den Agenturen zu haben. Deshalb hat er die Seite gleich ganz vom Netz genommen (zumal er auch verständlicherweise verärgert war, dass das irrsinnig viel Arbeit macht, aber aus rechtlichen Gründen ja gar kein Geld bringen darf ).
Da habe ich mich dann - fast ohne PHP und mit nur wenig HTML/CSS-Kenntnissen - rangemacht und erstmal gebastelt, weil wir hier (unsere Nachrichtenredaktion ist der dritte feed von oben links) immer sehr viel mit einer solchen Seite gearbeitet haben, um zu sehen, was es an Themen sonst noch so gibt und was die anderen Medien wichtig finden. Am Anfang war das ganze komplett ohne Layout, nur dass wir uns nicht mehr einzeln durch die Medienseiten klicken mussten. So, und das ist jetzt eben daraus geworden.
Ich werden mir Dein Script in Ruhe anschauen - und bin Dir wie stets sehr dankbar für die viele Arbeit. Der erste Eindruck der Demo ist toll. Ob und wann ich es umstelle, muss ich dann sehen. Denn ich fürchte, sonst falle ich Dir noch Jahre auf die Nerven, weil, immer wenn ich etwas ändern will, weiß ich dann nicht weiter usw. Mein erste Frage wäre schon mal, was denn in den divs "feed1" usw noch drinnestehen soll, was die funktion aufruft?
Wobei ich ja auch noch bei einzelne Medien Extra-Lösungen habe, wo ich direkt auf die Seite gehe und h2-tags lese usw.
Bis demnächst
newbie1955
foreach - Schleifen und arrays
Einklappen
X
-
Ich konnte das gar nicht mit ansehen, wie langsam die Startseite vom Nachrichtentisch ladet. Habe mal etwas probiert und gebastelt, wie es schneller gehen würde. Ist jedoch noch keine ausgereifte Lösung, nur erst einmal ein Test.
Also, den PHP Code raus aus den Seiten und in eine kleine Datei packen. Im Beispiel die feeds.php, in der wie gehabt die funktionen.php includet wird:
PHP-Code:<?php
ini_set("user_agent", "Mozilla/5.0 (compatible; Feedreader/PHP +".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].")");
header("Content-Type: text/html; charset=UTF-8");
error_reporting(E_ALL);
$feedfu = "funktionen.php"; // Seite mit den Funktionen
if (file_exists($feedfu)) {include_once $feedfu;
} else {echo "Feedfunktionen konnte nicht geladen werden!\n";
}
// Feed-Adressen aufnehmen und nummerieren
$feedurls = array (
1 => "www.tagesschau.de/xml/atom/",
2 => "www.spiegel.de/wirtschaft/index.rss",
3 => "rss2.focus.de/c/32191/f/443313/index.rss",
4 => "www.heise.de/developer/rss/news-atom.xml"
);
if (isset($_GET["feedid"]) and !empty($_GET["feedid"])) {
$feedid = preg_replace("/[^0-9]/", "", $_GET["feedid"]);
verarbeiteFeed("http://".$feedurls[$feedid]);
}
?>
HTML-Code:<!DOCTYPE html> <html> <head> <title>Feedreader</title> <link rel="stylesheet" type="text/css" href="feedstyle.css"> </head> <body> <h1>Feedreader für RSS und Atom</h1> <script type="text/javascript"> var feedObj = null; feedObj = new XMLHttpRequest(); var i = 1; window.onload = function() { function beginneLaden() { feedObj.open("GET", "feeds.php?feedid="+i); feedObj.onreadystatechange = ladeFeeds; feedObj.send(null); function ladeFeeds() { var fa = false; var anzahl = 5; // Anzahl der Feeds angeben if (feedObj.readyState == 4) { document.getElementById("feed"+i).innerHTML += feedObj.responseText; i++; fa = true; if (i > anzahl) {fa = false; } } if (fa != false) { beginneLaden(); } } } beginneLaden(); } </script> <!-- Hier so viele Div-Bereiche im Dokument anlegen und mit einer ID versehen, wie Feeds in der Seite geladen werden sollen. --> <div id="feed1"></div> <div id="feed2"></div> <div id="feed3"></div> <div id="feed4"></div> </body> </html>
Der Nachteil, die Seite enthält keinen für Suchmaschinen verwertbaren Content mehr. Eine Alternative wäre, zuerst die schnellen mit PHP zu laden, die langsamen dann per Ajax zusätzlich.
Edit: Habe mal ein kleines Demo mit 5 Feeds angefertigt, damit Du den Unterschied beim Laden einer Seite siehst:
Nur ein Demo - Feeds laden mit Ajax
Also, nach einer halben Sekunde ist die Seite zu sehen, dann folgen die Feeds. Finde ich für Besucher einer Seite angenehmer.Zuletzt geändert von Melewo; 20.06.2013, 13:59.
Einen Kommentar schreiben:
-
Das weiß ich jetzt nicht so genau.
Welchen Editor benutzt Du?
Im Notepad++ Der Hagelsturm von Dienstagabend richtete im Kanton
Mit TextFX Convert to Hex und die normalen Leerzeichen (20) siehst Du ja dann und die Du nicht kennst, die kannst Du Dir aus einer Zeichentabelle holen:
Code:"000000058 44 65 72 [B]20[/B] 48 61 67 65-6C 73 74 75 72 6D [B]20[/B] 76 |Der Hagelsturm v|" "000000068 6F 6E [B]20[/B] 44 69 65 6E 73-74 61 67 61 62 65 6E 64 |on Dienstagabend|" "000000078 [B]20[/B] 72 69 63 68 74 65 74-65 [B]20[/B] 69 6D [B]20[/B] 4B 61 6E | richtete im Kan|" "000000088 74 6F 6E 0D 0A |ton.. |"
Es gibt dann noch diese Funktionen:
dechex() - Dezimal zu Hexadezimal Umwandlung
decbin() - Dezimal zu Binär Konvertierung
bindec() - Umwandlung von binär zu dezimal
hexdec() - Hexadezimal zu Dezimal Umwandlung
decoct() - Dezimal zu Oktal Umwandlung
Und Du hast noch chr und ord, falls Du so etwas wie auf dieser Seite beschrieben meintest:
ASCII-Zeichen zu Dezimalwert und umgekehrt (PHP, Beispiele)Zuletzt geändert von Melewo; 19.06.2013, 16:12.
Einen Kommentar schreiben:
-
Danke
ja, ein großer Teil der Leerzeichen geht damit weg, zwei Zeilen bleiben, warum weiß ich nicht. Es gab doch außer var_dump und ähnlichem auch noch eine Ausgabe - Möglichkeit, mit der man sich exakt jedes Zeichen anzeigen lassen konnte, das da scheinbar als Leerzeichen stehen bleibt.
Einen Kommentar schreiben:
-
Alle Leerzeichen kannst du nicht entfernen, sonst würde es so aussehen:
DerHagelsturmvonDienstagabendrichteteimKanton
Ja, es war in einem Thread von Dir:
Zitat von Melewo Beitrag anzeigenPHP-Code:...
// Entfernt alle Zeilenumbrüche und mehr als 1 Leerzeichen in Reihe,
// so dass aus dem String ein String in Reihe wird.
$data = preg_replace("#\s{2,}#", "", $data);
Nur solltest Du es in diesem Fall nur da einsetzen, wo es benötigt wird.Zuletzt geändert von Melewo; 19.06.2013, 13:22.
Einen Kommentar schreiben:
-
Frage
Hallo, Du filterst doch in den feedfunktionien eigentlich schon alles raus, was in die Ausgabe nicht reingehört. Ich habe dennnoch eine Description-Ausgabe, die den eigentlichen Text erst nach unendlich vielen scheinbaren Leerzeichen ausgibt, obwohl ich den Inhalt von description trimme.
HTML-Code:<description><div class="field field-article-lead-image"> <div class="field-items"> <div class="field-item odd"> <img src="http://www.handelszeitung.ch/sites/handelszeitung.ch/files/imagecache/left-standard-teaser/lead_image/hagel.jpg" alt="Hagelsturm im Kanton Zürich kostet Millionen" title="Hagelsturm im Kanton Zürich kostet Millionen" class="imagecache imagecache-left-standard-teaser imagecache-default imagecache-left-standard-teaser_default" width="218" height="130" /> </div> </div> </div> <div class="field field-article-lead"> <div class="field-items"> <div class="field-item odd"> Der Hagelsturm von Dienstagabend richtete im Kanton Zürich einen Schaden von rund 15 Millionen Franken an. Mehrere Tausend Gebäude wurden beschädigt. </div> </div> </div> </description>
Gruß
newbie1955
Einen Kommentar schreiben:
-
Zitat von newbie1955 Beitrag anzeigenIch glaube kaum, dass es da markenrechtliche Probleme gibt, so wie es da steht.
Laden tut der "http://feeds.feedburner.com/euronews/de/home?format=xml" eigentlich normal, doch der wird doch über feedburner ausgeliefert und Google ist da nicht ganz so uneigennützig. Die Links sehen ja so aus:
HTML-Code:<link>http://feedproxy.google.com/~r/euronews/de/home/~3/nbcMxRYfNcE/</link>
Solange es nur ein Script und kein Produkt ist, da braucht einen so etwas nicht zu interessieren. Wenn es aber als Produkt ausgelegt werden könnte, weil es zum Beispiel für 1 Euro bei eBay unter einem Namen eingestellt wird, dann sieht die Sache schon ein wenig anders aus. Nur mal so ein Auszug, was so beim DPMA registriert wurde:
Datenbestand Aktenzeichen/Registernummer Wiedergabe der Marke
DE 399517731 XML-Info
DE 399517766 XML-Online
DE 399517774 XML-Training
DE 399531785 XML-Forum
DE 399550348 XML-Info
DE 300511841 XML-Builder
EM 9591843 XML Validator
EM 11595725 Xml Robot
Ein Blog hatte mal ohne irgendwelche Hintergedanken diese Olympischen Ringe auf der Seite irgendwie abgebildet. Zumindest so lange, bis vom Olympischen Komitee eine Abmahnung mit einer Kostennote von 30.000 Euro kam. Die haben sich dann, nach dem sie die Ringe selbstverständlich sofort entfernten, wohl auf eine Summe von 15.000 geeinigt, wenn ich mich recht entsinne. Bei den Olympischen Ringen hätte ich mir auch nichts gedacht, sind aber halt als Bildmarke geschützt.
Die abgeleitete Software darf ohne vorherige Erlaubnis der PHP Group weder mit dem Namen „PHP“ beworben werden, noch darf die abgeleitete Software „PHP“ in ihrem Namen enthalten.
Nun ist die Frage, was die unter einer abgeleiteter Software verstehen und ab und an liest sich das so, als würde es sich darauf beziehen, wenn jemand eine PHP ähnliche Serversoftware entwickeln möchte, die den Kern von PHP mitbenutzt oder so.Zuletzt geändert von Melewo; 17.06.2013, 22:22.
Einen Kommentar schreiben:
-
Ja,
ich habe noch bei Euronews ein Problem entdeckt, da wird anscheinend noch die Schlagzeile in den Link eingefügt, es steht aber erstmal ein Platzhalter (Tilde + Ziffer) drin, der jetzt durch den feedreader entfernt wird, so dass er die Seite dann nicht findet. Kannst es Dir anschauen, wenn Du willst.
euronews
Musst ja auch nix mehr ändern Ich kann ja auch in Einzelfällen auf den Magpie-Parser zurückgreifen.
Ich habe Dich als Hinweis in mein Impressum aufgenommen und auf Deine Seite verlinkt. Ich glaube kaum, dass es da markenrechtliche Probleme gibt, so wie es da steht.
Den vorgeschlagenen Test werde ich dann demnächst auch mal machen.
Alles kriegt man sowieso nicht ideal gelöst, der NDR hat ja gar keine Verlinkung, sondern alle Meldungen als Akkordeon dargestellt, so das man auch keine Einzellinks ausgeben kann. Und beim Saarländischen Rundfunk muss man auch sehr tricksen und sich durch 7 Seiten parsen, um an description-Text zu kommen.
Nochmals Dank und Gruß
newbie1955
Einen Kommentar schreiben:
-
Ja, sehe ich jetzt auch. Doch eine Raute oder Hash # leitet eigentlich nur einen Anker innerhalb eines Dokuments ein
HTML-Code:<a href="#springe_zu-Absatz_zwei">Absatz 2</a>
HTML-Code:"http://...wissen-vor-a-906066.html#ref=rss" "http://...wissen-vor-a-906066.html"
Code:[^a-z0-9_\/=.:;&#?-]
PHP-Code:echo "<Schadcode>";
// <Schadcode>
So und bevor Du dumm stirbst, solltest Du Dir unbedingt Punkt zwei aufklappen und durchlesen:
Dies geschieht aus zwei Gründen:
Hash-Fragmente werden niemals als Teil einer HTML-Anfrage an den Server gesendet.
Also #ref=rss kommt beim Server vom Spiegel eh nicht an.
HTML-Code:http://example.com/seite.html#Hash-Fragment
Wo ich nun bei meinen Listing schon am Nachbessern bin:
PHP-Code:function filtereLinks($daten) {
if (($pos = strpos($daten, "#")) !== false) {
$daten = substr($daten, 0, $pos);
}
$daten = preg_replace("/[^a-z0-9_\/=.:;&?-]/is", "", $daten);
return $daten;
}
PHP-Code:echo '<a href="%3c%53%63%68%61%64%63%6f%64%65%3e">lesen</a>';
PHP-Code:<?php
echo "\x3C\x73\x63\x72\x69\x70\x74\x20\x74\x79\x70\x65\x3D\x22\x74\x65".
"\x78\x74\x2F\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x22\x3E\x61".
"\x6C\x65\x72\x74\x28\x22\x53\x63\x68\x61\x64\x63\x6F\x64\x65\x22".
"\x29\x3B\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E";
?>
Nach den Browsern und Anbietern brauchst Du Dich nicht zu richten, es ist ja nicht deren System, welches verseucht werden könnte, es ist ja Dein System oder das System der Besucher Deiner Webseite und die werden sich nicht bei Dir bedanken, wenn sie wegen einer unsicheren Webseite ihren eigenen Computer neu aufsetzen mussten.
Nun gut, mal sehen was Du da noch findest.
Edit: Nun scheint es dem Ende zuzugehen, was die Durchsicht anbelangt. Eigentlich sollte ich ja nun zufrieden sein, dass Du das Ding ausgiebig getestet hast. Etwas meckern ist zuweilen auch nicht verkehrt, dann kann der Tag nur noch besser werden. Wenn jetzt noch etwas ist, dann bleibt das so, habe ich mir zumindest vorgenommen, dann sind das halt Versionen und eigentlich ist es ja auch so.
Speichere ja alles noch einmal unter anderen Namen ab, denn allein nach dem DPMA gibt es schon um die 50 eingetragene Marken, die mit XML beginnen. Bei einer Script-Beschreibung ist das eigentlich egal, ein Feedreader ist nun einmal ein Feedreader, doch wenn man den dann eventuell bewerben möchte, könnte das anders aussehen.Zuletzt geändert von Melewo; 17.06.2013, 16:23.
Einen Kommentar schreiben:
-
Spiegel
Das ist ein Missverständnis. Bei mir ist der Spiegel auch als feed erreichbar, aber wenn ich dann auf die einzelnen ausgegebenen Links gehe, wird die Seite beim Spiegel nicht gefunden, weil bei meiner Ausgabe ein # entfernt wurde, das im Original aber steht. Also muss es ja vor der Ausgabe durch irgendwas entfernt werden (filterelinks?).
Ich verstehe, dass Dich die viele Arbeit mit dem Script nervt. Leider verdiene ich mit meiner Seite auch keinen cent, sonst würde ich Dir ja was abgeben.
Gruß newbie1955
Einen Kommentar schreiben:
-
Bei mir wird der Spiegel ausgegeben, ein # kann vorkommen und wegen unerlaubten Steuerzeichen wie beim anderen Feed wurden schon Webseiten von Virenscannern gesperrt oder von der Google-Suche als gefährlich eingestuft und mit Warnhinweisen versehen. Sei zufrieden, wenn es bei denen noch nicht so ist, auch wenn da Steuerzeichen wie BEL eingebaut wurden, welche ein hörbares Signal erzeugen sollen, wenn ein Dokument an den Drucker gesendet wird.
Wenn ein Feed nicht geladen werden kann, so wird nach wie vor ein eigener Hinweis vom Script ausgegeben. Habe es extra gestern noch einmal getestet, in dem ich eine URL falsch eingab. Keine Fehlermeldung wird eventuell ausgegeben, wenn nur der Header vom Feed geladen werden kann oder so, weil der Rest Schrott ist.
Und wenn dann bei error_reporting(0) statt error_reporting(E_ALL) verwendet wird, dann bleibt das Dokument leer. Aber Du kannst über den Else-Zweig noch die eine oder andere eigene Fehlermitteilungen hinzufügen oder ergänzen, daran hindert Dich ja keiner. Da werde ich bei meinen auch noch eine ergänzen, ist wohl angebracht.
PHP-Code:} else { echo "<br>Mehrere Titel oder Items scheinen fehlerhaft zu sein.\n";
}
} else { echo "<br>Feed konnte nicht geladen werden!\n";
}
}
Wie man zum Beispiel bei WordPress einfaches Script als Plugin einbindet, das weiß ich zwar, doch wenn es etwas komplexer wird, müsste ich es auch erst wieder testen. Schon würde wieder das nächste Buch fällig, denn nur mit den Anleitungen aus dem Web wird es wohl nicht getan sein. So ist das halt.Zuletzt geändert von Melewo; 17.06.2013, 05:08.
Einen Kommentar schreiben:
-
Nein,
ich will hier auch nicht jeden Schrottfeed besprechen, wollte nur wissen, warum dann die Fehlermeldung, die Du ja eingebaut hast, nicht kommt. Bricht der dann einfach ab? EIgentlich müsste die Funktion doch bis an die Stelle kommen, wo sie merkt, dass da kein Inhalt gelesen wurde...
Ich muss Dich auch noch mit einer zweiten Sache nerven, die links zum Spiegel funktionieren nicht mehr. In denen kommt ein "#" vor, das anscheinend entfernt wird.
ist das an dieser Stelle im Code? (ich habe bisher nur preg_replace, aber nix mit callback verwendet):
PHP-Code:daten = preg_replace_callback("/(&[#a-z0-9]+;)/",
Zuletzt geändert von newbie1955; 16.06.2013, 20:24.
Einen Kommentar schreiben:
-
Bei mir ist der erreichbar, nur so etwas schafft der nicht anzuzeigen, da kommen nach wie vor nur Error-Mitteilungen, an den beiden BEL Steuerzeichen hängt der sich wohl auf. Die werden hier nicht sichtbar, deshalb habe ich an den Stellen [BEL] eingefügt.
Code:<description>... border="0" title="„100% sozial“: Die ..." alt="„100% sozial“: Die ... m Zusammen[BEL]gehen [BEL]soziale ...
Es tut nicht notwendig, hier jeden Schrottfeed besprechen zu wollen.
Einen Kommentar schreiben:
-
Noch ne Frage
es läuft soweit alles ganz gut, allerdings habe ich gerade den Fall, dass der FAZ-Politik feed nicht erreichbar ist. Da hattest Du doch eine Fehlermeldung eingebaut, die kommt aber nicht. Hast Du eine Idee, woran das liegen könnte? Der feed heißt:
http://www.faz.net/rss/aktuell/politik/
und kam bisher ohnehin sehr unzuverlässig. Im Moment stehen drei Meldungen drin, aber einen Fehler im Quelltext erkenne ich nicht.
Gruß
newbie1955Zuletzt geändert von newbie1955; 16.06.2013, 17:49.
Einen Kommentar schreiben:
-
Damit meinte ich nicht, dass Du noch nicht weiter als bei "Hallo Welt" bist, sondern mehr den Unterschied. Funktionen benötigst Du eher, allein schon um Wiederholungen zu vermeiden. Ohne geht es halt auch, in dem man Zeile um Zeile jeden Arbeitsschritt notiert. Mit Funktionen wird es einfacher und kürzer.
Ohne Klassen geht es auch, so lange Du nur für Dich schreibst, brauchst Du nicht unbedingt Klassen, zumal der Code ohne Klassen häufig kürzer und übersichtlicher ist. Wenn Du aber mit anderen Programmierern zusammen an einer professionellen Anwendung arbeiten möchtest, wird es ohne OOP nicht mehr abgehen.
Einen Kommentar schreiben:
Einen Kommentar schreiben: