web-dev-qa-db-ja.com

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

簡単な質問:基本的にはシステムトレイにあるお気に入りだけの小さなアプリを作成して、同じ場所からよく使用するサイト/フォルダー/ファイルを開けるようにしました。既知のファイルタイプのシステムからデフォルトアイコンを取得することはそれほど複雑ではありませんが、Webサイトからファビコンを取得する方法がわかりません。 (SOでは、たとえばアドレスバーに灰色のスタックアイコンがあります)

誰が私がそれについてどうやって行くのか知っていますか?

92
Steven Evers

これにいくつかの方法で取り組む必要があります。

  1. ドメインのルートでfavicon.icoを探します

    www.domain.com/favicon.ico

  2. <link>属性を持つrel="shortcut icon"タグを探します

    <link rel="shortcut icon" href="/favicon.ico" />

  3. <link>属性を持つrel="icon"タグを探します

    <link rel="icon" href="/favicon.png" />

後者の2つは通常、より高品質の画像を生成します。


すべてのベースをカバーするために、これらのデバイスは通常ブラウザが必要とするよりも大きいアイコンをデバイス上に持っているため、高品質の画像を生成するデバイス固有のアイコンファイルがあります。

<link rel="Apple-touch-icon" href="images/touch.png" />

<link rel="Apple-touch-icon-precomposed" href="images/touch.png" />


そして、アイコンが何であるかを気にせずにアイコンをダウンロードするには、 http://www.google.com/s2/favicons のようなユーティリティを使用できます。

var client = new System.Net.WebClient();

client.DownloadFile(
    @"http://www.google.com/s2/favicons?domain=stackoverflow.com",
    "stackoverflow.com.ico");

お役に立てば幸いです!

196
hunter

ここに2つのオプションがあり、100以上のURLをテストし、それぞれのオプションで異なる結果が得られました。このソリューションはc#ではありませんが、c#は必要ない場合があることに注意してください。

<img height="16" width="16" src='http://grabicon.com/edocuments.co.uk' />

<img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.edocuments.co.uk' />
10
Blowsie
9
raminjacobson

最初に探すのは、サイトルートの/favicon.icoです。 WebClient.DownloadFile()のような何かがうまくいくはずです。ただし、メタデータでアイコンを設定することもできます-SOの場合:

<link rel="shortcut icon"
   href="http://sstatic.net/stackoverflow/img/favicon.ico">

また、別のアイコンが利用できる場合があることに注意してください。 「タッチ」はより大きく、より高い解像度になる傾向があります。例:

<link rel="Apple-touch-icon"
   href="http://sstatic.net/stackoverflow/img/Apple-touch-icon.png">

そのため、HTML Agility PackまたはXmlDocument(xhtmlの場合)でそれを解析し、WebClient.DownloadFile()を使用します

これをアジリティパックから取得するために使用したコードを次に示します。

var favicon = "/favicon.ico";
var el=root.SelectSingleNode("/html/head/link[@rel='shortcut icon' and @href]");
if (el != null) favicon = el.Attributes["href"].Value;

アイコンはあなたのものではなく、彼らのものであることに注意してください。

6
Marc Gravell

各ページに必要なリクエストの数を最小限に抑えることをお勧めします。したがって、複数のアイコンが必要な場合、yandexは1つのクエリでファビコンのスプライトを実行できます。以下に例を示します http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/

4
doroshko

Yoは、WebサイトのHTMLからファビコンURLを取得できます。

Faviconタグは次のとおりです。

<link rel="icon" type="image/png" href="/someimage.png" />

ここでは正規表現を使用する必要があります。タグが見つからない場合は、サイトのルートディレクトリで「favicon.ico」を探します。何も見つからない場合、サイトにはファビコンがありません。

3
OOO ''MMM''

あなたはそれを行うことができますプログラミングなし。 Webサイトを開き、右クリックして"ソースの表示"を選択して、そのサイトのHTMLコードを開きます。次に、テキストエディタで"favicon"を検索します。次のように表示されます。

<link rel="icon" href='/SOMERELATIVEPATH/favicon.ico' type="image/x-icon" />

