gregpriday/laravel-zyte-api

一个用于与Zyte的网页抓取API无缝集成的Laravel包,提供提取原始HTML、浏览器渲染的HTML和结构化文章内容等功能。

0.2.4 2024-05-11 09:40 UTC

This package is auto-updated.

Last update: 2024-09-11 10:17:46 UTC


README

⚠️ 重要通知 ⚠️:此包目前处于早期开发阶段,每次新版本发布可能会引入破坏性更改。虽然我们努力保持稳定性,但用户在升级到新版本时应该谨慎,并仔细查看变更日志。欢迎贡献和反馈,以帮助提高包的稳定性和功能性。

Laravel Zyte API是一个强大的Laravel包,可以将Zyte的网页抓取能力无缝集成到您的Laravel应用程序中。该包注重灵活性和易用性,简化了使用Zyte高级数据提取API从网页中提取数据的过程。

功能

  • 通过简单的Laravel外观轻松集成Zyte API服务
  • 灵活的extract方法,用于并发获取多个URL
  • 支持提取原始HTML、浏览器渲染的HTML、结构化文章数据等
  • 可自定义并发,以高效处理批量请求
  • 内置重试逻辑,用于鲁棒地处理API请求失败
  • 利用GuzzleHttp与Zyte API进行高效通信
  • 提供Processors类,包含用于处理提取数据的实用方法,例如将HTML转换为干净的Markdown

安装

通过在您的Laravel项目目录中运行以下命令通过Composer安装此包

composer require gregpriday/laravel-zyte-api

配置

要配置您的Zyte API密钥、代理和其他设置,请发布包配置文件

php artisan vendor:publish --provider="GregPriday\ZyteApi\ZyteApiServiceProvider"

此命令将在您的项目中创建一个config/zyte.php文件。打开此文件以查看可用的配置选项。

接下来,将以下条目添加到您的.env文件中

ZYTE_API_KEY=your-zyte-api-key-here
ZYTE_API_CONCURRENCY=5
ZYTE_PROXY=your-proxy-url-here

确保用您的实际Zyte API密钥替换your-zyte-api-key-here,并用适当的代理URL替换your-proxy-url-here

用法

提取数据

要从URL或多个URL中提取数据,请使用extract方法

use GregPriday\ZyteApi\Facades\ZyteApi;

$url = 'https://example.com';
$response = ZyteApi::extract($url, ['browserHtml' => true]);

// Access the browser-rendered HTML
echo $response['browserHtml'];

$urls = [
    'https://example.com/article1',
    'https://example.com/article2',
    'https://example.com/article3',
];

$responses = ZyteApi::extract($urls, ['article' => true]);

// Access the extracted article data for each URL
foreach ($responses as $url => $articleData) {
    echo "URL: $url\n";
    echo "Headline: {$articleData['headline']}\n";
    echo "Article Body: {$articleData['articleBody']}\n";
    // ...
}

extract方法接受以下参数

  • $urls (数组|string):要从中提取数据的单个URL或URL数组。
  • $args (数组):用于自定义提取过程的附加请求参数。有关可用选项,请参阅Zyte API文档。
  • $processCallback (callable|null):一个可选的回调函数,用于处理每个API响应。如果未提供,将返回原始API响应。

处理错误

该包包含内置的重试逻辑来处理API请求失败。如果请求失败,它将自动重试最多5次,然后返回错误消息。您可以通过修改ZyteApi构造函数中的GuzzleRetryMiddleware配置来自定义重试行为。

使用Zyte代理

要使用Zyte代理进行请求,请使用ZyteClient

use GregPriday\ZyteApi\Proxy\ZyteClient;

$client = app(ZyteClient::class);
$response = $client->get('https://example.com');

$httpResponseBody = $response->getBody()->getContents();
// ...

确保在您的.env文件中将ZYTE_PROXY值设置为适当的代理URL。

处理器

该包包含一个Processors类,提供用于处理提取数据的实用方法。例如,可以使用htmlToCleanMarkdown方法将HTML内容转换为干净的Markdown格式。

use GregPriday\ZyteApi\Facades\ZyteApi;
use GregPriday\ZyteApi\Processors;

$urls = [
    'https://example.com/article1',
    'https://example.com/article2',
    'https://example.com/article3',
];

$responses = ZyteApi::extract($urls, ['article' => true], function ($response) {
    $articleData = $response['article'];

    // Convert article HTML content to Markdown
    $articleData['articleBodyMarkdown'] = Processors::htmlToCleanMarkdown($articleData['articleBodyHtml']);

    return $articleData;
});

// Access the extracted article data and converted Markdown content for each URL
foreach ($responses as $url => $articleData) {
    echo "URL: $url\n";
    echo "Headline: {$articleData['headline']}\n";
    echo "Article Body (HTML): {$articleData['articleBodyHtml']}\n";
    echo "Article Body (Markdown): {$articleData['articleBodyMarkdown']}\n";
    // ...
}

测试

该软件包包含PHPUnit测试以确保其功能。要运行测试,请导航到您的项目目录并执行

vendor/bin/phpunit

请确保正确配置测试环境,以避免在测试期间调用Zyte的API。

贡献

欢迎为Laravel Zyte API软件包做出贡献!如果您发现任何错误,有改进建议,或希望添加新功能,请提交pull request。确保您的贡献遵循项目的编码标准和规范。

许可证

Laravel Zyte API软件包是开源软件,根据MIT许可证授权。