
socid-extractor v0.1.1
⛏️ Maigretの背後にある抽出エンジン:あらゆるプロフィールURLを150以上のサイトにわたる構造化されたOSINTレコードに変換します
socid_extractor
あらゆる公開プロフィールページを、構造化されたアカウントレコードに変換します — ユーザー名、表示名、自己紹介、アバター、所在地、参加日、フォロワー数、外部リンク、そして名前変更・デザイン変更・削除を経てもアカウントを一意に特定する安定した内部識別子まで。
socid_extractor は 250 以上のスキームから HTML ページや API レスポンスを解析し、アカウントフィールドのフラットで機械可読な辞書を返します。API キーは不要、ヘッドレスブラウザも不要 — レスポンステキストに対して関数を 1 回呼び出すだけです。
有用な理由
- サービスをまたいで安定した ID。 GAIA ID (Google)、Facebook UID、Yandex Public ID、Instagram pk など多数の値を取得できます — これらの値はユーザー名の変更後も保持され、漏洩データ、アーカイブ、検索エンジンのインデックスをまたいでアカウントを相関させることができます。
- 単一の統一インターフェース。 Instagram、GitHub、VK、Reddit、Substack、Bluesky、TikTok に対して同じ
extract()呼び出しを使用 — プラットフォームごとのグルーコードは不要です。 - フィールドオントロジー。 プラットフォームをまたいで正規化されたフィールド名(
username、fullname、created_at、is_verifiedなど)を使用するため、下流のパイプラインで 130 個のマッピングを用意する必要がありません。 - 実戦で実証済み。 Maigret やその他多数の OSINT ツールを支えています。
インストール
Python: 3.10+。
pip install socid-extractor
クリーンなCLIをワークステーションにインストールする場合:
pipx install socid-extractor
最新の開発バージョン:
pip install -U git+https://github.com/soxoj/socid-extractor.git
クイックスタート
CLI として:
$ socid_extractor --url https://www.deviantart.com/muse1908
country: France
created_at: 2005-06-16 18:17:41
gender: female
username: Muse1908
website: www.patreon.com/musemercier
links: ['https://www.facebook.com/musemercier', 'https://www.instagram.com/muse.mercier/', 'https://www.patreon.com/musemercier']
tagline: Nothing worth having is easy...
Python ライブラリとして:
import requests
import socid_extractor
r = requests.get('https://www.patreon.com/annetlovart')
print(socid_extractor.extract(r.text))
# {'patreon_id': '33913189', 'patreon_username': 'annetlovart',
# 'fullname': 'Annet Lovart',
# 'links': "['https://www.facebook.com/322598031832479', ...]"}
ヒント — バッチ実行: URLが既知のサイトヒントのいずれにも一致しない場合にHTTPリクエストをスキップするには、--skip-fetch-if-no-url-hint を渡します(高速になりますが、フォーラムテンプレートなどの汎用エンジンはスキップされる可能性があります):
$ socid_extractor --url https://example.com/foo --skip-fetch-if-no-url-hint
対応サイト
250以上のスキーム、Maigretがチェックするサイトのうち約2,000をカバー — 完全なリストはMETHODS.mdを参照。
網羅的ではないサンプル:
- 主要ネットワーク: Facebook (ユーザー & グループページ)、Instagram、VK.com、OK.ru、Reddit、TikTok、Bluesky、Tumblr、Flickr
- Googleエコシステム: Googleドキュメント/マップのコントリビューション (Cookieが必要)、Google Play、YouTube
- Mail.ru: my.mail.ruのユーザーメインページ、写真、動画
- 開発/執筆プラットフォーム: GitHub、Stack Overflow (HTML + API)、LeetCode、Hashnode、Medium、Substack、Paragraph、WordPress.org、Virgool
- フォーラム (汎用検出器): Discourse、MediaWiki / Fandomウィキ、Mastodon
- ニッチ/バーティカル: Chess.com、Roblox、MyAnimeList、Scratch、Wikipedia、DailyMotion、SlideShare、Weebly、Calendly、Amazon Author、Boosty、Warpcast (Farcaster)、Fragment (TON/Telegram)、Rarible、CSSBattle、lnk.bio、Spatial、TwitchTracker、Max (max.ru)
…その他多数。
データ例についてはtests/test_e2e.pyを、パースロジックについてはsocid_extractor/schemes.pyを、フィールドオントロジーについてはFIELDS.mdを参照してください。
ユースケース
- プロフィールから見えるものすべてへピボット。 1回の呼び出しで、可視情報に加えてプラットフォームが舞台裏で使用する隠れた内部IDを返します。背景資料: Week in OSINT — Getting a grasp on Google IDs。
- 改名、リニューアル、削除をまたいでアカウントを追跡。 安定したID (GAIA、FB UID、Yandex Public ID、Instagram pk、…) により、可視フィールドがすべて変わっても同一人物を再特定できます。背景: Aware Online — User IDs in social-media investigations。
- クロスサービスUIDで検索。 安定した識別子を入手したら、以下へピボットできます:
- SQL / 漏洩データベース (フォーラムのダンプ、侵害データ) — UIDが結合キーとなるもの、
- UIDを含むURLをキャプチャしたGoogle / Yandex / archive.orgのインデックス。
- 下流のOSINTツールに供給。 正規化されたレコードはサイトごとのスクレイパーよりもはるかに取り込みやすく、Maigretや同様のツールでエンリッチメントに使用されています。
商用利用
オープンソースのsocid_extractorはMITライセンスで、制限なく商用利用が可能です — ただし、プラットフォームがHTMLやAPIを変更するとページパーサーは時間とともに壊れるため、積極的なメンテナンスが必要です。
本格的な商用利用 — ホスト型抽出API、または製品が依存するパーサーのメンテナンス — についてはお問い合わせください: 📧 [email protected]
- 抽出API —
socid_extractorを製品に統合
SOWEL分類
以下のSOWELテクニックに対応します:
socid_extractorを使用しているツール
- Maigret — 3000以上のサイトで見つかったアカウントから利用可能なすべての情報を含むレポートを生成する強力なネームチェッカー。
- TheScrapper — ウェブサイトからメールアドレス、電話番号、ソーシャルメディアアカウントをスクレイピング。
- InfoHunter — オンラインで情報を検索、収集、分析するオープンソースのOSINTツール。
- YaSeeker — ログイン/メールからYandexアカウントに関する利用可能なすべての情報を収集。
- Marple — 指定されたユーザー名について検索エンジンの結果をスクレイピング。
関連項目
- ShareTrace — このプロジェクトの鏡像のような存在です。
socid_extractorがプロフィールページを読み取るのに対し、ShareTrace は共有リンク(TikTok、Instagram、ChatGPT、Discord、Telegram など)を受け取り、誰がそれを作成または転送したかを特定し、一部の共有トークンはオフラインでデコードします。試すだけならインストールは不要です。コミュニティ運営の Telegram bot または web UI をご利用ください。
テスト
pyproject.toml からテスト用の extras をインストールし、pytest を実行します:
pip install '.[test]' # pytest, pytest-rerunfailures, pytest-xdist
python3 -m pytest tests/test_e2e.py -n 10 -k 'not cookies' -m 'not github_failed and not rate_limited'
flake8 / mypy / black(CI で使用されるフルセット)も必要な場合は、代わりに pip install '.[dev]' を使用してください。
すべての新しいスキームには e2e テストが必須です。tests/test_e2e.py 内で実際の URL/API にアクセスするテストを追加してください。インラインフィクスチャを用いたユニットテスト(tests/test_socid_improvements.py)も必要ですが、e2e カバレッジの代わりにはなりません。詳細は docs/testing-and-ci.md を参照してください。
開発者向けドキュメント(アーキテクチャ、モジュール、CI)は docs/ にあります。
コントリビューション
新しいスキームの追加や修正を行いたい場合は、コントリビューションガイド を参照してください。