hrefの文字列を取得し、それをWebサイトのベースURLに追加します("http://WEBSITE/"と仮定します)。

http://WEBSITE/SOMERELATIVEPATH/favicon.ico

これは、ファビコンへの絶対パスです。この方法で見つからなかった場合は、ルートにある場合もあります。この場合、URLはhttp://WEBSITE/favicon.icoです。

決定したURLを取得して、次のコードに挿入します。

<html>
  <head>
   <title>Capture Favicon</title>   
  </head>
  <body>
    <a href='http://WEBSITE/SOMERELATIVEPATH/favicon.ico' alt="Favicon"/>Favicon</a> 
  </body>
</html>

このHTMLコードをローカル(デスクトップなど)にGetFavicon.htmlとして保存し、ダブルクリックして開きます。 Faviconという名前のリンクのみが表示されます。このリンクを右クリックして、"Save target as ..."を選択して、ファビコンをローカルPCに保存します-これで完了です!

2
Matt
        HttpWebRequest w = (HttpWebRequest)HttpWebRequest.Create("http://stackoverflow.com/favicon.ico");

        w.AllowAutoRedirect = true;

        HttpWebResponse r = (HttpWebResponse)w.GetResponse();

        System.Drawing.Image ico;
        using (Stream s = r.GetResponseStream())
        {
            ico = System.Drawing.Image.FromStream(s);
        }

        ico.Save("favicon.ico");
2
pmcilreavy

これは遅い答えですが、完全を期すために、すべてのファビコンを取得することの90%近くに達することはかなり困難です。

しばらく前に、私はWordPressプラグインを作成しました。 http://wordpress.org/extend/plugins/wp-favicons/ これは、近づこうとしています。

a。 Googleファビコン、getfaviconsなどのファビコンリポジトリを調べることから始めます。

b。それらのどれもアイコンを返さない場合(私は彼らが返すデフォルトのアイコンと照合することでこれをチェックします)私は自分でアイコンを取得しようとすることから始めます

c。これには、ページのトラバースが含まれますが、自動リダイレクトなしでリダイレクトをチェックし、404のトラバースも行います。これは、404にもアイコンが存在する可能性があるためです。最終的には、HTMLヘッダー内のリダイレクトとJavaScriptリダイレクトも解析して、100%に近づく必要があることを意味します。

d。その後、物理イメージファイルでいくつかの検査を行います。これは、一部のサーバー(300.000以上をテスト済み)でも、誤ったMIMEタイプなどでファイルが返されることがあるためです。

コードはまだ完璧ではありません。詳細が狂っていると、多くの奇妙な状況が見つかります:間違ったパス(img/favicon.icoでimgがルートにない)、html出力のヘッダーの重複、異なるサーバー応答頭や体などから...

取得部分のコアは次のとおりです。 http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php 応答の検証は実際に行う必要があることに注意してください(イメージのファイルタイプ、MIMEなどを確認してください)。

1
edelwater

'SHGetFileInfo'(署名については 'www.pinvoke.net'を確認)を使用すると、ファイル/フォルダー/シェルアイテムを扱っているかのように、小さいアイコンまたは大きいアイコンを取得できることがわかりました。

イェンス;)

1
Jens

http://realfavicongenerator.net/favicon_checker?site=http://stackoverflow.com は、どのサイズのファビコンが存在するかを示すファビコン分析を提供します。ページ情報を処理して、どれが最高品質のファビコンであるかを確認し、そのファイル名をURLに追加して取得できます。

0
robotik

Jqueryの使用

var favicon = $("link[rel='shortcut icon']").attr("href") ||
              $("link[rel='icon']").attr("href") || "";
0
V P

Getfv.co を使用できます。

ファビコンを取得するには、次の場所でホットリンクできます... http://g.etfv.co/ [URL]

このページの例: http://g.etfv.co/https://stackoverflow.com/questions/5119041/how-can-i-get-a-web-sites-favicon

コンテンツをダウンロードして行きましょう!

編集:

Getfv.coとfvicon.comは死んでいます。必要に応じて、非無料の代替手段を見つけました: grabicon.com

0
aloisdg