
Raccoglie le posizioni pubbliche di Snap Map per scaricare e classificare storie per analisi investigative, con geolocalizzazione casuale e flussi di lavoro di revisione automatizzati.
Questo programma può cercare la Snap Map pubblica di Snapchat in più posizioni e scaricare tutte le storie per successive analisi e categorizzazioni. Non si sa molto su come Snapchat decida quali video mostrare in quale "punto" della mappa, quindi lo scraper può anche randomizzare la geolocalizzazione da cui estrae i dati di qualche centinaio di metri, nella speranza di convincere l'API a fornire qualche video più pertinente.
Testato su Linux, ma dovrebbe funzionare anche su Windows/Mac con un lettore video installato.
git clone https://github.com/nemec/snapchat-map-scraper.git
cd snapchat-map-scraper/
python3 -m venv env # crea ambiente virtuale
source env/bin/activate # attiva l'ambiente virtuale
pip3 install -r requirements.txt
Segui ogni passo in ordine. Inoltre, assicurati di aver attivato il tuo ambiente virtuale, altrimenti i pacchetti non saranno disponibili.
Questo database contiene dati relativi a un gruppo di query di ricerca. Poiché SQLite produce file di database con poco overhead, dovresti creare un nuovo database ogni volta che vuoi campionare dati.
python3 story_downloader.py create snap.db
Il comando add aggiungerà una nuova posizione al database. In seguito il programma estrarrà e registrerà snaps da tutte le posizioni aggiunte, così da poter tracciare più punti contemporaneamente. Trova la latitudine e longitudine del tuo punto di interesse (si possono trovare facilmente sulla Snap Map, come mostrato sotto) e sostituiscile nel comando sottostante. L'etichetta facilita il ricordo della posizione di un punto.
python3 story_downloader.py add --database snap.db --label "downtown dallas" 32.783038 -96.796388
# Aggiunto downtown dallas al database

Il comando scrape scorre tutte le posizioni aggiunte e scarica gli snaps in quella posizione. Anteprime, video e sovrapposizioni vengono scaricati ma al momento il comando review gestisce solo i video.
Argomenti opzionali:
--randomize randomizza la posizione geografica entro 500m, con l'intento di
spingere l'API di Snapchat a inviare nuovi video non ancora mostrati. Non ho idea
del perché Snapchat invii solo un sottoinsieme del totale dei video per un singolo punto,
probabilmente per rendere il servizio più scalabile.--repeat fa sì che l'applicazione si ripeta all'infinito alla ricerca di nuovi video.
Lascialo in esecuzione tutta la notte per raccogliere il più possibile.--sleep modifica quanto tempo l'applicazione attende prima di ripetere. Di default
è 120 secondi e ha effetto solo se è incluso --repeat.python3 story_downloader.py scrape "downtown dallas"python3 story_downloader.py scrape --database snap.db --randomize --repeat
# Estratti 16 media dalla posizione downtown dallas
# In attesa per 120 secondi...
Il comando review esamina tutti i video non ancora revisionati e apre ciascuno in un lettore video per la revisione. Una volta chiuso il processo del lettore video, la CLI ti chiederà una "classificazione". Può essere qualsiasi testo che descriva la situazione nel video o un tag, ecc. Se il video è irrilevante, lascia la classificazione vuota e premi semplicemente "Invio". Una volta classificati tutti i video rimanenti, l'applicazione terminerà. A seconda del tuo sistema operativo,
python3 story_downloader.py review --database snap.db
# Classifica o lascia vuoto: polizia manifestanti
# 15 rimanenti
# Classifica o lascia vuoto:
# 14 rimanenti
# Classifica o lascia vuoto: incendio
# 13 rimanenti
# ...
Il comando export copierà tutti i video "classificati" in una nuova cartella per ulteriori revisioni/modifiche/pubblicazioni.
python3 story_downloader.py export --database snap.db export/
# 3 video esportati
ls export/
# 2020-05-29-04:26:30-incendio.mp4
# 2020-05-30-12:26:57-folla.mp4
# '2020-05-30-21:16:22-fila di persone.mp4'