kovah / laravel-html-meta
一个用于从URL解析元信息的Laravel包。
Requires
- php: ^7.4 | ^8.0 | ^8.1 | ^8.2 | ^8.3
- guzzlehttp/guzzle: ^7.2
- illuminate/http: ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0
- illuminate/support: ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0
Requires (Dev)
- mockery/mockery: ^1.4.2
- orchestra/testbench: ^6.0 | ^7.0 | ^v8.0 | ^9.0
- phpunit/phpunit: ^9.0 | ^10.0
README
此包提供了一个简单的助手来检索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中提取元标签。以下是它在收到成功响应后所经历的步骤
- 具有
name
或property
属性的元标签都从<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">
)。我们按照此确切顺序尝试解析字符集。
- HTML字符集元标签(
- 所有解析的元标签的值从源字符集(如果可用)转换为UTF-8,如果它不匹配UTF-8。如果元标签值无法转换,则替换为
null
!唯一例外是标题,如果转换不可用,则替换为URL的主机名。 - HTML实体,如
—
,被转换为正确的字符,在本例中为—
。
这是一个由Kevin Woblick和贡献者发起的项目。