首先,我们需要了解如何获取网站的图标。通常情况下,网站的图标会被放置在根目录下的 'favicon.ico' 文件中。但是,有些网站会使用不同的文件名或者放置在其他位置,因此我们需要通过解析 HTML 文档来获取真实的图标地址。

以下是一个简单的 PHP 函数,可以根据传入的 URL 获取网站的图标地址:

function getFaviconUrl($url) {
    $html = file_get_contents($url);
    $doc = new DOMDocument();
    @$doc->loadHTML($html);
    $links = $doc->getElementsByTagName('link');
    foreach ($links as $link) {
        if ($link->getAttribute('rel') == 'icon') {
            return $link->getAttribute('href');
        }
    }
    return '';
}

该函数会首先通过 file_get_contents 函数获取 URL 对应的 HTML 文档内容,然后使用 DOMDocument 类解析 HTML 文档。在解析过程中,函数会查找所有 rel 属性为 'icon' 的 link 标签,并返回其 href 属性值,即网站的图标地址。

接下来,我们需要根据获取到的图标地址下载网站的图标,并返回给调用者。为了优先获取高清图标,我们可以通过判断图标地址中是否包含 'apple-touch-icon' 或者 'favicon-32x32' 等关键字,来判断该图标是否为高清图标。如果是高清图标,则直接返回该地址;否则,我们可以通过添加一些后缀或者查询参数来获取高清图标。

以下是完整的代码实现:

function getWebsiteIcon($url) {
    $iconUrl = getFaviconUrl($url);
    if (empty($iconUrl)) {
        return '';
    }
    $isHighRes = preg_match('/apple-touch-icon|favicon-32x32/i', $iconUrl);
    if ($isHighRes) {
        return $iconUrl;
    }
    $pathInfo = pathinfo($iconUrl);
    $ext = $pathInfo['extension'];
    $newUrl = str_replace('.$ext', '@2x.$ext', $iconUrl);
    $headers = get_headers($newUrl);
    if (strpos($headers[0], '200') !== false) {
        return $newUrl;
    }
    $newUrl = $iconUrl . '?size=64';
    $headers = get_headers($newUrl);
    if (strpos($headers[0], '200') !== false) {
        return $newUrl;
    }
    return $iconUrl;
}

该函数首先调用 getFaviconUrl 函数获取网站的图标地址,如果获取失败,则直接返回空字符串。如果图标地址中包含关键字,则直接返回该地址。

如果不是高清图标,则首先尝试在图标地址中添加 '@2x' 后缀来获取高清图标。如果该地址返回 200 状态码,则直接返回该地址。否则,我们可以尝试添加查询参数来获取高清图标。在代码中,我们尝试在图标地址中添加 '?size=64' 查询参数来获取 64x64 像素的图标。如果该地址返回 200 状态码,则直接返回该地址。否则,我们直接返回原始的图标地址。

最后,我们可以将该函数封装成一个 API,供其他应用程序调用:

$url = $_GET['url'];
$iconUrl = getWebsiteIcon($url);
header('Content-Type: image/x-icon');
 echo file_get_contents($iconUrl);

通过 GET 请求传入 URL 参数,调用 getWebsiteIcon 函数获取网站的图标地址,然后返回图标的内容给调用者。由于图标的 MIME 类型为 image/x-icon,因此需要设置 Content-Type 头部。

PHP 获取网站图标 API: 自动获取高清图标

原文地址: https://www.cveoy.top/t/topic/nVyk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录