Netscape Bookmark File auslesen

Templorials

Erfahrenes Mitglied
Hi..

Ich möchte gerne Favoriten von den Bookmark-Files der gängisten Browser auslesen. Diese verwenden ja alle den Netscape Bookmark File Typ.

Im Prinzip gehts nur darum das auszulesen:

Code:
<DT><A HREF="adresse">name</A>
<DD>beschreibung
<DT><A HREF="adresse">name</A>
<DD>beschreibung

und da ich mich leider mit den regulären Ausdrücken nicht so auskenne hab ich es noch net geschafft. Aber wenigstens ein Ansatz für adresse und name:

PHP:
preg_match_all('/<dt><a href="(.*?)".*?>(.*?)<\/a>/si',$f,$matches);

Aber mit der Beschreibung (die optional ist, also nicht bei jeden Link ist eine Beschreibung dabei) klappts net richtig..

Dürfte für die Meisten ein Kinderspiel sein oder?^^

Lg,Michael
 
Vom Prinzip her hast du es richtig, aber die Frage ist, wie du den Inhalt einliest (zeilenweise, komplett in einem Rutsch).

Ich würde den Inhalt mit file() einlesen und dann einfach nach den Link-Tags matchen:

PHP:
$content = file('bookmark.dat');

preg_match('/<a href="(.*?)".*?>(.*?)<\/a>/i', $content, $matches);

var_dump($matches);
 
Ich weiß jetzt nicht ob du mich oder ich dich nicht richtig verstanden habe.. es ging mir darum, das ich auch die dazugehörige Beschreibung (<DD>.....) haben möchte..
 
Doch, das geht:

PHP:
try{
    @$doc = DOMDocument::loadHTMLFile('bookmarks.html');

    $dl = $doc->getElementsByTagName('dl');
    
    for ($i = 0; $i < $dl->length; $i++) {
        echo $dl->item($i)->nodeValue . "<br/>";
    }

} catch (Exception $e) {
    echo $e->getMessage();
}
 
Hm, sry aber das geht nicht.. wenn ich das obn anwende bekomme ich alles zusammen
ausgegeben..

beim Beispiel:
Code:
<DL>
<DT><A HREF="adresse">name</A>
<DD>beschreibung
<DT><A HREF="adresse">name</A>
<DD>beschreibung
</DL>

->
Array ( [0] => name beschreibung name beschreibung )

Wenn ich statt dl nach dt suche dann bekomme ich die namen wieder richtig:
Array ( [0] => name [1] => name )

Aber soweit war ich schon am anfang^^ ich bräuchte noch die dazugehörige beschreibung
 
Es sollte auch nur ein Tipp sein, ich wusste nicht das du eine komplette Lösung von mir willst. Ich geb dir noch keine komplette Lösung wieder nur nen Tipp, versuch es mal selbst:

PHP:
try{
    @$doc = DOMDocument::loadHTMLFile('bookmarks.html');

    $dls = $doc->getElementsByTagName('dl');
    
    foreach($dls as $dl) {    
        $dt = $dl->getElementsByTagName('dt');
        echo $dt->item(0)->nodeValue."<br/>";
        $dd = $dl->getElementsByTagName('dd');
        echo $dd->item(0)->nodeValue;
        echo "<hr/>";
    }

} catch (Exception $e) {
    echo $e->getMessage();
}
 
Hi, sorry, wusste nicht das es als Tipp gemeint war..

Nur ich versuch da schon so lange rum.. :( ..

Bin jetzt soweit das es klappt wenn immer eine Beschreibung dabei ist..

Aber wenns zb so aussieht:
Code:
<DL>
<DT><A HREF="adresse">name1</A>
<DD>beschreibung1
<DT><A HREF="adresse">name2</A>
<DD>beschreibung2
<DT><A HREF="adresse">name3</A>
<DT><A HREF="adresse">name4</A>
<DD>beschreibung4
</DL>

Kommt das natürlich mit dem Item-Index durcheinander..
und da weiß ich nicht wie ich das machen könnte :/
 
PHP:
try{
    $bm = @DOMDocument::loadHTMLFile('bookmarks.html');
    $body = $bm->getElementsByTagName('body')->item(0);    

    $dls = $body->getElementsByTagName('dl');
    
    foreach($dls as $dl) {
        $nodes = $dl->childNodes;
        foreach($nodes as $node) {
            echo $node->tagName."&nbsp;";
            echo $node->nodeValue."<br/>";
        }
    }
    
} catch (Exception $e) {
    echo $e->getMessage();
}

Interessant könnten für dich die Eigenschaften DocumentNode->nextSibling bzw. ->prevSibling sein. Damit kannst du prüfen, ob nach der aktuellen Node eine bestimmte andere Node steht.
 
Zurück