foreach - Schleifen und arrays

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #91
    Zitat von newbie1955 Beitrag anzeigen
    Mein erste Frage wäre schon mal, was denn in den divs "feed1" usw noch drinnestehen soll, was die funktion aufruft?
    Um ein Beispiel zu nehmen, Du hast jetzt bei Inforadio im Quelltext zu stehen:

    HTML-Code:
    <div class="border">
       <a href="http://www.inforadio.de/nachrichten/index.html" target='_blank'> 
       <img src="logos/inforadio.jpg" alt="rbb-Inforadio"  style=" margin:3px 0px 0px -45px ; padding:0px;"/></a>
       <!--... Liste ... -->
    </div>
    Und Du ordnest einfach dem Div-Bereich die ID des Feeds zu, der Rest könnte so bleiben:

    HTML-Code:
    <div id="feed3" class="border">
    Durch das + bei += feedObj.responseText wird der neue Content nur zum bereits vorhandenen Content im Div-Bereich hinzugefügt, ohnhe + würde der vorhandene Content überschrieben.

    Musste da gestern auch einige Stunden suchen, war erst auf eine Lösung mit einer Schleife aus, doch mit einer Schleife ging es nicht. Dann hieß es hier im Forum von einem Moderator bei einer anderen Frage, innerHTML sei veraltet, stattdessen sollte nodeValue benutzt werden. Bisher habe ich aber immer innerHTML benutzt. Heute wieder gesucht, bis ich dann den Hinweis fand, dass innerHTML zum Sprachumfang von HTML5 gehört, somit eigentlich nicht veraltet sein dürfte. Die Hälfte der Zeit besteht eigentlich aus einer Suche nach Lösungsansätzen.

    Die Funktion wird ja durch window.onload aufgerufen, also wenn das Fenster der Meinung, dass es bereits sichtbar ist. Daran anschließend ruft sich die innere Funktion selbst auf, bis sie var anzahl = 5 überschreitet.

    Code:
    window.onload = function() {
    
        function beginneLaden() {
        ...
        }
        beginneLaden();
    }
    Edit: Die erste vernünftige Seite, deren Inhalt ich nach der Übersetzung verstehe.

    https://developer.mozilla.org/en-US/...ment.innerHTML

    Wenn innerHTML unüberlegt eingesetzt wird, kann Schadcode in HTML eingefügt werden. Ab HTML5 sollen mit innerHTML eingefügte Script-Tags nicht mehr ausgeführt werden, bzw. der Code innerhalb der Script-Tags. Somit wäre NodeValue schon sicherer, doch da werden ja wieder alle Tags sichtbar ausgegeben, auch die zuvor vom PHP-Script erlaubten HTML-Tags. Da jedoch so etwas wie im Beispiel auf der Seite

    Code:
    "<img src=x onerror=alert(1)>";
    bereits im PHP-Script rausfliegen sollte, halten sich meine derzeitigen Bedenken in Grenzen. Ist dennoch ein sehr gutes Beispiel, wie schnell ein Einsteiger Sicherheitslücken aufreißen kann.
    Zuletzt geändert von Melewo; 20.06.2013, 19:05.

    Kommentar


    • #92
      Danke

      für Deine Tipps, werde es ausprobieren...sollte man über Ajax und Js alles lernen? Ich hatte js auch rausgelassen wg. der möglichen js - Deaktivierung in den Browsern. Da muss man doch als noscript-Variante dann auch auf die PHP-Seite weiterleiten, oder?

      Gruß
      newbie1955

      Kommentar


      • #93
        Nein, nicht unbedingt, denn wenn Du dann in 3 bis 6 Monaten beginnst eine App aus dem Ding für unterschiedliche Endgeräte zu entwickeln, machst Du das eventuell nur noch mit HTML5, JavaScript und CSS, mit einer Schnittstelle zum Server oder so. Habe noch keine App programmiert, kommt vielleicht noch, dann weiß ich mehr.
        Würde sich für eine App wohl eignen, nur hätte ich rechtliche Bedenken wegen den Logos, da es sich dabei beinahe ausnahmslos um geschützte Bildmarken handeln sollte. Wenn die im Feed enthalten sind, dann ist es gut, beim Scrapping wäre ich jedoch vorsichtig mit der Verwendung. Weiß nicht, in wieweit die mit unters Zitatrecht fallen. Beispiel Spiegel-Online:

        https://register.dpma.de/DPMAregiste...r/300166346/DE

        Versuche Dich mal ins Forum bei deaktiviertem JS einzuloggen. Geht nur über Umwege, was ich aber erst nach vielen erfolglosen Versuchen mitbekam, bevor mir dann endlich einfiel, dass ich JavaScript zuvor deaktiviert hatte. Ein Hinweis, dass eine Seite nur mit JS nutzbar ist, sollte eigentlich genügen.

        Anders sieht es bei normalen Webseiten mit Infos, bei Shops usw. aus, die sollten auch bei deaktiviertem JS navigierbar bleiben.

        Muss mich korrigieren, ein Problem sehe ich nicht in der Anzeige von Logos, da machen Suchmaschinen mit ihrer Bildersuche auch nichts anderes, sondern in der Art der Nutzung. Da ich aber kein Recht************perte bin, würde ich die Finger davon lassen oder mich weitergehend informieren.

        Zitat von newbie1955 Beitrag anzeigen
        Wobei ich ja auch noch bei einzelne Medien Extra-Lösungen habe, wo ich direkt auf die Seite gehe und h2-tags lese usw.
        Wenn Du unterschiedlichen Code einsetzt, dann ist das ja kein Problem. Du erstellst Dir nur einen Plan oder eine Tabelle, welche Feeds welchen Code benutzen und ladest den entweder zu oder wählst den nur entsprechend der Feed-ID aus.
        PHP-Code:
        <?php
        ini_set
        ("user_agent""Mozilla/5.0 (compatible; Feedreader/PHP +".$_SERVER["HTTP_HOST"].")");
        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 (

            
        => "www.example.com/atom/",
            
        => "www.example.net/?service=Rss",
            
        => "www.example.com/index.rss",
            
        => "exampl.net/443313/index.rss",
            
        => "www.example.com/rss/news-atom.xml",
            
        //weitere Feeds ...
        );

        if (isset(
        $_GET["feedid"]) and !empty($_GET["feedid"])) {

            
        $feedid preg_replace("/[^0-9]/"""$_GET["feedid"]);

            if (
        $feedid == or $feedid == 3) {

                
        verarbeiteFeed("http://".$feedurls[$feedid]);
            }
            elseif (
        $feedid == or $feedid == 4) {

                
        // anderer Code für "http://".$feedurls[$feedid]);
            
        }
            elseif (
        $feedid == or $feedid == 6) {

                
        // anderer Code für "http://".$feedurls[$feedid]);
            
        }
        }
        ?>
        Eventuell mit einer Tabelle, sollte am einfachsten sein, um den Überblick zu behalten.

        Der einzige Nachteil von Ajax wäre, dass die Suchmaschinen keinen Content finden würden und somit die Seite kaum gelistet würde. Doch da die Bots von Suchmaschinen auch nicht ewig warten wollen, was letztendlich ebenso Minuspunkte fürs Ranking ergeben könnte, könnte man dem aus dem Wege gehen, in dem man bei deaktivierten JavaScript gecachte Inhalte anbietet. Oder alternativ, einige wenige Feeds, die schnell genug laden mit PHP ausgeben und die restlichen mit Ajax nachladen.
        Zuletzt geändert von Melewo; 21.06.2013, 17:55.

        Kommentar


        • #94
          Zeitmessung

          Hi, wie misst Du die Ladezeit einer Seite? Ich habe mir ein Firefox Add-on installiert und aktiviert und sehe nicht, wo ich die Zeiten dann finde, finde auch keine help funktion usw. Das Ding heißt app.telemetry page speed monitor. Auch firebug soll angeblich helfen, finde aber keine möglichkeit.

          gruß
          newbie1955

          Kommentar


          • #95
            Mit Firebug in der ersten Menüleiste => "Netzwerk" (Aktiviert, Browser-Cache deaktivieren) und in der zweiten Menüleiste => "Alle" auswählen. Siehe Screenshot, da sind die Einstellungen gut zu erkennen. Das betrifft die Ladezeit einer Seite, die Laufzeit eines Scripts, die nicht mit der Ladezeit zu verwechseln ist, lässt sich hingen wie folgt testen:

            PHP-Code:
            <?php $start microtime(true);


            /* Das eigentliche Script
               ...
               ...
            */

            $end microtime(true);
            $laufzeit $end $start;
            echo 
            "Laufzeit: ".$laufzeit." Sekunden!<br><br>\n";
            ?>
            Edit: Hatte vor längerer Zeit mit einem zweiseitigen Ajax-Tutorial begonnen, dann nicht weiter fortgeführt. Weil ich das gerade passend fand mit den Requests, nun um eine dritte Seite ergänzt, mit einer etwas ausführlicheren Beschreibung, an der ich schon seit gestern sitze.

            Ajax: Mehrere Requests nacheinander ausführen

            Ich denke, eigentlich solltest Du mit der Beschreibung klar kommen.
            Angehängte Dateien
            Zuletzt geändert von Melewo; 23.06.2013, 13:02.

            Kommentar


            • #96
              Super

              dass Du da gleich ein Tutorial machst.

              Ich habe jetzt ein wenig mit den Seiten herumprobiert und bin mir noch unsicher, was ich mache. Die Ladezeit der Gesamtseite ist mit Ajax länger, sagt Firebug (8,6 zu 6,3) und es ruckelt halt zwangsläufig beim Seitenaufbau, dennoch sind natürlich die ersten feeds oben viel schneller da. Muss noch mal ein wenig darüber nachdenken.

              Danke für das Tutorial, werde es mir zu Gemüte führen in den nächsten Tagen.

              Gruß
              newbie195

              Kommentar


              • #97
                Du kannst doch auch Parallel-Request ausführen, dann dürfte sich die Ladezeit noch einmal halbieren. Du könntest auch 3 bis 4 Parallel-Request ausführen. Nur dementsprechend müsstest Du auch unterschiedliche PHP-Seiten ansteuern, die Variablen und Werte richtig setzen usw. usf., was bei zu vielen parallelen Request leicht unübersichtlich wird. Wichtig ist doch, dass nicht ein var = Objekt durch ein gleichnamiges var = Objekt überschrieben und noch einige Kleinigkeiten mehr.

                Code:
                window.onload = function() {
                
                      sendeRequestEins();
                      sendeRequestZwei();
                  }

                Kommentar


                • #98
                  Request

                  Am schönsten wäre es ja auchdie Seite schaut nur im Hintergrund nach, ob sich an irgendeinem feed was geändert hat. Bisher lade ich ja die komplette Seite automatisch nach 5 Minuten neu, obwohl sich ja in der Regel wenig geändert hat. In der Ajax-Beschreibung lese ich, dass genau das ja Ajax machen kann.Du weißt da sicher mehr.

                  Gruß
                  newbie1955

                  Kommentar


                  • #99
                    Zitat von newbie1955 Beitrag anzeigen
                    Bisher lade ich ja die komplette Seite automatisch nach 5 Minuten neu, obwohl sich ja in der Regel wenig geändert hat.
                    Statt den nächsten Aufruf mit false zu beenden wenn die Anzeahl erreicht ist, sollte es dafür eigentlich genügen, dass Du den nächsten Aufruf für 5 oder 10 Minuten mit window.setTimeout("Bezeichner()", 10000) stoppst und danach var i wieder auf 1 setzt:

                    SELFHTML: JavaScript / Objektreferenz / window

                    Eventuell könntest Du auch den Status abfragen, doch ich bekomme immer 200, auch wenn es eigentlich 304 sein müsste. Liegt daran, dass PHP ja immer neu parst. Somit müsste die Abfrage auf 304 bereits von PHP übernommen werden, doch da die Feeds wohl auch nur generiert werden, weiß ich jetzt nicht, ob die nicht auch nur 200 liefern. Müsstest Du mal kontrollieren.

                    Nun habe ich auch noch ein Beispiel begonnen (Text ist noch nicht fertig), in dem Parallel-Request mit hintereinander abzuarbeiten Request kombiniert werden. War erst auf die Erzeugung einer Pseudo-Klasse oder etwas ähnlichem in dieser Richtung aus, doch mit this streikte das Script mal hier und mal da und als alle Fehler korrigiert waren, meldete sich onreadystatechange nicht mehr. Doch mit einer zusätzlichen Funktion geht es auch, nur ist darauf zu achten, dass keine Variablen versehentlich global definiert werden:

                    Ajax: Parallel Requests gleichzeitig ausführen

                    Die Ladezeit verkürzt sich erheblich, da immer zwei Requests parallel gesendet. Parallel, nicht gleichzeitig, der Beginn ist nur gleichzeitig, ansonsten feuert zuerst, wer zuerst die Antwort auf die vorausgehende Anfrage erhielt.

                    Kommentar


                    • Danke

                      die Parallel-Requests werde ich mal ausprobieren anhand des Textes von Deiner Seite, hoffe, dass ich das in dieser Woche hinkriege, danach bin ich erstmal 14 Tage weg.

                      Super! Das mit dem window.setTimeout ist doch ganz vielversprechend für meine Zwecke.

                      Gruß
                      newbiew1955

                      Kommentar


                      • Tagesschau feed

                        ..da kommt schon seit Tagen nix bei der tagesschau, obwohl die ihre feeds nicht verändert haben. Dann habe ich die js-variante meiner Seite aktiviert, dann kam wieder was, jetzt kommt wieder nix. Bin unterwegs und habe nur ein ipad mit, hast du eine ahnung woran das liegen kann, habe alle drei rss 2.0, rdf und atom ausprobiert... Gruß newbiw1955

                        Kommentar


                        • Anscheinend

                          Haben die das selbst verursacht, obwohl sich der feed separat aufrufen ließ. Jetzt läuft es jedenfalls erstmal wieder

                          Kommentar


                          • Zitat von newbie1955 Beitrag anzeigen
                            Haben die das selbst verursacht, obwohl sich der feed separat aufrufen ließ. Jetzt läuft es jedenfalls erstmal wieder
                            Weiß nicht, habe mir den Feed erst heute angesehen, da ist soweit alles in Ordnung. Wollte in der letzten Woche den Feedreader noch als Plugin für WordPress anpassen, das ging recht schnell unter Localhost. Nur dann wollte ich noch WP unter einer neuen Domain einrichten, um den auch im Web mit WP zu testen und auf eine Beispielseite als Demo vorweisen zu können.

                            Aus der 5 Minuten Installation ist eine ganze Woche geworden, ehe ich die Login-Seite für Bots unerreichbar hatte, überlange Linktexte gekürzt, Description auch für statische Seiten und noch ein paar andere Dinge. Die verwenden für alle Funktionen eigene Bezeichner, da wird aus htmlspecialchars oder htmlentities mal schnell esc_attr oder esc_html, obwohl intern dann auch nur Flags wie ENT_QUOTES notiert sind.
                            Und seit dem hier h3ll mal etwas zur camelCase Notation von Bezeichnern für Funktionen und Methoden schrieb, ich mich daraufhin noch etwas belesen hatte und dann begonnen mich danach zurichten, da schreiben die wieder was von "never camelCase" und alles in Kleinschreibung mit Unterstrichen unter dem Stichpunkt Naming Conventions.

                            Oder ich verstehe es nur nicht richtig.
                            Oder es ist die falsche Seite.
                            Zuletzt geändert von Melewo; 11.07.2013, 15:37.

                            Kommentar


                            • Parallel Requests

                              hallo, habe mal versucht, die parallel request Variante auszuprobieren mit echten feeds, aber er zeigt mir immer nur an "keine Description gefunden", habe wahrscheinlich was wesentliches vergessen....
                              Ein Demo-Script mit Ajax

                              Gruß

                              Kommentar


                              • preg_replace-Problem

                                hallo, wir hatten ja schon mal über diese Funktion in Deinem Script geschrieben:

                                PHP-Code:
                                function filtereLinks($daten) {

                                    if ((
                                $pos strpos($daten"#")) !== false) {
                                        
                                $daten substr($daten0$pos);
                                    }    
                                    
                                $daten preg_replace("/[^a-z0-9_\/=.:;&?-]/is"""$daten);
                                    return 
                                $daten;

                                offenbar filtert er beim taz-feed auch die "!" aus den Links heraus und das führt dann zu Problemen. Ich sehe oben beim preg_replace aber nur .:;&?- wo werden denn die "!" erwischt? Kenne mich leider mit der Syntax von preg_replace immer noch zu wenig aus.

                                Habe hier geguckt:
                                Learning to Use Regular Expressions

                                Doch mein Englisch ist nach so vielen Jahren einfach dafür zu miserabel, um wirklich Schritt für Schritt zu verstehen, wie man Zeichengruppen ersetzt und welche Zeichen dann einbezogen sind.

                                Gruß
                                newbie

                                Kommentar

                                Lädt...
                                X