今日、とても泥臭いソースを書きましたのでご報告申し上げます。
urlからfaviconのurlを取る。
% cat favicon.php
<?php
require_once 'PHP/Compat/Function/file_get_contents.php';
require_once 'XML/XML_HTMLSax.php';
function getFavicon($url)
{
    class FaviconHandler
    {
        var $favicon;
        function openHandler(&$parser, $name, $attrs)
        {
            if ($name  'link' and $attrs['rel']  ‘shortcut icon’) {
                $this->favicon = $attrs[‘href’];
            }
        }
        function closeHandler(&$parser, $data) {}
    }
    $handler = new FaviconHandler();
    $parser =& new XML_HTMLSax();
    $parser->set_object($handler);
    $parser->set_element_handler(‘openHandler’, ‘closeHandler’);
    $doc = file_get_contents($url);
    $parser->parse($doc);
    $favicon = $handler->favicon;
    if (!$favicon) {
        if ($url{strlen($url)-1} != ’/’) {
            $url .= ’/’;
        }
        $favicon =  $url . ‘favicon.ico’;
    }
    return $favicon;
}
echo getFavicon(‘http://del.icio.us/komagata’)
?>
% php favicon.php
http://del.icio.us/favicon.ico
ヘッダに書いてない場合は何故か無理矢理URLにfavicon.icoをくっ付けて返す。 誰かJavaScript版ください。さもないとまたおれが泥臭いの書くぞ!faviconの決めつけは良くないということで一応、あるかどうか探すように変更した。
$favicon = $link . 'favicon.ico';
if (!@file_get_contents($favicon)) {
    $favicon = false;
}
file_get_contents()はやっぱりイイ!ネット上のファイルの存在確認もわかる!(404だとfalse返ってくるみたい)









