
公開されている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 # create virtual environment
source env/bin/activate # activate virtual environment
pip3 install -r requirements.txt
各ステップを順番に実行してください。また、仮想環境をアクティブにしておかないとパッケージが見つからないため、必ずアクティブにしてください。
このデータベースは、1 グループの検索クエリに関連するデータを保持します。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 が 1 つのポイントに対して全動画の一部のみを送信するのかは不明ですが、おそらくサービスをよりスケーラブルにするためでしょう。--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'