def build_parser() -> argparse.ArgumentParser:
"""Cria o parser de argumentos da CLI."""
parser = argparse.ArgumentParser(
prog="ojs-scrape",
description="Coleta de dados estruturados de periódicos OJS via OAI-PMH",
)
parser.add_argument("url", help="URL base do periódico OJS ou endpoint /oai")
parser.add_argument("--from", dest="from_date", help="Data inicial (YYYY-MM-DD ou YYYY)")
parser.add_argument("--until", dest="until_date", help="Data final (YYYY-MM-DD ou YYYY)")
parser.add_argument(
"--set",
dest="set_specs",
nargs="+",
help="Sets OAI-PMH para filtrar (ex: afroasia:ART afroasia:DOS)",
)
parser.add_argument("--issues", nargs="+", help="IDs das edições (issue view IDs do OJS)")
parser.add_argument("--author", help="Filtrar por nome de autor (substring)")
parser.add_argument("--pdf", action="store_true", help="Baixar PDFs dos artigos")
parser.add_argument("--pdf-dir", default="pdfs", help="Diretório para PDFs (default: pdfs/)")
parser.add_argument(
"--pdf-limit",
type=int,
help="Baixar no máximo N PDFs; útil para testar se o download funciona",
)
parser.add_argument(
"--format",
dest="output_formats",
choices=["json", "csv", "bibtex"],
nargs="+",
default=["json"],
help="Formato(s) de saída: json csv bibtex (default: json)",
)
parser.add_argument("-o", "--output", help="Nome base do arquivo de saída, sem extensão")
parser.add_argument(
"--delay",
type=float,
default=1.0,
help="Delay mínimo entre requisições em segundos (default: 1.0)",
)
parser.add_argument(
"--timeout",
type=float,
default=30.0,
help="Timeout de rede em segundos (default: 30.0)",
)
parser.add_argument("-v", "--verbose", action="store_true", help="Saída verbosa")
parser.add_argument("-q", "--quiet", action="store_true", help="Saída mínima")
return parser