
⛏️ Il motore di estrazione alla base di Maigret: trasforma qualsiasi URL di profilo in un record OSINT strutturato su oltre 150 siti
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
extract() per Instagram, GitHub, VK, Reddit, Substack, Bluesky, TikTok — nessun codice specifico per piattaforma da scrivere.username, fullname, created_at, is_verified, …) così le pipeline a valle non devono gestire 130 mappature.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
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
130+ schemi — vedi METHODS.md per l'elenco completo.
Un campione non esaustivo:
…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.
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]
socid_extractor nel tuo prodottoCorrisponde alle seguenti tecniche SOWEL:
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/.
Vedi la guida al contributo se vuoi aggiungere un nuovo schema o correggere qualcosa.