Feedparsen II

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

  • newbie1955
    antwortet
    Danke,

    werde ich mir merken!!!!

    Zitat von Melewo Beitrag anzeigen
    Dachte ich mir schon, dass Du so denkst, deshalb ein Tipp, wie man versteckte Fehler findet. Wenn Du den Quelltext in den Notepad++ kopierst, dann sticht der ziemlich aufdringlich hervor. Siehe Ausschnitt vom Screenshot.

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Dachte ich mir schon, dass Du so denkst, deshalb ein Tipp, wie man versteckte Fehler findet. Wenn Du den Quelltext in den Notepad++ kopierst, dann sticht der ziemlich aufdringlich hervor. Siehe Ausschnitt vom Screenshot.
    Angehängte Dateien

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Ehrlich gesagt, dass habe ich mir (NEWBIE!) nicht zugetraut, diesen Fehler hätte ich sicher auch nicht entdeckt.

    Danke und Gruß
    newbie1955

    Zitat von Melewo Beitrag anzeigen
    Liegt nicht an den Tags, der Feed scheint nicht valide zu sein.

    Edit: Ist im Quelltext nicht zu sehen, doch ein Titel enthält vor dem im Titel enthaltenen Entity noch ein STX als Steuerzeichen. Wenn Du das herausfilterst, dann ladet der Feed normal.

    PHP-Code:
    $data file_get_contents($seite);   
    $data preg_replace("/\x02/",""$data); 
    Doch warum suche ich nach den Fehlern im Feed und nicht Du?

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Liegt nicht an den Tags, der Feed scheint nicht valide zu sein.

    Edit: Ist im Quelltext nicht zu sehen, doch ein Titel enthält vor dem im Titel enthaltenen Entity noch ein STX als Steuerzeichen. Wenn Du das herausfilterst, dann ladet der Feed normal.

    PHP-Code:
    $data file_get_contents($seite);   
    $data preg_replace("/\x02/",""$data); 
    Doch warum suche ich nach den Fehlern im Feed und nicht Du?
    Zuletzt geändert von Melewo; 14.05.2013, 04:31.

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Neuer feed

    Du hattest mir ja netterweise bei dem feed geholfen, jetzt habe ich wieder einen nicht-validen, der aber von dem Script unten auch nicht erreicht wird. Du schriebst ja, ich soll Dir dann Bescheid geben: ALso bei dem hier kommt als Ergebnis nix, obwohl der Browser ihn separat aufgerufen anzeigt.

    Code:
     <?php
    
    $seite = "http://www.nordbayern.de/cmlink/15.423?cid=2.178";
     
    $data = file_get_contents($seite);
    
    if($data != false) {
    
         $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 "<li><a href=\"".htmlspecialchars($nachricht->link)."\" target=\"_blank\">".htmlspecialchars($nachricht->title)."</li></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 "<li><a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\">".htmlspecialchars($nachricht->title)."</li></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\"></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($zeitan, 0, 19);
    
                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!";}
    
    ?>   
    </ul>
    Gruß und Dank newbie1955


    Zitat von Melewo Beitrag anzeigen
    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!";}

    ?>

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Bei mir wird alles richtig ausgegeben. Füge mal so eine Zeile mit č ein und konvertiere dann die Datei und rufe sie dann auf.

    PHP-Code:
    <?php header("Content-Type: text/html; charset=UTF-8"); ?>
    <!DOCTYPE html>
    <html>

    <head>
    <title>Test</title>
    <meta charset="UTF-8">
    </head>

    <body>
    <h1>Sučeljavanje gradonačelnika nisu došli</h1>
    <div class="border">
    <a href="http://www.novilist.hr/Vijesti" target="_blank">
    <img src="logos/novi.jpg" alt="Novilist" style=" margin:3px 0px 0px -45px; padding:0px"/></a>

    <ul>
    <?php
    error_reporting
    (-1);
    ini_set("display_errors"true);
    libxml_use_internal_errors(true);

    $data file_get_contents('http://www.novilist.hr/Vijesti');
    $doc = new DOMDocument();

    $doc->loadHTML($data);

    $xPath = new DOMXPath($doc);

    $zaehler 0;
    foreach (
    $xPath->query('//h2') as $element) {

        
    $hreft $element->getAttribute('href');
        
    $title str_replace('""','"',$element->nodeValue);

        echo 
    "<li><a href=\"".htmlspecialchars($hreftENT_QUOTES)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTES)."</a></li>\n";
        
    $zaehler++;
        }

    foreach (
    $xPath->query('//h4/a') as $element) {

        
    $hreft $element->getAttribute('href');
        
    $title str_replace('""','"',$element->nodeValue);

        If (
    $zaehler <= 13) {
            echo 
    "<li><a href=\"".htmlspecialchars($hreftENT_QUOTES)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTES)."</a></li>\n";
            
    $zaehler++;
        }
    }
    ?>
    </ul>
    </div>
    </body>
    </html>
    Habe es unter Localhost und im Web getestet, kein Unterschied. Denke das hängt bei Dir irgendwie damit zusammen, dass Du die Dateien nicht per FTP hochladest, sondern die da irgendwie hochkopierst oder wie war das mit dem Hochladen? Doch dann müsste die ja auch bei Dir zumindest unter Localhost zumindest erst einmal richtig ausgeben werden und sollte nur anschließend im Web Glyphen oder Fragezeichen liefern, falls etwas nicht stimmt.
    Zuletzt geändert von Melewo; 11.05.2013, 18:49.

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Das hier

    wird ausgegeben:
    �vorni�

    Einen Kommentar schreiben:


  • mephisto111
    antwortet
    Debugging

    Hallo newbie1955,

    was wird ausgegeben, wenn oben im Code die Zeile
    PHP-Code:
    echo 'Švornić'
    ergaenzt wird? Wenn hier schon ein Fehler auftritt, koennte ein falsch eingestellter Browserzeichensatz (z.B. durch eine falsche oder fehlende Header-Einstellung) die Ursache des Problems sein.

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Der Link

    .. zu der entsprechenden Seite:

    Vijesti - Naslovnica / Novi list

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    utf_8

    Ja, es war der etwas hilflose Versuch, meine eigene Ausgabe noch mal ausdrücklich in utf8 zu codieren, da ich auf einer anderen Unter-Seite ähnliche Probleme hatte, dass meine eigene Seite trotz entsprechender header-Deklarierung nicht utf8 ausgab. Aber ob mit oder ohne encode oder decode oder ganz ohne : es werden Zeichen nicht richtig ausgegeben.
    Zuletzt geändert von newbie1955; 10.05.2013, 17:55.

    Einen Kommentar schreiben:


  • mephisto111
    antwortet
    Zeichenproblem

    Hallo newbie1955,

    zwei Punkte:

    1. Wenn die Ursprungsseite UTF-8-kodiert ist, weshalb dann die beiden Zeilen mit "utf8_encode"?
    2. Wenn man auf die erste Beispielzeile ganz unten "utf8_decode" anwendet, lassen sich zwei der Zeichen nicht konvertieren und man bekommt die Fragezeichen (wie in der zweiten Beispielzeile angegeben).

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Zeichenproblem, die soundsovielte

    Hallo, habe bei einer ausländischen Zeitung erneut ein utf-8-Problem. Trotz utf_8 decodes bekomme ich einige Zeichen nur als Fragezeichen dargestellt. Die Ursprungsseite gibt als charset utf-8 an.



    PHP-Code:
      <div class="border">
        
     <a href="http://www.novilist.hr/Vijesti" target='_blank'> 
    <img src="logos/novi.jpg" alt="Novilist" style=" margin:3px 0px 0px -45px ; padding:0px;"/></a>
    <ul>

    <?php
    $data 
    file_get_contents('http://www.novilist.hr/Vijesti');
    $doc = new DOMDocument();

     
    $doc->loadHTML($data); 


    $xPath = new DOMXPath($doc);

    $zaehler 0;
    foreach (
    $xPath->query('//h2') as $element
    {    


       
         
    $hreft $element->getAttribute('href');
         
    $class $element->getAttribute('class');
         
    $title str_replace('""','"',$element->nodeValue); 


    $hreft utf8_encode($hreft);
    $title utf8_encode($title);


    echo 
    "<li><a href=\"".htmlspecialchars($hreftENT_QUOTES)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTES)."</a></li>\n"
                     
    $zaehler++;

        }  

    foreach (
    $xPath->query('//h4/a') as $element
    {    
      

         
    $hreft $element->getAttribute('href');
         
    $class $element->getAttribute('class');
         
    $title str_replace('""','"',$element->nodeValue); 


    If (
    $zaehler <= 13)
        {

    $hreft utf8_encode($hreft);
    $title utf8_encode($title);

    echo 
    "<li><a href=\"".htmlspecialchars($hreftENT_QUOTES)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTES)."</a></li>\n"
                     
    $zaehler++;


               }
        }  

    ?>
    </ul> 

      
        </div>
    Es müsste herauskommen:

    IZBORI 2013 Švornić na Korzu otkrio spomenik za izgubljenih 40.000 stanovnika i 30.000 radnih mjesta
    Es kommt aber heraus:
    IZBORI 2013 ?vorni? na Korzu otkrio spomenik za izgubljenih 40.000 stanovnika i 30.000 radnih mjesta
    Dank und Gruß newbie1955
    Zuletzt geändert von newbie1955; 10.05.2013, 15:40.

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Die Zeile kann raus, wenn Du die nicht benötigst. Hatte einige Feeds aus unterschiedlichen Quellen und einer enthielt dann:

    Code:
    <content:encoded>Text...</content:encoded>
    Doch wenn Du so etwas nicht bei hast, dann kannst Du die Zeile entfernen.

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Nochmal

    vielen Dank - funktioniert ganz hervorragend, habe mir ein paar Angaben rausgenommen, die ich nicht ausgebe wie description oder Datum und werde noch das ul/li für die Ausgaben hinzufügen, und mir eine function draus bauen, aber sonst alles bestens. Wozu das str_replace mit "content:encoded", "content" nötig ist, weiß ich noch nicht, aber solange es funktioniert.....
    Und dann werde ich noch mal rumprobieren, ob es an den berühmten bösen feeds utf_8-Probleme gibt....

    Danke, vielleicht werde ich jetzt den ganzen Magpie Parser rausschmeißen. Du hast was gut....

    Gruß
    newbie1955
    Zuletzt geändert von newbie1955; 01.05.2013, 20:52.

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Danke

    für die Mühe! Werde es gleich nachher ausprobieren. Im Moment spinnt der Atom-Feed der Tagesschau allerdings ohnehin alle paar Minuten, ist völlig leer usw. Aber die haben ja gerade einen Relaunch hinter sich, da wollen wir mal nicht so streng sein...

    Gruß
    newbie1955

    Einen Kommentar schreiben:

Lädt...
X