cleitoncunha04 / buscador-cursos-alura
该项目旨在搜索Alura网站上的可用课程
v1.1.0
2024-08-15 03:47 UTC
Requires
- guzzlehttp/guzzle: ^7.9
- symfony/css-selector: ^7.1
- symfony/dom-crawler: ^7.1
Requires (Dev)
- phan/phan: ^5.4
- phpunit/phpunit: ^11.3
- squizlabs/php_codesniffer: ^3.10
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 技术简化了直接在构造函数中声明属性。它接收 ClientInterface
和 Crawler
实例,这些实例被存储为只读属性 (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
: 返回包含找到的课程标题或错误消息的数组。
工作原理
- HTTP 请求: 此方法使用 HTTP 客户端 (
$httpClient
) 对提供的 URL 执行 GET 请求。 - HTML 处理: 从响应中提取页面 HTML 内容并添加到
Crawler
以进行处理。 - 课程过滤: 使用 CSS 选择器 (
span.card-curso__nome
) 过滤包含课程标题的元素。 - 标题提取: 通过遍历过滤后的元素并添加每个元素的文本到
$cursos
数组中提取课程标题。 - 错误处理: 在 HTTP 请求出错的情况下,将错误消息添加到
$cursos
数组中。 - 结果验证: 如果没有找到课程,将“未找到课程”的消息添加到
$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