
socid-extractor v0.1.1
⛏️ Il motore di estrazione alla base di Maigret: trasforma qualsiasi URL di profilo in un record OSINT strutturato su oltre 150 siti
socid_extractor
Trasforma qualsiasi pagina pubblica di un profilo in un record strutturato: nomi utente, nomi visualizzati, biografie, avatar, posizioni, date di iscrizione, conteggi di follower, link esterni e identificativi interni stabili che identificano univocamente un account nonostante cambi di nome, redesign e cancellazioni.
socid_extractor analizza pagine HTML e risposte API di oltre 130 piattaforme e restituisce un dizionario piatto e leggibile dalla macchina con i campi dell'account. Non sono necessarie chiavi API, né browser headless: basta una singola chiamata di funzione sul testo della risposta.
Perché è utile
- ID stabili tra servizi. Ottieni GAIA ID (Google), Facebook UID, Yandex Public ID, Instagram pk e molti altri — valori che sopravvivono ai cambi di nome utente e ti permettono di correlare account tra fughe di dati, archivi e indici di motori di ricerca.
- Interfaccia uniforme. La stessa chiamata
extract()per Instagram, GitHub, VK, Reddit, Substack, Bluesky, TikTok — nessun codice specifico per piattaforma da scrivere. - Ontologia dei campi. Nomi di campo normalizzati tra piattaforme (
username,fullname,created_at,is_verified, …) così le pipeline a valle non devono gestire 130 mappature. - Collaudato sul campo. Alimenta Maigret e molti altri strumenti OSINT.
Installazione
Python: 3.10+.
pip install socid-extractor
Per un'installazione pulita della CLI su una workstation:
pipx install socid-extractor
Ultima versione in sviluppo:
pip install -U git+https://github.com/soxoj/socid-extractor.git
Avvio rapido
Come 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...
Come libreria 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', ...]"}
Suggerimento — esecuzioni batch: usa --skip-fetch-if-no-url-hint per saltare la richiesta HTTP quando l'URL non corrisponde a nessun indizio di sito noto (più veloce, ma potrebbe saltare motori generici come template di forum):
$ socid_extractor --url https://example.com/foo --skip-fetch-if-no-url-hint
Siti supportati
130+ schemi — vedi METHODS.md per l'elenco completo.
Un campione non esaustivo:
- Reti principali: Facebook (pagine utente e gruppo), Instagram, VK.com, OK.ru, Reddit, TikTok, Bluesky, Tumblr, Flickr
- Ecosistema Google: contributi di Google docs/mappe (richiede cookie), Google Play, YouTube
- Mail.ru: pagina principale utente my.mail.ru, foto, video
- Piattaforme dev / scrittura: GitHub, Stack Overflow (HTML + API), LeetCode, Hashnode, Medium, Substack, Paragraph, WordPress.org, Virgool
- Forum (rilevatori universali): Discourse, MediaWiki / wiki Fandom, Mastodon
- Di nicchia / verticali: 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 molti altri.
Per esempi di dati, vedi tests/test_e2e.py; per la logica di parsing, vedi socid_extractor/schemes.py; per l'ontologia dei campi, vedi FIELDS.md.
Casi d'uso
- Da un profilo a tutto ciò che puoi vedere. Una singola chiamata restituisce le informazioni visibili più gli ID interni nascosti che la piattaforma usa dietro le quinte. Letture di approfondimento: Week in OSINT — Getting a grasp on Google IDs.
- Traccia account attraverso cambi di nome, redesign e cancellazioni. Gli ID stabili (GAIA, FB UID, Yandex Public ID, Instagram pk, …) ti permettono di reidentificare la stessa persona anche quando ogni campo visibile è cambiato. Approfondimenti: Aware Online — User IDs in social-media investigations.
- Cerca per UID tra i servizi. Una volta ottenuto un identificativo stabile puoi spostarti su:
- Database SQL / fughe di dati (dump di forum, dati di violazioni) dove l'UID è la chiave di join,
- Indici di Google / Yandex / archive.org che hanno catturato URL contenenti l'UID.
- Alimenta strumenti OSINT a valle. Un record normalizzato è molto più facile da ingerire rispetto a scraper specifici per sito — usato da Maigret e strumenti simili per l'arricchimento.
Uso commerciale
socid_extractor open-source è concesso in licenza MIT e gratuito per uso commerciale senza restrizioni — ma i parser delle pagine si rompono nel tempo man mano che le piattaforme modificano HTML e API, e richiedono manutenzione attiva.
Per un uso commerciale serio — con un pacchetto di plugin privato mantenuto di parser extra o un'API di estrazione ospitata — contatta: 📧 [email protected]
- Plugin parser privato — oltre 100 controlli aggiuntivi oltre ai 150+ siti pubblici, mantenuto aggiornato man mano che le piattaforme cambiano (separato dal database open-source pubblico)
- API di estrazione — integra
socid_extractornel tuo prodotto
Classificazione SOWEL
Corrisponde alle seguenti tecniche SOWEL:
- SOTL-1.4. Analizzare identificativi interni
- SOTL-11.1. Verificare funzionalità obsolete e inutilizzate
Strumenti che usano socid_extractor
- Maigret — potente namechecker che genera un report con tutte le informazioni disponibili dagli account trovati su oltre 3000 siti.
- TheScrapper — estrae email, numeri di telefono e account social da un sito web.
- InfoHunter — strumento OSINT open-source per cercare, raccogliere e analizzare informazioni online.
- YaSeeker — raccoglie tutte le informazioni disponibili su un account Yandex tramite login/email.
- Marple — estrae risultati dai motori di ricerca per un dato nome utente.
Test
Installa le dipendenze extra di test da pyproject.toml, poi esegui 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'
Usa pip install '.[dev]' se vuoi anche flake8 / mypy / black (il set completo usato dalla CI).
Ogni nuovo schema deve avere un test e2e in tests/test_e2e.py che colpisce un URL/API reale. Sono richiesti anche test unitari con fixture inline (tests/test_socid_improvements.py) ma non sostituiscono la copertura e2e. Vedi docs/testing-and-ci.md per dettagli.
La documentazione per sviluppatori (architettura, moduli, CI) si trova in docs/.
Contribuire
Vedi la guida al contributo se vuoi aggiungere un nuovo schema o correggere qualcosa.