簡単な質問:基本的にお気に入りの小さなアプリをシステムトレイに置いて、よく使用するサイト/フォルダー/ファイルを同じ場所から開くことができるようにしています。既知のファイルタイプのシステムからデフォルトのアイコンを取得することはそれほど複雑ではありませんが、ウェブサイトからファビコンを取得する方法がわかりません。(たとえば、SOはアドレスバーに灰色からオレンジのスタックアイコンを持っています)
誰か私がそれについてどうやって行くのか知っていますか?
簡単な質問:基本的にお気に入りの小さなアプリをシステムトレイに置いて、よく使用するサイト/フォルダー/ファイルを同じ場所から開くことができるようにしています。既知のファイルタイプのシステムからデフォルトのアイコンを取得することはそれほど複雑ではありませんが、ウェブサイトからファビコンを取得する方法がわかりません。(たとえば、SOはアドレスバーに灰色からオレンジのスタックアイコンを持っています)
誰か私がそれについてどうやって行くのか知っていますか?
回答:
これにはいくつかの方法で取り組む必要があります。
favicon.ico
ドメインのルートでを探します
www.domain.com/favicon.ico
属性を持つ<link>
タグを探しrel="shortcut icon"
ます
<link rel="shortcut icon" href="https://stackoverflow.com/favicon.ico" />
属性を持つ<link>
タグを探しrel="icon"
ます
<link rel="icon" href="https://stackoverflow.com/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");
google.com/s2/favicons
16x16のアイコンです。ひどいアイコンです。大きなアイコンをどこで撮るか知っていますか?
2020年更新
2020年以降に利用できる3つのサービスは次のとおりです
<img height="16" width="16" src='https://icons.duckduckgo.com/ip3/www.google.com.ico' />
<img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.google.com' />
<img height="16" width="16" src='https://api.statvoo.com/favicon/?url=google.com' />
Google S2 Converterを使用できます。
http://www.google.com/s2/favicons?domain=google.com
出典:http : //www.labnol.org/internet/get-favicon-image-of-websites-with-google/4404/
最初に探すのは、サイトルートの/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;
アイコンはあなたのものではなく、彼らのものであることに注意してください。
各ページに必要なリクエストの数を最小限に抑えることをお勧めします。したがって、複数のアイコンが必要な場合、yandexは1つのクエリでファビコンのスプライトを実行できます。ここに例があります http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/
YoはWebサイトのHTMLからファビコンURLを取得できます。
以下は、faviconタグです。
<link rel="icon" type="image/png" href="/someimage.png" />
ここでは正規表現を使用する必要があります。タグが見つからない場合は、サイトのルートディレクトリで「favicon.ico」を探します。何も見つからない場合、サイトにはファビコンがありません。
プログラミングせずにそれを行うことができます。Webサイトを開き、右クリックして[ ソースの表示 ]を選択し、そのサイトのHTMLコードを開きます。次に、テキストエディターで「ファビコン」を検索します。次のようなものが表示されます。
<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という名前のリンクのみが表示されます。このリンクを右クリックし、「対象をファイルに保存...」を選択して、ファビコンをローカルPCに保存します。これで完了です。
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");
これは遅い答えですが、完全を期すために、すべてのファビコンを取得することの90%にさえ近づけることはかなり困難です。
:前ながら、私はWordPressのプラグインを書いたhttp://wordpress.org/extend/plugins/wp-favicons/試みが近づくために。
a。それはグーグルファビコン、ゲットファビコンなどのファビコンリポジトリを見ることから始まります...
b。それらのどれもアイコンを返さない場合(私は、それらが返すデフォルトのアイコンと照合してこれを確認します)私は自分でアイコンを取得しようとすることから始めます
c。これには、ページのトラバースが含まれますが、自動リダイレクトなしでリダイレクトをチェックすることや、404をトラバースすることも含まれます。これは、404にもアイコンが存在する可能性があるためです。結局のところ、100%に近づくには、htmlヘッダーのリダイレクトとJavaScriptリダイレクトも解析する必要があるということです。
d。その後、物理イメージファイルの検査を行います。これは、一部のサーバー(300.000以上をテストしたもの)でも、誤ったMIMEタイプなどが返される場合があるためです。
詳細が狂っているので、コードはまだ完璧ではありません。多くの奇妙な状況が見つかります。人々は誤ってコード化されたパス(img / favicon.ico、imgがルートにない)、html出力のヘッダーの重複、異なるサーバー応答頭や体などから...
フェッチ部分のコアはここにあります:http : //plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.phpリバースエンジニアリングすることができますが、応答を検証する必要があることに注意してください実際に行われます(画像のファイルタイプ、mimeなどを確認します)。
http://realfavicongenerator.net/favicon_checker?site=http://stackoverflow.comは、どのファビコンがどのサイズで存在するかを示すファビコン分析を提供します。ページ情報を処理して、最高のファビコンがどれかを確認し、そのファイル名をURLに追加して取得できます。
Getfv.coを使用できます。
このページの例:http : //g.etfv.co/https : //stackoverflow.com/questions/5119041/how-can-i-get-a-web-sites-favicon
コンテンツをダウンロードして行きましょう!
編集:
Getfv.coとfvicon.comは死んでいるように見えます。必要に応じて、無料ではない代替手段を見つけました:grabicon.com。