
Парсит публичные локации Snap Map для загрузки и классификации историй с целью аналитического расследования, с рандомизированной геолокацией и автоматизированными рабочими процессами проверки.
Эта программа может искать публичные Snap Map Snapchat в нескольких местах и загружать все истории для последующего исследования и категоризации. Многое неизвестно о том, как Snapchat решает, какие видео показывать в какой «точке» на карте, поэтому скрапер может также рандомизировать геолокацию, с которой он собирает данные, на несколько сотен метров, чтобы, возможно, убедить API выдать вам ещё несколько релевантных видео.
Протестировано на Linux, но должно работать и на Windows/Mac при наличии установленного видеоплеера.
git clone https://github.com/nemec/snapchat-map-scraper.git
cd snapchat-map-scraper/
python3 -m venv env # создание виртуального окружения
source env/bin/activate # активация виртуального окружения
pip3 install -r requirements.txt
Выполняйте каждый шаг по порядку. Также убедитесь, что вы активировали виртуальное окружение, иначе пакеты будут отсутствовать.
Эта база данных хранит данные, относящиеся к одной группе поисковых запросов. Поскольку SQLite создаёт файлы базы данных с минимальными накладными расходами, вам следует создавать новую базу данных каждый раз, когда вы хотите взять выборку данных.
python3 story_downloader.py create snap.db
Команда add добавляет новое местоположение в базу данных. Программа позже соберёт и запишет snaps со всех добавленных местоположений, чтобы вы могли отслеживать несколько точек одновременно. Найдите широту и долготу вашей интересующей точки (это легко найти на Snap Map, как показано ниже) и замените их в команде ниже. Метка (label) упрощает запоминание, где находится точка.
python3 story_downloader.py add --database snap.db --label "центр далласа" 32.783038 -96.796388
# Added центр далласа to database

Команда scrape перебирает все добавленные местоположения и загружает snaps в этом месте. Превью, видео и наложения загружаются, но команда review пока может работать только с видео.
Необязательные аргументы:
--randomize рандомизирует геолокацию в пределах 500 м, чтобы побудить
API Snapchat отправлять новые видео, которые он ещё не выдавал. Понятия не имею,
почему Snapchat отправляет только подмножество всех видео для одной точки,
вероятно, чтобы сделать сервис более масштабируемым.--repeat заставляет приложение бесконечно циклически искать новые видео.
Оставьте его работать на ночь, чтобы собрать как можно больше.--sleep изменяет время ожидания приложения перед повторением. По умолчанию
120 секунд и действует только при наличии --repeat.python3 story_downloader.py scrape "центр далласа"python3 story_downloader.py scrape --database snap.db --randomize --repeat
# Scraped 16 media from location центр далласа
# Sleeping for 120 seconds...
Команда review просматривает все непросмотренные видео и открывает каждое в видеоплеере для проверки. После закрытия процесса видеоплеера CLI запросит у вас «классификацию». Это может быть любой текст, описывающий ситуацию в видео или тег и т.д. Если видео нерелевантно, оставьте классификацию пустой и просто нажмите «Enter». Когда все оставшиеся видео будут классифицированы, приложение завершится. В зависимости от вашей операционной системы,
python3 story_downloader.py review --database snap.db
# Classify or leave blank: полиция протестующие
# 15 remaining
# Classify or leave blank:
# 14 remaining
# Classify or leave blank: пожар
# 13 remaining
# ...
Команда export скопирует все видео, которые были «классифицированы», в новую папку для дальнейшего просмотра/редактирования/публикации.
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'