
socid-extractor v0.1.1
⛏️ O motor de extração por trás do Maigret: transforme qualquer URL de perfil em um registro OSINT estruturado em mais de 150 sites
socid_extractor
Transforme qualquer página de perfil público em um registro de conta estruturado — nomes de usuário, nomes de exibição, biografias, avatares, localizações, datas de adesão, contagens de seguidores, links externos e os identificadores internos estáveis que identificam exclusivamente uma conta através de renomeações, reformulações e exclusões.
socid_extractor analisa páginas HTML e respostas de API de mais de 130 plataformas e retorna um dicionário plano e legível por máquina dos campos da conta. Sem necessidade de chaves de API, sem navegador headless — apenas uma única chamada de função no texto da resposta.
Por que é útil
- IDs estáveis entre serviços. Obtenha GAIA ID (Google), Facebook UID, Yandex Public ID, Instagram pk e dezenas de outros — valores que sobrevivem a mudanças de nome de usuário e permitem correlacionar contas em vazamentos, arquivos e índices de mecanismos de busca.
- Interface uniforme. A mesma chamada
extract()para Instagram, GitHub, VK, Reddit, Substack, Bluesky, TikTok — sem código de integração por plataforma do seu lado. - Ontologia de campos. Nomes de campo normalizados entre plataformas (
username,fullname,created_at,is_verified, …) para que pipelines downstream não precisem de 130 mapeamentos. - Testado em batalha. Alimenta Maigret e várias outras ferramentas OSINT.
Instalação
Python: 3.10+.
pip install socid-extractor
Para uma instalação CLI limpa em uma estação de trabalho:
pipx install socid-extractor
A versão de desenvolvimento mais recente:
pip install -U git+https://github.com/soxoj/socid-extractor.git
Início rápido
Como CLI:
$ socid_extractor --url https://www.deviantart.com/muse1908
country: France
created_at: 2005-06-16 18:17:41
gender: female
username: Muse1908
website: www.patreon.com/musemercier
links: ['https://www.facebook.com/musemercier', 'https://www.instagram.com/muse.mercier/', 'https://www.patreon.com/musemercier']
tagline: Nothing worth having is easy...
Como biblioteca Python:
import requests
import socid_extractor
r = requests.get('https://www.patreon.com/annetlovart')
print(socid_extractor.extract(r.text))
# {'patreon_id': '33913189', 'patreon_username': 'annetlovart',
# 'fullname': 'Annet Lovart',
# 'links': "['https://www.facebook.com/322598031832479', ...]"}
Dica — execuções em lote: passe --skip-fetch-if-no-url-hint para pular a requisição HTTP quando a URL não corresponder a nenhuma dica de site conhecida (mais rápido, mas pode pular mecanismos genéricos como templates de fóruns):
$ socid_extractor --url https://example.com/foo --skip-fetch-if-no-url-hint
Sites suportados
130+ esquemas — veja METHODS.md para a lista completa.
Uma amostra não exaustiva:
- Redes principais: Facebook (páginas de usuário e grupo), Instagram, VK.com, OK.ru, Reddit, TikTok, Bluesky, Tumblr, Flickr
- Ecossistema Google: contribuições Google docs/maps (requer cookies), Google Play, YouTube
- Mail.ru: página principal do usuário my.mail.ru, foto, vídeo
- Plataformas de desenvolvimento/escrita: GitHub, Stack Overflow (HTML + API), LeetCode, Hashnode, Medium, Substack, Paragraph, WordPress.org, Virgool
- Fóruns (detectores universais): Discourse, MediaWiki / Fandom wikis, Mastodon
- Nicho/vertical: Chess.com, Roblox, MyAnimeList, Scratch, Wikipedia, DailyMotion, SlideShare, Weebly, Calendly, Amazon Author, Boosty, Warpcast (Farcaster), Fragment (TON/Telegram), Rarible, CSSBattle, lnk.bio, Spatial, TwitchTracker, Max (max.ru)
…e muitos outros.
Para exemplos de dados, veja tests/test_e2e.py; para a lógica de análise, veja socid_extractor/schemes.py; para a ontologia de campos, veja FIELDS.md.
Casos de uso
- Pivotar de um perfil para tudo que você pode ver. Uma chamada retorna as informações visíveis mais os IDs internos ocultos que a plataforma usa nos bastidores. Leitura de fundo: Week in OSINT — Getting a grasp on Google IDs.
- Rastrear contas através de renomeações, reformulações e exclusões. IDs estáveis (GAIA, FB UID, Yandex Public ID, Instagram pk, …) permitem reidentificar a mesma pessoa mesmo quando todos os campos visíveis mudaram. Fundo: Aware Online — User IDs in social-media investigations.
- Pesquisar por UID entre serviços. Depois de ter um identificador estável, você pode pivotar em:
- Bancos de dados SQL / vazados (dumps de fóruns, dados de violações) onde o UID é a chave de junção,
- Índices do Google / Yandex / archive.org que capturaram URLs contendo o UID.
- Alimentar ferramentas OSINT downstream. Um registro normalizado é muito mais fácil de ingerir do que scrapers por site — usado por Maigret e ferramentas similares para enriquecimento.
Uso Comercial
O socid_extractor de código aberto é licenciado sob MIT e gratuito para uso comercial sem restrições — mas os analisadores de página quebram com o tempo à medida que as plataformas mudam seu HTML e APIs, e eles precisam de manutenção ativa.
Para uso comercial sério — com um pacote de plugins privados mantidos de analisadores extras ou uma API de extração hospedada — entre em contato: 📧 [email protected]
- Plugin de analisador privado — 100+ verificações adicionais além dos 150+ sites públicos, mantido atualizado à medida que as plataformas mudam (separado do banco de dados público de código aberto)
- API de extração — integre o
socid_extractorao seu produto
Classificação SOWEL
Mapeia para as seguintes técnicas SOWEL:
Ferramentas que usam socid_extractor
- Maigret — poderoso verificador de nomes que gera um relatório com todas as informações disponíveis de contas encontradas em mais de 3000 sites.
- TheScrapper — raspa e-mails, números de telefone e contas de mídias sociais de um site.
- InfoHunter — ferramenta OSINT de código aberto para pesquisar, coletar e analisar informações online.
- YaSeeker — coleta todas as informações disponíveis sobre uma conta Yandex por login/e-mail.
- Marple — raspa resultados de mecanismos de busca para um determinado nome de usuário.
Testes
Instale os extras de teste de pyproject.toml, depois execute o pytest:
pip install '.[test]' # pytest, pytest-rerunfailures, pytest-xdist
python3 -m pytest tests/test_e2e.py -n 10 -k 'not cookies' -m 'not github_failed and not rate_limited'
Use pip install '.[dev]' se você também quiser flake8 / mypy / black (o conjunto completo usado pelo CI).
Cada novo esquema deve ter um teste e2e em tests/test_e2e.py acessando uma URL/API real. Testes de unidade com fixtures inline (tests/test_socid_improvements.py) também são necessários, mas não substituem a cobertura e2e. Veja docs/testing-and-ci.md para detalhes.
A documentação do desenvolvedor (arquitetura, módulos, CI) está em docs/.
Contribuindo
Veja o guia de contribuição se você quiser adicionar um novo esquema ou corrigir algo.