Bagaimana cara mendapatkan favicon situs web?

115

Pertanyaan yang cukup sederhana: Saya telah membuat aplikasi kecil yang pada dasarnya hanya favorit yang ada di baki sistem saya sehingga saya dapat membuka situs / folder / file yang sering digunakan dari tempat yang sama. Mendapatkan ikon default dari sistem saya untuk jenis file yang diketahui tidak terlalu rumit, tetapi saya tidak tahu cara mendapatkan favicon dari situs web. (SO memiliki ikon tumpukan abu-abu-> oranye di bilah alamat misalnya)

Adakah yang tahu bagaimana saya bisa melakukan itu?

Steven Evers
sumber
1
Saya tidak yakin seberapa mudah (atau mungkin) mengotomatiskan pemuatan / penguraian halaman ini, tetapi tampaknya memiliki segalanya: Favicon-Checker . Paling tidak, Anda bisa menggunakannya sebagai referensi / cek.
Kevin Fegan
Anda bisa menggunakan Statvoo Favicon API , itu akan sangat cepat dan tidak menyakitkan.
AO_
Favicon Kit memungkinkan Anda mendapatkan & menyematkan favicon seperti gambar biasa, dalam ukuran yang jauh lebih besar dari 16 piksel , jika tersedia. (Pengungkapan: Saya adalah penulisnya)
AndreasPizsa

Jawaban:

234

Anda akan ingin menangani ini dengan beberapa cara:

  1. Cari favicon.icodi root domain

    www.domain.com/favicon.ico

  2. Cari <link>tag dengan rel="shortcut icon"atribut

    <link rel="shortcut icon" href="https://stackoverflow.com/favicon.ico" />

  3. Cari <link>tag dengan rel="icon"atribut

    <link rel="icon" href="https://stackoverflow.com/favicon.png" />

Dua yang terakhir biasanya akan menghasilkan gambar berkualitas lebih tinggi.


Hanya untuk menutupi semua basis, ada file ikon khusus perangkat yang mungkin menghasilkan gambar berkualitas lebih tinggi karena perangkat ini biasanya memiliki ikon yang lebih besar pada perangkat daripada yang dibutuhkan browser:

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

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


Dan untuk mengunduh ikon tanpa peduli apa ikonnya, Anda dapat menggunakan utilitas seperti http://www.google.com/s2/favicons yang akan melakukan semua pekerjaan berat:

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

client.DownloadFile(
    @"http://www.google.com/s2/favicons?domain=stackoverflow.com",
    "stackoverflow.com.ico");
pemburu
sumber
1
apakah GetFavIcon masih berfungsi? ketika saya menjalankan contoh Anda, saya mendapatkan kesalahan 400
Julien
17
sepertinya Google memiliki layanan serupa sekarang: google.com/s2/favicons?domain_url=stackoverflow.com
pemburu
20
jika ada yang menginginkan alternatif untuk Google, DuckDuckGo memiliki solusi lain: icons.duckduckgo.com/ip2/www.stackoverflow.com.ico
Jose Serodio
1
@ Pemburu google.com/s2/faviconsitu adalah ikon dengan ukuran 16x16 itu adalah ikon yang mengerikan, tahukah Anda di mana harus mengambil ikon yang lebih besar?
nideba
1
@JoseSerodio - Ya ... itu adalah hal pertama yang saya coba, tetapi untuk domain yang saya periksa, saya baru saja mendapat gambar "redup / tumpul" dari panah menunjuk kanan (lebih besar dari) di dalam lingkaran-di dalam kotak . Ini terlihat seperti ini , tapi saya memeriksa untuk memastikan bahwa saya telah mengeja "domain.com.ico" dengan benar. Sekarang, dengan keajaiban internet, ini bekerja dengan benar ... go figure =) jadi, Nevermind.
Kevin Fegan
19

Diperbarui 2020

Berikut tiga layanan yang dapat Anda gunakan pada tahun 2020 dan seterusnya

<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' />
Blowsie
sumber
4
grabicon.com sekarang menjadi layanan berbayar mulai dari $ 9 / bln
janot
1
Satu lagi: favicon.allesedv.com <img width = "144" height = "144" src = "// f3.allesedv.com/144/www.stackoverflow.com" />
Martin Seitl
Layanan ini tidak lagi berfungsi, Anda dapat menggunakan api.statvoo.com/favicon/?url=stackoverflow.com . Saya telah menggunakannya selama beberapa tahun dan tidak pernah mengecewakan saya.
AO_
Terima kasih @AO_, saya benar-benar menggunakan duckduckgo hari ini, saya telah memperbarui jawaban saya
Blowsie
1
@saintvixalien Saya yakin ini baru-baru ini berubah untuk orang-orang yang tidak menginisialisasi dengan kunci API, karena server semakin ditumbuk;) Saya menggunakan layanan utama dengan kunci API dan mendapatkan tanggapan langsung tanpa pembungkusnya. Saya melakukan pengujian tanpa kunci API dan dialihkan ke layanan Google seperti yang Anda katakan ..
AO_
6

Hal pertama yang harus dicari adalah /favicon.ico di root situs; sesuatu seperti WebClient.DownloadFile () seharusnya berfungsi dengan baik. Namun, Anda juga dapat mengatur ikon dalam metadata - untuk SO ini adalah:

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

dan perhatikan bahwa ikon alternatif mungkin tersedia; resolusi yang "menyentuh" ​​cenderung lebih besar dan lebih tinggi, misalnya:

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

