
socid-extractor v0.1.1
⛏️ Maigretの背後にある抽出エンジン:あらゆるプロフィールURLを150以上のサイトにわたる構造化されたOSINTレコードに変換します
socid_extractor
あらゆる公開プロフィールページを構造化されたアカウントレコードに変換します — ユーザー名、表示名、自己紹介、アバター、所在地、参加日、フォロワー数、外部リンク、そして名前変更、デザイン変更、削除を越えてアカウントを一意に特定する安定した内部IDを抽出します。
socid_extractor は130以上のプラットフォームのHTMLページとAPIレスポンスを解析し、フラットで機械可読なアカウントフィールドの辞書を返します。APIキーは不要、ヘッドレスブラウザも不要 — レスポンステキストに対する単一の関数呼び出しだけで動作します。
なぜ便利なのか
- 安定したクロスサービス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', ...]"}
ヒント — バッチ実行: --skip-fetch-if-no-url-hint を指定すると、URLが既知のサイトヒントに一致しない場合にHTTPリクエストをスキップします(高速ですが、フォーラムテンプレートなどの汎用エンジンを見逃す可能性があります):
$ socid_extractor --url https://example.com/foo --skip-fetch-if-no-url-hint
対応サイト
130以上のスキーム — 完全なリストは 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で検索。 安定したIDを取得すれば、次のようなピボットが可能です:
- SQL / 漏洩データベース(フォーラムダンプ、侵害データ) — UIDが結合キーとなる。
- Google / Yandex / archive.org のインデックス — UIDを含むURLをキャプチャしている。
- ダウンストリームのOSINTツールへ投入。 正規化されたレコードは、サイトごとのスクレイパーよりもはるかに取り込みやすい。 Maigret や類似ツールで拡充に使用されています。
商用利用
オープンソースの socid_extractor はMITライセンスであり、商用利用は制限なく無料です。ただし、ページパーサーはプラットフォームのHTMLやAPIの変更に伴い壊れる可能性があり、積極的なメンテナンスが必要です。
本格的な商用利用 — メンテナンス済みのプライベートパーサープラグインパックやホスト型抽出API — に関心のある方は、📧 [email protected] までご連絡ください。
- プライベートパーサープラグイン — 公開の150以上のサイトに加えて 100以上の追加チェック を提供。プラットフォームの変更に合わせて更新されます(公開オープンソースデータベースとは別)
- 抽出API —
socid_extractorをあなたの製品に統合
SOWEL 分類
以下の SOWEL テクニックに対応:
socid_extractor を利用しているツール
- Maigret — 強力な名前チェッカー。3000以上のサイトで見つかったアカウントから利用可能なすべての情報を含むレポートを生成します。
- TheScrapper — Webサイトからメール、電話番号、ソーシャルメディアアカウントをスクレイピングします。
- InfoHunter — オープンソースのOSINTツール。オンラインで情報を検索、収集、分析します。
- YaSeeker — ログイン名 / メールアドレスからYandexアカウントの利用可能なすべての情報を収集します。
- Marple — 指定されたユーザー名で検索エンジンの結果をスクレイピングします。
テスト
pyproject.toml からテスト用の依存関係をインストールし、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/ にあります。
貢献
新しいスキームを追加したり修正したい場合は、貢献ガイド をご覧ください。