今回はサイトアイコン(ファビコン)を取得します。
ファビコンの取得方法あれこれ
「ファビコン(favicon)」は「Favorite icon」(お気に入りアイコン)の略です。
元々は Microsoft Internet Explorer の「お気に入り」のタイトルのところに小さいアイコンを表示させるために用意されたもののようです。
IEだけの機能だったのが正式に「サイトアイコン」として設定できるようになっています。
「ファビコンのサイズ」のことや、「指定するlinkタグ」などについては、こちらのサイトさんで分かり易く書かれていました。
HTMLソースから <link rel=”shortcut icon”> を探して、href の内容を見ることでファビコンのURLは取得できそうです。
if (preg_match('/.*<link\s+(.*rel\s*=\s*"shortcut icon"\s*.*?)>/i', $html, $m)) { $param = $m[1]; if (preg_match('/.*href\s*=\s*"(.*?)".*/i', $param, $m)) { echo '1='.$m[1].'<br />'; } }
サイトによって「/favicon.ico」(ルート指定)、「./favicon.ico」(相対指定)、「https://popozure.info/favicon.ico」(URL指定)といった感じで、色々なパターンがありそうです。
あちこちのソースを見てみましたが、ico形式以外にもPNGやJPEGのことも多いようです。
「rel=”shortcut icon”」もIE向けの指定で「rel=”icon”」が標準なようです。
HTMLソースにはどこにも指定されていないのに「/favicon.ico」が存在していたり、ブラウザは指定されたアイコンだけでは無くて、色んなところに隠れているfaviconを探してきて表示しているようです。
そんなこんなで、やっぱりWeb APIを使ってしまうのがラクそうです。
まずはパラメータ用にURLからドメイン名を取得しておきます。
preg_match('{https?://(.+?)/}i', $url.'/',$m); $domain_url = $m[0]; $domain = $m[1];
こちらのサイトさんを参考に試してみたいと思います。
Googleのファビコン取得API
非公開APIではあるようなのですが、海外含めて古くから広く使われているようです。
「domain」にドメイン名を指定するか、「domain_url」にドメインのURLを指定します。
<img src="https://www.google.com/s2/favicons?domain=popozure.info">
↓
<img src="https://www.google.com/s2/favicons?domain_url=https%3A%2F%2Fpopozure.info">
↓
元の画像のサイズに関わらず、16×16で返してくれるようです。
「http://」を付けない「domain」と、「http://」から記述する「domain_url」がありますが、どちらを使っても同じ動きのような気がします。
記事URLを入れても正常に取得できるようですので、もしかしたら仕様変更されたのかも知れません。
<img src="https://www.google.com/s2/favicons?domain_url=https%3A%2F%2Fpopozure.info%2F20150723%2F7753">
↓
ファビコンが設定されていないサイト/取得できないサイトは地球のアイコンが表示されます。
↓
はてなのファビコン取得API「Hatena::Favicon」
(URLが「https://」から始まるサイトでアイコンが上手く取得できない場合、「http://」と指定すると取得できる場合があるようです。)
こちらも非公開APIのようです。
「url」にURLを指定します。
<img src="https://favicon.hatena.ne.jp/?url=http%3A%2F%2Fpopozure.info">
↓
記事URLでも取得できました。
<img src="https://favicon.hatena.ne.jp/?url=http%3A%2F%2Fpopozure.info%2F20150723%2F7753">
↓
ファビコンが取得できない場合、ファイルの形のアイコンが表示されます。
↓
ファビコン変換サービス「FaviconConverter」
(サービス終了したようで、現在は取得できません。)
ファビコン取得に特化したWeb APIです。
↓
HTMLソース内にlinkタグが無くて、ドメイン+「/favicon.ico」のものは取得できていないようです。
ファビコンが取得できない場合、ファイルの形のアイコンが表示されます。
↓
取得できる/できないサイトはまちまち
サイトによってというか、ファビコンの指定方法とかが色々ありすぎて全パターンを網羅するのは難しいようです。
GoogleのAPIとか、Chromeと同じくらいファビコン取得できるとよいのですが。
コメント