web-dev-qa-db-ja.com

Webサイトのファビコンを取得するにはどうすればよいですか?

自分のウェブサイトに注目のウェブサイトを掲載したいのですが、ファビコンを尊重して使用するのは素晴らしいことだと思いました。 JSPまたはXSLTの任意のURLのドメインから取得するにはどうすればよいですか? PHPまたはJavaScriptを起動できますが、XSLTが推奨される方法です。

22
mobibob

Webサイトのファビコンを取得するには、注目の各WebサイトのインデックスHTMLをロードし、次のいずれかを確認する必要があります。

HTML:

_<link rel="icon" type="image/vnd.Microsoft.icon" href="http://example.com/image.ico">
<link rel="icon" type="image/png" href="http://example.com/image.png">
<link rel="icon" type="image/gif" href="http://example.com/image.gif">
_

XHTML:

_<link rel="icon" type="image/vnd.Microsoft.icon" href="/somepath/image.ico" />
<link rel="icon" type="image/png" href="/somepath/image.png" />
<link rel="icon" type="image/gif" href="/somepath/image.gif" />
_

Internet Explorerでは、少し異なる形式を使用する場合があります。

_<link rel="SHORTCUT ICON" href="http://www.example.com/myicon.ico" />
_

また、ほとんどのWebブラウザーはファビコンを取得するためにHTMLリンクを必要としないため、上記のリンク参照が見つからない場合は、Webサイトのドキュメントルートで_favicon.ico_も確認する必要があります。

PHPでは、 file_get_contents($url) を使用して、WebページのHTMLコンテンツを簡単に取得できます。

_$url = 'http://www.exmaple.com';
$output = file_get_contents($url);
_
26
Daniel Vassallo

あなたも単にこれを行うことができます

http://s2.googleusercontent.com/s2/favicons?domain_url=http://domain.com

67
nLL

これが私の試みです。さまざまな戦略を使用して、考えられる多くのケースを回避します。

<?
/*
  nws-favicon : Get site's favicon using various strategies

  This script is part of NWS
  https://github.com/xaccrocheur/nws/

*/


function CheckImageExists($imgUrl) {
    if (@GetImageSize($imgUrl)) {
        return true;
    } else {
        return false;
    };
};

function getFavicon ($url) {

$fallback_favicon = "/var/www/favicon.ico";    
// $fallback_favicon = "http://stackoverflow.com/favicon.ico";


    $dom = new DOMDocument();
    @$dom->loadHTML($url);
    $links = $dom->getElementsByTagName('link');
    $l = $links->length;
    $favicon = "/favicon.ico";
    for( $i=0; $i<$l; $i++) {
        $item = $links->item($i);
        if( strcasecmp($item->getAttribute("rel"),"shortcut icon") === 0) {
            $favicon = $item->getAttribute("href");
            break;
        }
    }

    $u = parse_url($url);

    $subs = explode( '.', $u['Host']);
    $domain = $subs[count($subs) -2].'.'.$subs[count($subs) -1];

    $file = "http://".$domain."/favicon.ico";
    $file_headers = @get_headers($file);

    if($file_headers[0] == 'HTTP/1.1 404 Not Found' || $file_headers[0] == 'HTTP/1.1 404 NOT FOUND' || $file_headers[0] == 'HTTP/1.1 301 Moved Permanently') {

        $fileContent = @file_get_contents("http://".$domain);

        $dom = @DOMDocument::loadHTML($fileContent);
        $xpath = new DOMXpath($dom);

        $elements = $xpath->query("head/link//@href");

        $hrefs = array();

        foreach ($elements as $link) {
            $hrefs[] = $link->value;
        }

        $found_favicon = array();
        foreach ( $hrefs as $key => $value ) {
            if( substr_count($value, 'favicon.ico') > 0 ) {
                $found_favicon[] = $value;
                $icon_key = $key;
            }
        }

        $found_http = array();
        foreach ( $found_favicon as $key => $value ) {
            if( substr_count($value, 'http') > 0 ) {
                $found_http[] = $value;
                $favicon = $hrefs[$icon_key];
                $method = "xpath";
            } else {
                $favicon = $domain.$hrefs[$icon_key];
                if (substr($favicon, 0, 4) != 'http') {
                    $favicon = 'http://' . $favicon;
                    $method = "xpath+http";
                }
            }
        }

        if (isset($favicon)) {
            if (!CheckImageExists($favicon)) {
                $favicon = $fallback_favicon;
                $method = "fallback";
            }
        } else {
            $favicon = $fallback_favicon;
            $method = "fallback";
        }

    } else {
        $favicon = $file;
        $method = "classic";

        if (!CheckImageExists($file)) {
            $favicon = $fallback_favicon;
            $method = "fallback";
        }

    }
    return $favicon;
}

?>
1
yPhil

Firefoxの場合は https://addons.mozilla.org/en-US/firefox/addon/httpfox/ を使用できます。 Webサイトをロードし、F10を押します> ...>「独自のウィンドウでHttpFoxを開く」、「image/x-icon」を探します。右側の列はURLです。

0
Rublacava

ページのソースコードを開き([ページのソースを表示]を右クリック)、下記の行を見つけて、images/favicon.pngリンクをクリックします。

<link rel="icon" href="images/favicon.png" type="image/png" sizes="16x16">
0
Prem Sanil
  • IEを使用して、サイトをブックマーク

  • ショートカットをブックマークメニューからデスクトップにドラッグします

  • (実際の)テキストエディターを使用して、結果の.URLを開きます。

  • ファイルにはIconFileの行があり、これはWebサーバー上のファビコンファイルを指します。

  • ファイルを参照してください... viola!

0
user11302523