Uma extensão do Chrome poderosa e intuitiva que permite salvar páginas web diretamente no Notion com apenas um clique, incluindo resumos gerados por inteligência artificial.
O Snaption Web Clipper é uma solução completa que combina uma extensão para Chrome com um backend Django para facilitar a autenticação OAuth com o Notion. A extensão permite que você capture e organize conteúdo da web de forma eficiente, salvando páginas completas, seleções de texto e imagens diretamente em seus bancos de dados do Notion.
- Páginas Completas: Salva título, URL, descrição, favicon e conteúdo completo da página
- Seleções de Texto: Capture trechos específicos usando o menu de contexto (clique direito)
- Imagens: Salve imagens individuais diretamente no Notion
- Metadados Automáticos: Extração automática de Open Graph (título, descrição, imagem de capa)
- Categorias Personalizáveis: Organize seu conteúdo com categorias customizadas
- Sistema de Tags: Adicione múltiplas tags para facilitar a busca e organização
- Notas Personalizadas: Adicione suas próprias observações a qualquer item salvo
- Ícones Automáticos: Usa o favicon da página como ícone no Notion
- Resumos Automáticos: Integração com OpenRouter para gerar resumos inteligentes do conteúdo
- Modelos Flexíveis: Suporte para diversos modelos de IA (GPT-3.5-turbo, etc.)
- Configuração Simples: Basta inserir sua chave da API OpenRouter
A extensão é composta por vários componentes que trabalham em conjunto:
- Popup Interface: Interface principal onde o usuário configura databases, categorias e salva páginas
- Background Service: Gerencia menus de contexto e operações em segundo plano
- Content Scripts: Executa código nas páginas para extrair dados e metadados
- Sistema de Autenticação: Fluxo OAuth seguro integrado com o backend Django
O backend funciona como um intermediário seguro para a autenticação OAuth:
- Endpoint de Login: Inicia o fluxo OAuth com o Notion
- Callback Handler: Processa o retorno da autenticação e fornece o token
- Configuração Flexível: Suporte para desenvolvimento local e produção
- Python 3.11+
- Node.js (para desenvolvimento)
- Conta no Notion
- Chave da API OpenRouter (opcional, para resumos com IA)
- Clone o repositório:
git clone [url-do-repositorio]
cd snaption-web-clipper
- Configure o ambiente Python:
cd backend
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windows
pip install -r requirements.txt
- Configure as variáveis de ambiente:
Crie um arquivo
.env
na pastabackend/
com:
NOTION_CLIENT_ID=seu_client_id_notion
NOTION_CLIENT_SECRET=seu_client_secret_notion
NOTION_REDIRECT_URI=http://localhost:8000/auth/callback/
EXTENSION_ID=id_da_sua_extensao
- Execute as migrações e inicie o servidor:
python manage.py migrate
python manage.py runserver
-
Carregue a extensão no Chrome:
- Abra
chrome://extensions/
- Ative o "Modo do desenvolvedor"
- Clique em "Carregar sem compactação"
- Selecione a pasta
frontend/
- Abra
-
Configure a integração com o Notion:
- Vá para Notion Integrations
- Crie uma nova integração
- Configure o redirect URI:
http://localhost:8000/auth/callback/
- Adicione as credenciais no arquivo
.env
- Clique no ícone da extensão na barra de ferramentas
- Clique em "Autenticar com Notion"
- Autorize a aplicação no Notion
- Selecione o banco de dados onde deseja salvar o conteúdo
- Página Completa: Clique no ícone da extensão e depois em "Salvar Página"
- Seleção de Texto: Selecione o texto desejado, clique com o botão direito e escolha "Salvar seleção no Notion como nota"
- Imagens: Clique com o botão direito em uma imagem e escolha "Salvar imagem no Notion"
- Obtenha uma chave da API no OpenRouter
- Na extensão, insira sua chave no campo "OpenRouter API Key"
- A partir de então, resumos automáticos serão gerados para cada página salva
snaption-web-clipper/
├── backend/ # Servidor Django
│ ├── authentication/ # App de autenticação OAuth
│ │ ├── views.py # Lógica de autenticação
│ │ └── templates/ # Templates HTML
│ ├── backend/ # Configurações principais
│ │ ├── settings.py # Configurações Django
│ │ └── urls.py # Roteamento de URLs
│ ├── requirements.txt # Dependências Python
│ └── Dockerfile # Container Docker
├── frontend/ # Extensão Chrome
│ ├── manifest.json # Configuração da extensão
│ ├── popup.html # Interface principal
│ ├── popup.js # Lógica da interface
│ ├── background.js # Service worker
│ ├── auth_complete.html # Página de callback OAuth
│ └── auth_complete.js # Lógica do callback
└── .gitignore # Arquivos ignorados pelo Git
cd backend
docker build -t notion-clipper-backend .
docker run -p 8000:8000 notion-clipper-backend
- Carregue a extensão no modo desenvolvedor
- Abra as ferramentas de desenvolvedor do Chrome
- Vá para a aba "Extensions" para ver logs
- Use
console.log()
nos scripts para debugging
O código está preparado para trabalhar com bancos de dados que tenham as seguintes propriedades:
- Nome (título)
- URL (URL)
- Descrição (texto rico)
- Categoria (seleção única)
- Tags (seleção múltipla)
- Notas (texto rico)
- Resumo (texto rico)
Para usar campos diferentes, edite as propriedades em popup.js
e background.js
.
A aplicação implementa várias medidas de segurança:
- Tokens de Estado: Proteção contra ataques CSRF no fluxo OAuth
- Armazenamento Seguro: Tokens são armazenados localmente no Chrome
- HTTPS: Todo tráfego com APIs externas usa conexões seguras
- Validação de Entrada: Sanitização de dados antes do envio para o Notion
Contribuições são bem-vindas! Para contribuir:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature
) - Commit suas mudanças (
git commit -m 'Adiciona nova feature'
) - Push para a branch (
git push origin feature/nova-feature
) - Abra um Pull Request
- Mantenha o código limpo e bem comentado
- Teste todas as funcionalidades antes de submeter
- Siga as convenções de nomenclatura existentes
- Atualize a documentação quando necessário
Este projeto está sob a licença MIT. Veja o arquivo LICENSE
para mais detalhes.
- Limitação de Conteúdo: O texto extraído é limitado a 2000 caracteres para evitar timeouts
- Favicon: Alguns sites podem não ter favicons acessíveis
- Rate Limiting: APIs externas podem ter limitações de taxa
Se você encontrar problemas ou tiver dúvidas:
- Verifique se todas as dependências estão instaladas corretamente
- Confirme se as variáveis de ambiente estão configuradas
- Consulte os logs do console do Chrome para debugging
- Abra uma issue no repositório do GitHub
Funcionalidades planejadas para versões futuras:
- Suporte para múltiplos bancos de dados
- Interface de configuração mais avançada
- Sincronização offline
- Suporte para outros navegadores
- Integração com mais serviços de IA