
Scrape les emplacements publics de Snap Map pour télécharger et classer les stories à des fins d'analyse d'investigation, avec géolocalisation aléatoire et workflows de révision automatisés.
Ce programme peut rechercher sur le Snap Map public de Snapchat à plusieurs emplacements et télécharger toutes les histoires pour une investigation et une catégorisation ultérieures. On ne sait pas vraiment comment Snapchat décide quelles vidéos apparaissent à quel « point » sur la carte, donc le scraper peut également randomiser la géolocalisation à partir de laquelle il scrape de quelques centaines de mètres pour espérer convaincre l'API de vous donner quelques vidéos supplémentaires pertinentes.
Ceci a été testé sur Linux, mais devrait fonctionner sur Windows/Mac également avec un lecteur vidéo installé.
git clone https://github.com/nemec/snapchat-map-scraper.git
cd snapchat-map-scraper/
python3 -m venv env # create virtual environment
source env/bin/activate # activate virtual environment
pip3 install -r requirements.txt
Suivez chaque étape dans l'ordre. Assurez-vous également d'avoir activé votre environnement virtuel, sinon les paquets manqueront.
Cette base de données contient les données relatives à un groupe de requêtes de recherche. Étant donné que SQLite produit des fichiers de base de données avec peu de surcharge, vous devriez créer une nouvelle base de données chaque fois que vous souhaitez échantillonner des données.
python3 story_downloader.py create snap.db
La commande add ajoutera un nouvel emplacement à la base de données. Le programme scrapera et enregistrera ensuite les snaps de tous les emplacements ajoutés afin que vous puissiez suivre plusieurs points à la fois. Trouvez la latitude et la longitude de votre point d'intérêt (cela peut facilement être trouvé sur Snap Map, comme vu ci-dessous) et remplacez-les dans la commande ci-dessous. Le label facilite la mémorisation de l'emplacement d'un point.
python3 story_downloader.py add --database snap.db --label "downtown dallas" 32.783038 -96.796388
# Added downtown dallas to database

La commande scrape parcourt tous les emplacements ajoutés et télécharge les snaps à cet emplacement. Les aperçus, vidéos et superpositions sont tous téléchargés, mais la commande review ne peut gérer que les vidéos pour le moment.
Arguments optionnels :
--randomize randomisera la localisation géographique dans un rayon de 500 m, destiné à inciter l'API de Snapchat à envoyer de nouvelles vidéos qu'elle n'a pas encore servies. Je n'ai aucune idée de pourquoi Snapchat n'envoie qu'un sous-ensemble de l'ensemble des vidéos pour un seul point, probablement pour rendre le service plus évolutif.--repeat fera boucler l'application indéfiniment à la recherche de nouvelles vidéos. Laissez-la tourner toute la nuit pour en collecter autant que possible.--sleep modifie la durée de mise en veille de l'application avant de répéter. Par défaut 120 secondes et ne prend effet que si --repeat est inclus.python3 story_downloader.py scrape "downtown dallas"python3 story_downloader.py scrape --database snap.db --randomize --repeat
# Scraped 16 media from location downtown dallas
# Sleeping for 120 seconds...
La commande review parcourt toutes les vidéos non examinées et ouvre chacune d'elles dans un lecteur vidéo pour examen. Une fois que vous avez fermé le processus du lecteur vidéo, l'interface en ligne de commande vous demandera une « classification ». Cela peut être n'importe quel texte décrivant la situation dans la vidéo ou un tag, etc. Si la vidéo n'est pas pertinente, laissez la classification vide et appuyez simplement sur « Entrée ». Une fois que toutes les vidéos restantes sont classifiées, l'application se fermera. Selon votre système d'exploitation,
python3 story_downloader.py review --database snap.db
# Classify or leave blank: police protesters
# 15 remaining
# Classify or leave blank:
# 14 remaining
# Classify or leave blank: fire
# 13 remaining
# ...
La commande export copiera toutes les vidéos qui sont « classifiées » vers un nouveau dossier pour examen/édition/publication ultérieurs.
python3 story_downloader.py export --database snap.db export/
# 3 video(s) exported
ls export/
# 2020-05-29-04:26:30-fire.mp4
# 2020-05-30-12:26:57-crowd.mp4
# '2020-05-30-21:16:22-line of people.mp4'