Feedparsen II

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

  • Melewo
    antwortet
    Zitat von newbie1955 Beitrag anzeigen
    welches Passwort muss ich denn da nun eingeben
    Das Formular bzw. den Posteingang hatte ich gestern in den Demos noch auskommentiert, um nicht spielende Kids anzulocken. Du sollst Dir nicht das Demo ansehen, Du sollst Dir den herunterladen, dann kannst Du da Dein eigenes Passwort eingeben.

    Eigentlich dachte ich, dass Du bis zu der Zeile "Die XML-Datei wird geladen" alles unnötige herausnimmst und den fertigen Code übernimmst. Hatte gestern keine Lust mehr, zum Beispiel bei echo ("Ausgabe") die Klammern zu entfernen, weil bei echo heute kein Mensch mehr Klammern verwenden würde, obwohl die nicht schaden. Nun habe ich nur mal schnell etwas aufgeräumt und angepasst.

    Mit den Namen der Knoten scheint auch nicht mehr alles so zu sein, wie noch vor Jahren, doch jedenfalls ladet der ja erst einmal den Feed und zur Not könnte da immer noch etwas angepasst werden, falls Du mal einen anderen Feed mit anderen Namen finden solltest, dann gebe Bescheid.

    PHP-Code:
    <?php
    $seite 
    "http://www.tagesschau.de/xml/atom/";
     
    $data file_get_contents($seite);

    if(
    $data != false) {

        
    $data str_replace("content:encoded""content"$data);
        
    $pxml simplexml_load_string($data"SimpleXMLElement"LIBXML_NOCDATA);

        
    $si =  0;
        
    $cw 10;

        
    /*-- für RSS --------------------------- */

        
    if($pxml->channel->item) {

            foreach (
    $pxml->channel->item as $nachricht) {

                if (
    $nachricht->title) {
                    echo 
    "<a href=\"".htmlspecialchars($nachricht->link)."\" target=\"_blank\">".htmlspecialchars($nachricht->title)."</a>";
                }
                if (
    $nachricht->content) {
                    echo 
    "<br>\n".htmlspecialchars($nachricht->content)."<br>\n";
                } else {
                    echo 
    "<br>\n".htmlspecialchars($nachricht->description)."<br>\n";
                }
                if (
    $nachricht->link) {
                    echo 
    "<a href=\"".htmlspecialchars($nachricht->link)."\" target=\"_blank\">Linktext</a><br>\n";
                }
                if (
    $nachricht->pubDate) {
                    echo 
    "<br>".htmlspecialchars($nachricht->pubDate);
                }
                if (
    $nachricht->author) {
                    echo 
    " / ".htmlspecialchars($nachricht->author)."<br>";
                } else {echo 
    "<br>\n";
                }

                
    $si++;
                if (
    $si == $cw) {break;
                }
            }
        }
        
    /*-- für Atom -------------------------- */
        
    else{

            foreach (
    $pxml->entry as $nachricht) {

                if (
    $nachricht->title){ $attr $nachricht->link->attributes();
                    echo 
    "<a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\">".htmlspecialchars($nachricht->title)."</a>";
                }
                if (
    $nachricht->content) {
                    echo 
    "<br>\n".htmlspecialchars($nachricht->content)."<br>\n";
                } else {
                    echo 
    "<br>\n".htmlspecialchars($nachricht->summary)."<br>\n";
                }
                if (
    $nachricht->link) {
                    
    $attr $nachricht->link->attributes();
                    echo 
    "<a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\">Linktext</a><br>\n";
                }
                if (
    $nachricht->published) {
                    
    $meindat htmlspecialchars($nachricht->published);
                }
                if (
    $nachricht->issued) {
                    
    $meindat htmlspecialchars($nachricht->issued);
                }
                if (
    $nachricht->updated) {
                    
    $meindat htmlspecialchars($nachricht->updated);
                }
                
    $import = array("T","Z");
                
    $export = array(" um "," Uhr");
                
    $zeitan str_replace($import$export$meindat);
                echo 
    "<br>".substr($zeitan019);

                if(
    $nachricht->author->name) {
                    echo 
    " / ".htmlspecialchars($nachricht->author->name)."<br>";
                } else {
                    echo 
    "<br>\n";
                }

                
    $si++;
                if (
    $si == $cw) {break;
                }
            }
        }
    }
    else {echo 
    "Es konnten keine Daten geladen werden!";}

    ?>
    Zuletzt geändert von Melewo; 01.05.2013, 07:07.

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Danke, Melewo

    erstmal für den Parser, werde mal versuchen, ihn zu verstehen und anzuwenden. Bei meinen Versuchen hatte ich schon item durch entry ersetzt, hatte aber noch nichts gebracht (heißt es dann "$entries as $entry" statt "items as item"?) und wie man "<link href>" umsetzt, weiß ich auch nicht. Bei rss heißt es ja 'link', was vom parser leicht zu finden ist aber muss man den Leerraum zwischen link und href miteingaben? es handelt sich um
    http://www.tagesschau.de/xml/atom.

    Sag mal, wenn ich die Demo des feedreaders auf Deiner Seite anschauen will, welches Passwort muss ich denn da nun eingeben, das verstehe ich nicht.

    Gruß
    newbie1955
    Zuletzt geändert von newbie1955; 30.04.2013, 23:06.

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Schaue Dir den an, den hatte ich mal vor einigen Jahren geschrieben, als ich noch nicht viel Ahnung hatte. Deshalb möchte ich den Code hier nicht unbedingt präsentieren. Der ist mit SimpleXML und für RSS und Atom. Weiß aber gerade nicht, ob die untere oder obere Hälfte für RSS oder Atom ist, eine von beiden Hälften jedoch gewiss.

    Ein einfacher RSS/Atom Reader/Feedeader für Ihre Website/Homepage

    Jetzt ist es mir wieder eingefallen, Unterschied war, einmal wurde item und einmal entry benutzt, denke bei Atom war es entry. Also, einmal mit channel->item und einmal mit entry, je nachdem ob Atom oder RSS. Die anderen Knoten unterscheiden sich auch noch etwas vom Namen. Schaue Dir das am besten an.

    Werde ich mal in den nächsten Tagen überarbeiten, aus heutiger Sicht kommt mir zumindest str_replace etwas dämlich vor.
    Zuletzt geändert von Melewo; 30.04.2013, 18:57.

    Einen Kommentar schreiben:


  • newbie1955
    hat ein Thema erstellt Feedparsen II.

    Feedparsen II

    Hallo, da ich immer häufiger auf irgendwelche invaliden Feeds stoße, die dann mein MAGPIE parser nicht liest, denke ich ernsthaft darüber nach, mir selbst sowas zu schreiben, das für alle xml-Dateien passt.

    Momentan schaffe ich es nicht, dass mir der Parser auch den Link zurückliefert, der hier steckt:


    Code:
    <id>http://www.tagesschau.de</id> <entry> <title>Niederlande: Willem-Alexander feierlich ins Amt eingeführt</title> <link href="[URL="http://www.php-resource.de/forum/view-source:http://www.tagesschau.de/ausland/thronwechsel-niederlande102.html"]http://www.tagesschau.de/ausland/thronwechsel-niederlande102.html[/URL]"/> <id>http://www.tagesschau.de/ausland/thronwechsel-niederlande102.html</id> <updated>2013-04-30T14:42:02.265+02:00</updated> <summary>Willem-Alexander hat seinen Eid als König der Niederlande geleistet. Zur Amtseinführung in der Nieuwe Kerk in Amsterdam versammelten sich neben Politikern des Landes auch Vertreter von Königshäusern aus aller Welt. Am Vormittag hatte Königin Beatrix ihr Amt übergeben.</summary> </entry> <entry> <title>Thronwechsel: Jubel für das neue Königspaar</title>
    tagesschau.de

    Wenn ich dagegen den rss2-feed nehme, findet er alles, der ist nämlich so aufgebaut:

    Code:
    <item> <title>Thronwechsel: Jubel für das neue Königspaar</title> <link>http://www.tagesschau.de/multimedia/bilder/thronwechsel100.html</link>
    Mit dem Magpie-Parser frage ich standardgemäß so ab:
    Code:
    { define('MAGPIE_INPUT_ENCODING', 'UTF-8');
    define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
    define('MAGPIE_CACHE_ON', false);
    define('MAGPIE_CACHE_AGE', 0);
    require_once('rss_fetch.inc');
    $zaehl = 0;
    $alttitle = "";
    
    if ( $url ) {
    $num_items = 13;
    $rss = fetch_rss( $url );
    $items = array_slice($rss->items, 0,$num_items);
    }
    
    echo "<ul id='feed'>";
    foreach ($items as $item) {
    $href = $item['link'];
    $title = $item['title'];
    $desc = $item['description']; 
    
    $title = trim($title);
    if (($title !== '') && ($title !== NULL) && ($title !== $alttitle)) {
    echo "<li><a href = $href target='_blank'>$title</a></li>";
    $alttitle = $title;
    $zaehl++;
    }
    }
    if ($zaehl == 0) {
    echo $url;
    echo " ist leider nicht erreichbar";
    echo " (Versuchen Sie, ob Aktualisieren mit F5 hilft)";
    }
    else
    echo "</ul>";
    }
    ?>
    Ich verstehe das so, dass er 'link' nicht findet, weil es beim atom-feed 'link href' heißt. Wenn ich aber nach 'link href' frage, kommt nix. title findet er natürlich in beiden Fällen. Ich brauche aber den atom-feed, weil nur der die richtige Reihenfolge liefert. (Nach Wichtigkeit statt nach Aktualität). Habt Ihr einen Tipp 1. für diesen Fall und 2. für das Basteln eines eigenen Parsers, der auch invalide feeds ausliest.

    Danke Gruß
    newbie1955
Lädt...
X