🌐

【PHP】WEBサイトのFaviconを単一または一括で取得する

2025/01/25に公開

はじめに

Webサイトのファビコンを単一または一括で複数取得したいと思ったことありませんか?
本記事では、Googleの非公式APIを利用して、Webサイトのファビコンを取得する方法を紹介します。本記事では、ファビコンをサイトから取得する方法について一枚ずつ取得する方法と一括で複数取得する方法をご紹介します。

背景

余談にはなりますが、どうしてこの方法を模索したかというと、WEBブラウザに保存しているブックマークが多くなってきたのでNotionに移行しようとしました。その際に、Notionのページアイコンにファビコンを設定出来たら視覚的にとてもわかりやすいと思いました。そういった背景から一括で複数のファビコンを取得する方法を探していたのですが、なかなか見つからなかったので、今回実装して記事にしてみました。こちらのお話しの続きは後日別の記事で続きをお話ししたいと思います。

ファビコンとは

ファビコン(favicon)は「Favorite Icon」の略で、ブラウザのタブやブックマークバーに表示される小さな画像です。このアイコンはWebサイトを視覚的に認識しやすくする役割を持ちます。Zennの場合はこちらがファビコンになります。

alt text


方法1:【単一取得】オンラインツール

WebUtility.io Favicon Extractorを使用すると、1枚ずつファビコンを取得できます。
手順は以下の通りです

  1. WebUtility.ioを開く。
  2. 任意のWebサイトのURLを入力する。
  3. 表示されたファビコンを保存する。

方法2:【単一取得】Google API(非公式)

Googleの非公式APIを利用してファビコンを取得できます。
以下のURLにファビコンを取得したいサイトのドメインを指定し検索します。そうすると、別のURLへリダイレクトし、ブラウザ上にファビコンが表示されます。

http://www.google.com/s2/favicons?domain=ファビコンを取得したいサイトのURL

リダイレクトされたURLにパラメータを指定することで、サイズを変更可能です。たとえば、以下のURLでは 64x64 ピクセルのファビコンが取得できます。

https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=ファビコンを取得したいサイトのURL&size=64

方法3: 【一括取得】PHPスクリプトを用いる

複数のWebサイトのファビコンを一括で取得する方法を以下に説明します。

  1. CSVファイルを準備
    取得したいURLを以下のようにCSVファイル (url_list.csv) に記載する。保存先は、次の手順のPHPスクリプトと同じフォルダ配下にしてください。

    url_list.csv
    URL
    https://www.example1.com/
    https://www.example2.com/
    https://www.example3.com/
    
  2. PHPスクリプトを作成
    以下のコードを get_favicon.php として保存し、任意のフォルダ配下に保存します。

    ※例:
    [Windowsの場合] C:\Users\USER_NAME\GetFaviconFolder\ 
    [Macの場合] /Users/USER_NAME/GetFaviconFolder/
    

    このフォルダパスはコピーしておいてください。PHPスクリプト実行時に入力する必要があります。

    get_favicon.php
    <?php
    
    // ユーザー入力によるパス設定
    echo "保存先のパスを入力してください";
    echo PHP_EOL;
    echo "(例:[Windowsの場合] C:\Users\USER_NAME\GetFavicon\ [Macの場合] /Users/USER_NAME/GetFavicon/): ";
    echo PHP_EOL;
    $basePath = rtrim(fgets(STDIN));
    
    // パス設定
    $csvFilePath = $basePath . DIRECTORY_SEPARATOR . "url_list.csv";
    $faviconSavePath = $basePath . DIRECTORY_SEPARATOR . "favicon";
    $faviconApiBaseUrl = "https://www.google.com/s2/favicons?sz=128&domain=";
    
    // ファビコン保存先フォルダを作成(存在しない場合)
    if (!file_exists($faviconSavePath)) {
        mkdir($faviconSavePath, 0777, true);
    }
    
    // CSVファイルを読み込み
    if (($handle = fopen($csvFilePath, "r")) !== false) {
        $header = fgetcsv($handle); // ヘッダー行を取得
    
        while (($data = fgetcsv($handle)) !== false) {
            $url = $data[0];
    
            // ドメイン部分を抽出
            $domain = parse_url($url, PHP_URL_HOST);
            if (!$domain) {
                echo "無効なURL: $url\n";
                continue;
            }
    
            // Googleの非公式APIでファビコンURLを生成
            $faviconUrl = $faviconApiBaseUrl . $domain;
    
            // ファビコンを取得
            $faviconContent = file_get_contents($faviconUrl);
    
            if ($faviconContent !== false) {
                // 保存先ファイル名を作成
                $fileName = $faviconSavePath . DIRECTORY_SEPARATOR . $domain . ".png";
    
                // ファイルに保存
                file_put_contents($fileName, $faviconContent);
                echo "ファビコンを保存しました: $fileName\n";
            } else {
                echo "ファビコンを取得できませんでした: $domain\n";
            }
        }
    
        fclose($handle);
    } else {
        echo "CSVファイルを開けません: $csvFilePath\n";
    }
    /**
    * 注意: Googleの非公式APIについて
    * - Googleの非公式APIは公式サポートされておらず、将来的に仕様変更や廃止される可能性があります。
    */
    
  3. スクリプトを実行
    ターミナル上で、PHPスクリプトとCSVファイルを保存したフォルダ配下まで移動し、以下のコマンドを実行します。

    > php get_favicon.php
    
  4. 結果の確認
    ファビコンが指定フォルダに保存されます。


おわりに

本記事では、ファビコンをサイトから取得する方法について一枚ずつ取得する方法と一括で複数取得する方法をご紹介しました。ファビコンを用いることで、ドキュメントが視覚的にわかりやすくなりますよね。今回ご紹介した方法を用いるとより効率的にファビコンを入手できると思うので、参考になれば幸いです!


株式会社ONE WEDGE

【Serverlessで世の中をもっと楽しく】
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。

https://onewedge.co.jp/

GitHubで編集を提案

Discussion