
Coleta localizações públicas do Snap Map para baixar e classificar histórias para análise investigativa, com geolocalização aleatória e fluxos de trabalho automatizados de revisão.
Este programa pode pesquisar o Snap Map público do Snapchat em múltiplas localizações e baixar todas as histórias para posterior investigação e categorização. Muito pouco se sabe sobre como o Snapchat decide quais vídeos aparecem em qual "ponto" no mapa, então o scraper também pode randomizar a geolocalização de onde ele faz a extração por algumas centenas de metros para, esperançosamente, convencer a API a fornecer alguns vídeos mais relevantes.
Isto foi testado no Linux, mas deve funcionar também no Windows/Mac com um visualizador de vídeo instalado.
git clone https://github.com/nemec/snapchat-map-scraper.git
cd snapchat-map-scraper/
python3 -m venv env # criar ambiente virtual
source env/bin/activate # ativar ambiente virtual
pip3 install -r requirements.txt
Siga cada passo em ordem. Além disso, certifique-se de ter ativado o seu ambiente virtual, caso contrário os pacotes estarão faltando.
Este banco de dados armazena dados relacionados a um grupo de consultas de pesquisa. Como o SQLite produz arquivos de banco de dados com pouca sobrecarga, você deve criar um novo banco de dados cada vez que desejar amostrar dados.
python3 story_downloader.py create snap.db
O comando add adicionará uma nova localização ao banco de dados. O programa posteriormente extrairá e registrará snaps de todas as localizações adicionadas para que você possa rastrear múltiplos pontos de uma só vez. Encontre a latitude e longitude do seu ponto de interesse (isso pode ser facilmente encontrado no Snap Map, como mostrado abaixo) e substitua-os no comando abaixo. O label facilita lembrar onde um ponto está.
python3 story_downloader.py add --database snap.db --label "centro de dallas" 32.783038 -96.796388
# Adicionado centro de dallas ao banco de dados

O comando scrape itera por todas as localizações adicionadas e baixa snaps naquela localização. Previews, vídeos e sobreposições são todos baixados, mas o comando review só consegue lidar com vídeos no momento.
Argumentos opcionais:
--randomize irá randomizar a localização geográfica dentro de 500m, com a intenção de
fazer a API do Snapchat enviar novos vídeos que ainda não foram servidos. Não faço ideia
do porquê o Snapchat envia apenas um subconjunto do total de vídeos para um único ponto,
provavelmente para tornar o serviço mais escalável.--repeat fará com que a aplicação faça um loop infinito procurando por novos vídeos.
Deixe-o rodando durante a noite para coletar o máximo possível.--sleep modificará quanto tempo a aplicação dorme antes de repetir. O padrão é
120 segundos e só tem efeito se --repeat for incluído.python3 story_downloader.py scrape "centro de dallas"python3 story_downloader.py scrape --database snap.db --randomize --repeat
# Extraídos 16 mídias da localização centro de dallas
# Dormindo por 120 segundos...
O comando review percorre todos os vídeos não revisados e abre cada um em um player de vídeo para revisão. Quando você fechar o processo do player de vídeo, o CLI solicitará uma "classificação". Pode ser qualquer texto descrevendo a situação no vídeo ou uma tag, etc. Se o vídeo for irrelevante, deixe a classificação em branco e apenas pressione "Enter". Quando todos os vídeos restantes forem classificados, a aplicação será encerrada. Dependendo do seu sistema operacional,
python3 story_downloader.py review --database snap.db
# Classifique ou deixe em branco: policiais manifestantes
# 15 restantes
# Classifique ou deixe em branco:
# 14 restantes
# Classifique ou deixe em branco: fogo
# 13 restantes
# ...
O comando export copiará todos os vídeos que estão "classificados" para uma nova pasta para posterior revisão/edição/publicação.
python3 story_downloader.py export --database snap.db export/
# 3 vídeo(s) exportados
ls export/
# 2020-05-29-04:26:30-fogo.mp4
# 2020-05-30-12:26:57-multidão.mp4
# '2020-05-30-21:16:22-fila de pessoas.mp4'