
Instagramプロフィール上で利用可能なすべての位置情報タグ付きの場所を収集し、それらを地図にプロットし、JSONにダンプするためのInstagram OSINTツール。
Instagramプロフィールからジオタグ付きの位置情報をスクレイピングするツール。出力はJSONとインタラクティブマップ。
sudo apt install chromium-chromedriver && chmod a+x /usr/bin/chromedriver
git clone https://github.com/bernsteining/instaloctrack
cd instaloctrack
pip3 install .
またはDockerを使用:
sudo docker build -t instaloctrack -f Dockerfile .
instaloctrack -h
usage: instaloctrack [-h] [-t TARGET_ACCOUNT] [-l LOGIN] [-p PASSWORD] [-v]
Instagram location data gathering tool. Usage: python3 instaloctrack.py -t <target_account>
optional arguments:
-h, --help show this help message and exit
-t TARGET_ACCOUNT, --target TARGET_ACCOUNT
Instagram profile to investigate
-l LOGIN, --login LOGIN
Instagram profile to connect to, in order to access
the instagram posts of the target account
-p PASSWORD, --password PASSWORD
Password of the Instagram profile to connect to
-v, --visual Spawns Chromium GUI, otherwise Chromium is headless
例:
instaloctrack -t <target_account>
ターゲットプロフィールが非公開で、そのプロフィールをフォローしているアカウントがある場合、ログインセッションでデータをスクレイピングできます:
instaloctrack -t <target_account> -l <your_account> -p <your_password>
またはDockerを使用:
sudo docker run -v /tmp/output:/tmp/output instaloctrack -t <target_account> -o /tmp/output
まず、SeleniumのWebDriverを使用してInstagramプロフィール全体をスクロールし、アカウントのすべての写真リンクを取得します。
次に、各写真リンクを非同期(asyncio)で取得し、写真の説明に位置情報が含まれているか確認し、あれば位置情報データとタイムスタンプを取得します。
InstagramはGPS座標を提供せず、場所の名前しかわからないため、これらをジオコーディングする必要があります(つまり、場所の名前からGPS座標を取得します)。
このために、OpenStreetMapを使用するNominatimの素晴らしいAPIを使用しました。この使用ではAPIキーは不要で、1秒に1回GPS座標をリクエストすることでNominatimの利用ポリシーを尊重しています。
最終的に、すべてのGPS座標を取得したら、jinja2テンプレートを使用して、すべての場所をピン留めしたOpen Street Map(Leafletライブラリを使用)をプロットするJavaScriptが埋め込まれたHTMLを生成します。このステップでもAPIキーは不要です。
また、スクリプトで収集されたデータ(場所名、タイムスタンプ、GPS座標、エラー)は、再利用のためにJSONファイルにダンプされます。
例として、フランス元大統領のInstagramプロフィール@fhollandeの出力を示します:

ヒートマップ:

マーカーをクリックしたときに表示されるデータ:

位置情報データに関する統計:

JSONデータダンプ(特定の位置情報の形式を示す一部のみ):
{
"link": "https://www.instagram.com/p/-Q_9EvR9eu",
"place": {
"id": "290297",
"name": "Musée du quai Branly - Jacques Chirac",
"slug": "musee-du-quai-branly-jacques-chirac",
"street_address": " 37 quai Branly",
" zip_code": " 75007",
" city_name": " Paris",
" region_name": " ",
" country_code": " FR"
},
"timestamp": "2015-11-19",
"gps": {
"lat": "48.8566969",
"lon": "2.3514616"
}
}