Skip to content

Stock Snatcher é um projeto para capturar dados de API do mercado, combiná-las com raspagem de dados e gerar um serviço para recuperar infos de ações, suas vendas e compras.

License

Notifications You must be signed in to change notification settings

leonballoni/stock-snatcher

Repository files navigation

Stock Snatcher

Stock Snatcher é um projeto voltado para a captura de dados de APIs de mercado, combinando-os com scraping de dados para fornecer um serviço que recupera informações de ações, incluindo registros de compras e vendas.

Objetivos

O projeto tem como principais objetivos:

  • Capturar informações do mercado e simular cenários de compra e venda de ativos.
  • Explorar técnicas eficientes de scraping e construir uma pipeline robusta para coleta de dados, com otimizações como caching e logging.

Guia Rápido de Início

Requisitos

Ferramentas Necessárias:

Passo a Passo

  1. Inicializar via Makefile
    Use o Makefile para simplificar a inicialização dos serviços.

Para rodar em sua máquina diretamente

  1. Configure o ambiente:
    make setup
  • seguido de (que pode ser reproduzido executando o arquivo main.py na pasta src/snatcher)
    make run 

Para rodar via Docker

  1. Inicie o Dockerfile (remova sufixo -logs para operar no modo detached):
    make docker-run-logs 

Para rodar via Docker Compose (inclui todos os serviços)

  1. Inicie o Compose (remova sufixo -logs para operar no modo detached):
    make compose-run-logs

SWAGGER Docs

  1. Podem ser acessados via rota:

URL:PORT/docs ou URL:PORT/api/v1/docs

Testes

  1. Execute os testes de cobertura (TO BE FINISHED - TBF):
    make test-coverage

Atenção: Certifique-se de configurar o arquivo .env com base no .env_example.

O serviço estará disponível na porta 8000 para containers e em máquina

Análise do Desafio

  1. Superar sistemas de segurança que limitam a ação de bots em sites é um desafio novo, mas motivador.
  2. Identificamos que o Market Watch é protegido pela Datadome, uma empresa que usa algoritmos avançados, inclusive de machine learning, para bloquear bots.
  3. A combinação de diversas ferramentas e o conhecimento compartilhado pela comunidade são essenciais para o desenvolvimento contínuo deste projeto.
  4. Tenho explorado as ferramentas Selenium, Scrapy, e BeautifulSoup, além de técnicas de proxying, para reduzir a chance de detecção.
  5. Este projeto tem como objetivo aprimorar o conhecimento em ferramentas de scraping e técnicas de contorno de bloqueios.

Estrutura do Projeto

O desenvolvimento do projeto segue a estrutura abaixo:

  1. Serviços na pasta src/ – núcleo das operações:
    • snatcher: backend da API.
  1. Serviços na pasta infra/ – infraestrutura do projeto:

    • snatcher
    • redis
    • postgresql -> Agora operando por RDS da AWS
  2. Desenvolvido :

    • Rotas de GET e POST Stocks
    • Contratos de entrada e saída do StockModel
    • Caching com Redis
    • PostgresDB em AWS e Docker
    • Simples comando habilita todo o serviço
    • Logs de Auditoria
  3. Desenvolvimentos pendentes (por prioridade) :

    • Finalizar processo de estudo e extração eficiente dos dados da Market Watch
    • Aprimorar algoritmos para contornar o sistema DataDome.
    • Integrar de forma coesa o extrator com MW e Polygon
  4. Desenvolvimento futuro

    • Logs de monitoramento (Paper trail, etc)
    • Acrescentar testes unitários e de integração para adequar cobertura (80%)
    • Automatizar a coleta de dados com Airflow.
    • Adicionar mais funcionalidades ao serviço de recuperação de dados.
    • Implementar relatórios visuais de Logs e Dados(Grafana ou Metabase).

Referências

Aqui estão as documentações oficiais para cada tecnologia:


FastAPI

SQLAlchemy

Selenium

Scrapy

BeautifulSoup

Pytest

Amazon RDS PostgreSQL


About

Stock Snatcher é um projeto para capturar dados de API do mercado, combiná-las com raspagem de dados e gerar um serviço para recuperar infos de ações, suas vendas e compras.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published