jadi Anda akan menguraikannya di HTML Agility Pack atau XmlDocument (if xhtml) dan menggunakan WebClient.DownloadFile ()

Berikut beberapa kode yang saya gunakan untuk mendapatkan ini melalui paket agility:

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

Perhatikan bahwa ikon itu milik mereka, bukan milik Anda.

Marc Gravell
sumber
1
Terima kasih Marc. Saya menghargai teladannya. Menulis gambar, saya tidak bermaksud untuk memodifikasinya atau menggunakannya untuk hal lain selain ikon di menu konteks di samping label pintasan.
Steven Evers
3

Anda bisa mendapatkan URL favicon dari HTML situs web.

Ini adalah tag favicon:

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

Anda harus menggunakan ekspresi reguler di sini. Jika tidak ada tag yang ditemukan, cari "favicon.ico" di direktori root situs. Jika tidak ditemukan, situs tersebut tidak memiliki favicon.

OOO '' MMM ''
sumber
2

Anda dapat melakukannya tanpa pemrograman . Cukup buka situs web, klik kanan dan pilih "lihat sumber" untuk membuka kode HTML situs itu. Kemudian di editor teks, cari "favicon" - ini akan mengarahkan Anda ke sesuatu yang tampak seperti

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

mengambil string hrefdan menambahkannya ke URL dasar situs web (anggap saja demikian "http://WEBSITE/"), sehingga terlihat seperti ini

http://WEBSITE/SOMERELATIVEPATH/favicon.ico

yang merupakan jalur mutlak menuju favicon. Jika Anda tidak menemukannya dengan cara ini, bisa juga di root dalam hal ini URL-nya http://WEBSITE/favicon.ico.

Ambil URL yang Anda tentukan dan masukkan ke dalam kode berikut:

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

Simpan kode HTML ini secara lokal (misalnya di desktop Anda) sebagai GetFavicon.htmldan kemudian klik dua kali di atasnya untuk membukanya. Ini hanya akan menampilkan tautan bernama Favicon . Klik kanan pada tautan ini dan pilih "Simpan target sebagai ..." untuk menyimpan Favicon di PC lokal Anda - dan selesai!

Matt
sumber
1
        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");
pmcilreavy
sumber
1

Ini adalah jawaban yang terlambat, tetapi untuk kelengkapan: cukup sulit untuk mendekati 90% dari mengambil semua favicon.

Beberapa waktu lalu saya menulis plugin WordPress: http://wordpress.org/extend/plugins/wp-favicons/ yang mencoba mendekat.

Sebuah. itu dimulai dengan melihat repositori favicon seperti google favicons, getfavicons dll ...

b. jika tidak ada dari mereka yang mengembalikan ikon (saya memeriksa ini dengan mencocokkan dengan ikon default yang mereka kembalikan) saya mulai dengan mencoba mendapatkan ikon itu sendiri

c. ini melibatkan melintasi halaman tetapi juga memeriksa pengalihan dengan NO autoredirect serta melintasi 404 karena juga pada 404 ikon mungkin ada. Pada akhirnya, itu berarti Anda harus mengurai juga pengalihan di header html serta pengalihan javascript agar mendekati 100%

d. setelah itu saya melakukan beberapa pemeriksaan pada file gambar fisik, karena kadang-kadang juga pada beberapa server (saya menguji 300.000+) file dikembalikan dengan jenis mime yang salah dll.

Kode masih belum sempurna karena dalam detailnya menjadi gila, Anda akan menemukan banyak situasi aneh: orang memiliki jalur kode yang salah (img / favicon.ico di mana img TIDAK di root), duplikat header dalam output html, respons server berbeda dari kepala dan tubuh dll ...

inti dari bagian pengambilan ada di sini: http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php sehingga Anda dapat merekayasa baliknya tetapi perlu diketahui bahwa memvalidasi respons harus benar-benar selesai (memeriksa jenis file gambar, pantomim dll ..)

edelwater.dll
sumber
1

Saya telah menemukan bahwa 'SHGetFileInfo' (Periksa 'www.pinvoke.net' untuk tanda tangannya) memungkinkan Anda mengambil ikon kecil atau besar, sama seperti jika Anda berurusan dengan file / folder / item Shell.

Jens;)

Jens
sumber
0

Anda dapat menggunakan Getfv.co :

Untuk mengambil favicon, Anda dapat melakukan hotlink di ... http://g.etfv.co/[URL]

Contoh untuk halaman ini: http://g.etfv.co//programming/5119041/how-can-i-get-a-web-sites-favicon

Unduh konten dan ayo pergi!

Edit:

Getfv.co dan fvicon.com tampak mati. Jika Anda ingin, saya menemukan alternatif yang tidak gratis: grabicon.com .

aloisdg pindah ke codidact.com
sumber
1
Tautan mati, Kesalahan: Tidak Ditemukan
tttony
@tty Memang. fvicon.com juga terlihat mati. Saya akan mengedit komentar saya dengan konten berbayar. jika Anda menemukan tautan gratis yang berfungsi, silakan bagikan!
aloisdg pindah ke codidact.com
0

Menggunakan jquery

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

Pada tahun 2020, menggunakan layanan duckduckgo.com dari CLI

curl -v https://icons.duckduckgo.com/ip2/<website>.ico > favicon.ico

Contoh

curl -v https://icons.duckduckgo.com/ip2/www.cdc.gov.ico > favicon.ico
Alex Nolasco
sumber