kovah/laravel-html-meta

一个用于从URL解析元信息的Laravel包。

资助包维护!
kovah

v3.0.0 2024-03-19 11:34 UTC

This package is auto-updated.

Last update: 2024-09-19 12:40:14 UTC


README

Laravel Support: v8, v9, v10, v11 PHP Support: 8.0, 8.1, 8.2, 8.3
GitHub release (latest by date) GitHub Workflow Status (branch) GitHub

此包提供了一个简单的助手来检索URL的HTML元标签。它可以正确处理连接和客户端错误,并在可能的情况下将元标签内容从源编码转换为UTF-8。

安装与使用

您可以通过Composer安装此包

composer require kovah/laravel-html-meta

Laravel会自动检测此包并将其提供给您的应用程序。

使用

HtmlMeta类作为外观提供并公开了forUrl函数。以下是一个非常基础的示例。

try {
    $metaTags = \Kovah\HtmlMeta\Facades\HtmlMeta::forUrl('https://kovah.de')->getMeta();
} catch (\Kovah\HtmlMeta\Exceptions\InvalidUrlException $e) {
    // the provided URL is invalid
} catch (\Kovah\HtmlMeta\Exceptions\UnreachableUrlException $e) {
    // the website under this URL is not reachable
}

$metaTags变量现在包含以下数据

[
  "title" => "Kovah.de - Web Development and Photography",
  "generator" => "Hugo 0.58.2",
  "viewport" => "width=device-width, initial-scale=1",
  "description" => "Kovah - Web Development by Kevin Woblick",
  "og:title" => "Kovah.de - Web Development by Kevin Woblick",
  "og:description" => "Kovah - Web Development by Kevin Woblick",
  "og:image" => "'https://kovah.de/kvh_social_1200x630.jpg'",
  "og:url" => "'https://kovah.de/'/",
  "og:site_name" => "Portfolio of Kevin Woblick",
  "twitter:card" => "summary_large_image",
  // ...
];

如果您想使用解析HTML元标签的原始请求的响应,您可以使用`方法如下获取它

$metaResults = \Kovah\HtmlMeta\Facades\HtmlMeta::forUrl('https://kovah.de');

$response = $metaResults->getResponse(); // Illuminate\Http\Client\Response
$metaTags = $metaResults->getMeta(); // array
$url = $metaResults->getUrl(); // string

配置

默认情况下,当尝试获取URL的内容时,此包使用10秒的超时。如果您想增加或减少此超时,您可以发布HTML Meta配置。

php artisan vendor:publish --provider="Kovah\HtmlMeta\HtmlMetaServiceProvider"

现在可以在config/html-meta.php下找到配置。

设置自定义User Agent

此包允许您设置一个或多个自定义User Agent,这些User Agent将被用来发送请求。您想使用的User Agent必须在包配置html-meta.php中指定为一个数组,如下所示

'user_agents' => [
    'Mozilla/5.0 (Windows NT 6.4) AppleWebKit/537.36.0 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36.0',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/…4.1.28 (KHTML, like Gecko) Version/15.2.0 Safari/604.1.28',
    'Mozilla/5.0 (compatible; Googlebot/2.1.0; +http://www.google.com/bot.html)',
]

HTML Meta包将为每个请求随机选择一个User Agent。如果您只想使用一个User Agent,请从列表中删除所有其他User Agent。

'user_agents' => [
    'Mozilla/5.0 (Windows NT 6.4) AppleWebKit/537.36.0 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36.0'
]

添加更多自定义头

custom_headers配置可以包含任何应该添加到任何请求中的头,除了User-Agent和Accept。它可以是头部的数组,也可以是管道分隔的字符串。

'custom_headers' => [
    'Accept-Encoding' => 'gzip, deflate',
    'referer' => 'https://example.com',
],

如果头作为字符串传递,则应用以下格式:[header name]=[value]|[header name]=[value]|...

注意:作为字符串的头中的管道必须用反斜杠转义。

'custom_headers' => 'Accept-Encoding=gzip,deflate|referer=https://example.com'

解析细节

此包默认提供的解析器从HTML中提取元标签。以下是它在收到成功响应后所经历的步骤

  • 具有nameproperty属性的元标签都从<head>部分解析。键被转换为小写。
  • <title>标签被解析,并从其开始和结束处删除所有多余的空白。
  • 包检查字符集,它可以是以下之一
    • HTML字符集元标签(<meta charset="utf-8">),
    • HTTP内容类型头(content-type: "text/html; charset=utf-8"),
    • 或作为HTML http-equiv="content-type"标签(<meta http-equiv="content-type" content="text/html; charset=utf-8">)。我们按照此确切顺序尝试解析字符集。
  • 所有解析的元标签的值从源字符集(如果可用)转换为UTF-8,如果它不匹配UTF-8。如果元标签值无法转换,则替换为null!唯一例外是标题,如果转换不可用,则替换为URL的主机名。
  • HTML实体,如&#8212;,被转换为正确的字符,在本例中为

这是一个由Kevin Woblick贡献者发起的项目。