今日、とても泥臭いソースを書きましたのでご報告申し上げます。

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返ってくるみたい)

Comments


Option