cleitoncunha04/buscador-cursos-alura

该项目旨在搜索Alura网站上的可用课程

v1.1.0 2024-08-15 03:47 UTC

This package is auto-updated.

Last update: 2024-09-15 04:10:49 UTC


README

Buscador 类负责在网页上使用 HTTP 客户端和 HTML 解析器进行内容搜索。主要目标是提取一个从提供的 URL 中获取的课程列表。

属性

  • ClientInterface $httpClient: 用于向提供的 URL 发起请求的 HTTP 客户端。
  • Crawler $crawler: 负责处理和过滤请求返回的 HTML 内容的对象。

构造函数

PHP

public function __construct(
    public readonly ClientInterface $httpClient,
    public readonly Crawler $crawler
)

Buscador 类的构造函数使用 constructor property promotion 技术简化了直接在构造函数中声明属性。它接收 ClientInterfaceCrawler 实例,这些实例被存储为只读属性 (readonly)。

方法

buscarConteudo(string $url): array

public function buscarConteudo(string $url): array
{
    $cursos = [];

    try {
        $resposta = $this->httpClient->request('GET', $url);

        $html = $resposta->getBody();

        $this->crawler->addHtmlContent($html, 'UTF-8');

        //gerei uma lista de cursos pesquisando pelo seletor CSS
        $elementosCursos = $this->crawler->filter('span.card-curso__nome');

        //a lista retornou um "DOM", então fiz um foreach para pegar os textContent's (títulos dos cursos)
        foreach ($elementosCursos as $elemento) {
            $cursos[] = $elemento->textContent;
        }
    } catch (GuzzleException $e) {
        $cursos[] = "Ocorreu um erro ao buscar o curso: " . $e->getMessage();
    }

    if (count($cursos) == 0) {
        $cursos[] = "Nenhum curso encontrado";
    }

    return $cursos;
}

此方法在提供的 URL 上执行内容搜索,并返回找到的课程标题列表。

参数

  • string $url: 将在其中搜索课程的页面的 URL。

返回

  • array: 返回包含找到的课程标题或错误消息的数组。

工作原理

  1. HTTP 请求: 此方法使用 HTTP 客户端 ($httpClient) 对提供的 URL 执行 GET 请求。
  2. HTML 处理: 从响应中提取页面 HTML 内容并添加到 Crawler 以进行处理。
  3. 课程过滤: 使用 CSS 选择器 (span.card-curso__nome) 过滤包含课程标题的元素。
  4. 标题提取: 通过遍历过滤后的元素并添加每个元素的文本到 $cursos 数组中提取课程标题。
  5. 错误处理: 在 HTTP 请求出错的情况下,将错误消息添加到 $cursos 数组中。
  6. 结果验证: 如果没有找到课程,将“未找到课程”的消息添加到 $cursos 数组中。

使用示例

PHP

$buscador = new Buscador($httpClient, $crawler);
$resultados = $buscador->buscarConteudo('https://www.alura.com.br/cursos-online-programacao/php');
foreach ($resultados as $curso) {
    echo $curso . PHP_EOL;
}

AI 生成代码。请仔细审查和使用。 更多信息请查看常见问题解答

依赖项

  • ClientInterface: HTTP 客户端接口,通常由像 Guzzle 这样的库提供。
  • Crawler: 用于操作 HTML 文档的类,是 Symfony DomCrawler 库的一部分。

作者:GPT