Skip to content

Feature/web scraper 2#3

Open
JoaoPixelCode wants to merge 2 commits intomainfrom
feature/web-scraper-2
Open

Feature/web scraper 2#3
JoaoPixelCode wants to merge 2 commits intomainfrom
feature/web-scraper-2

Conversation

@JoaoPixelCode
Copy link
Collaborator

O que foi feito?

  • Criado plugin de cursos para o scraper do IFRS Canoas
  • list.ts extrai lista de cursos da página principal
  • detail.ts extrai título, conteúdo e data de cada curso
  • index.ts orquestra o scraping completo

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adiciona um novo plugin de scraping para coletar cursos do IFRS Canoas, seguindo o mesmo padrão de “list page + detail page” já usado no plugin de notícias.

Changes:

  • Implementa CursoListPage para extrair links/títulos dos cursos na página de listagem.
  • Implementa CursoDetailPage para extrair título, conteúdo (texto) e data a partir da página de detalhe.
  • Implementa CursosScraper para orquestrar o fluxo de scraping e emitir ScrapeResult para o pipeline.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
packages/scraper/src/plugins/course/pages/list.ts Extrai itens (url/título) da listagem de cursos e faz deduplicação por URL.
packages/scraper/src/plugins/course/pages/detail.ts Extrai título, data e conteúdo textual, removendo elementos não relevantes.
packages/scraper/src/plugins/course/index.ts Orquestra requests (lista + detalhes) e faz yield dos resultados com hash e metadados.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

const $el = this.$(el);
const url = $el.attr("href") ?? "";

// Ignora se não for URL HTTP ou se já foi visto
Copy link

Copilot AI Mar 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O comentário diz que ignora links que “não for URL HTTP”, mas a condição só permite URLs com o prefixo exato "https://ifrs.edu.br". Ajuste o comentário para refletir a regra real (somente https + domínio) ou amplie a validação para aceitar http/https de forma coerente com o comentário.

Suggested change
// Ignora se não for URL HTTP ou sefoi visto
// Ignora URLs que não sejam do domínio https://ifrs.edu.br ou quetenham sido vistas

Copilot uses AI. Check for mistakes.
Comment on lines +21 to +28
const url = $el.attr("href") ?? "";

// Ignora se não for URL HTTP ou se já foi visto
if (!url.startsWith("https://ifrs.edu.br") || seen.has(url)) return;

seen.add(url);
items.push({
url,
Copy link

Copilot AI Mar 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A filtragem url.startsWith("https://ifrs.edu.br") é muito restritiva e pode descartar links válidos do próprio IFRS (ex.: https://www.ifrs.edu.br/...) ou variações de scheme. Em vez de comparar prefixo, prefira parsear com new URL(...) e validar o hostname (por exemplo, endsWith("ifrs.edu.br")), mantendo também a deduplicação via URL normalizada.

Suggested change
const url = $el.attr("href") ?? "";
// Ignora se não for URL HTTP ou se já foi visto
if (!url.startsWith("https://ifrs.edu.br") || seen.has(url)) return;
seen.add(url);
items.push({
url,
const href = $el.attr("href");
if (!href) return;
let parsedUrl: URL;
try {
// Permite URLs relativas usando o domínio principal como base
parsedUrl = new URL(href, "https://ifrs.edu.br");
} catch {
// Ignora valores de href inválidos
return;
}
// Garante que o link aponte para um domínio do IFRS
if (!parsedUrl.hostname.endsWith("ifrs.edu.br")) return;
const normalizedUrl = parsedUrl.toString();
// Ignora se já foi visto
if (seen.has(normalizedUrl)) return;
seen.add(normalizedUrl);
items.push({
url: normalizedUrl,

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants