
공개 Snap Map 위치를 스크래핑하여 스토리를 다운로드하고 분류하며, 무작위 지리적 위치와 자동화된 검토 워크플로우를 통해 조사 분석을 지원합니다.
이 프로그램은 Snapchat의 공개 Snap Map에서 여러 위치를 검색하고 모든 스토리를 다운로드하여 나중에 조사 및 분류할 수 있도록 합니다. 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 명령은 데이터베이스에 새 위치를 추가합니다. 프로그램은 나중에 추가된 모든 위치에서 스냅을 스크래핑하고 기록하여 여러 지점을 한 번에 추적할 수 있습니다. 관심 지점의 위도와 경도를 찾아(아래와 같이 Snap Map에서 쉽게 찾을 수 있음) 아래 명령에서 바꾸세요. 레이블을 사용하면 지점의 위치를 더 쉽게 기억할 수 있습니다.
python3 story_downloader.py add --database snap.db --label "downtown dallas" 32.783038 -96.796388
# Added downtown dallas to database

scrape 명령은 추가된 모든 위치를 순회하며 해당 위치의 스냅을 다운로드합니다. 미리보기, 동영상 및 오버레이가 모두 다운로드되지만, 현재 review 명령은 동영상만 처리할 수 있습니다.
선택적 인수:
--randomize는 지리적 위치를 500m 이내에서 무작위화하여 Snapchat API가 아직 제공하지 않은 새 동영상을 보내도록 유도합니다. Snapchat이 단일 지점에 대해 전체 동영상 중 일부만 보내는 이유는 잘 모르겠지만, 아마도 서비스를 더 확장 가능하게 만들기 위한 것 같습니다.--repeat는 애플리케이션이 새 동영상을 찾기 위해 무한 루프를 돌게 합니다. 밤새 실행하여 최대한 많이 수집하세요.--sleep은 반복 전에 애플리케이션이 대기하는 시간을 수정합니다. 기본값은 120초이며 --repeat가 포함된 경우에만 적용됩니다.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...
review 명령은 검토되지 않은 모든 동영상을 살펴보고 각각을 비디오 플레이어로 열어 검토합니다. 비디오 플레이어 프로세스를 종료하면 CLI가 '분류'를 입력하라는 메시지를 표시합니다. 이는 동영상의 상황을 설명하는 텍스트나 태그 등이 될 수 있습니다. 동영상이 관련 없으면 분류를 비워두고 'Enter'를 누르세요. 나머지 모든 동영상이 분류되면 애플리케이션이 종료됩니다. 운영 체제에 따라,
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
# ...
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'