
⛏️ Maigretの背後にある抽出エンジン:あらゆるプロフィールURLを150以上のサイトにわたる構造化されたOSINTレコードに変換します
あらゆる公開プロフィールページを、構造化されたアカウントレコードに変換します — ユーザー名、表示名、自己紹介、アバター、所在地、参加日、フォロワー数、外部リンク、そして名前変更・デザイン変更・削除を経てもアカウントを一意に特定する安定した内部識別子まで。
socid_extractor は 250 以上のスキームから HTML ページや API レスポンスを解析し、アカウントフィールドのフラットで機械可読な辞書を返します。API キーは不要、ヘッドレスブラウザも不要 — レスポンステキストに対して関数を 1 回呼び出すだけです。
有用な理由
extract() 呼び出しを使用 — プラットフォームごとのグルーコードは不要です。username、fullname、created_at、is_verified など)を使用するため、下流のパイプラインで 130 個のマッピングを用意する必要がありません。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を参照。
網羅的ではないサンプル:
…その他多数。
データ例についてはtests/test_e2e.pyを、パースロジックについてはsocid_extractor/schemes.pyを、フィールドオントロジーについてはFIELDS.mdを参照してください。
オープンソースのsocid_extractorはMITライセンスで、制限なく商用利用が可能です — ただし、プラットフォームがHTMLやAPIを変更するとページパーサーは時間とともに壊れるため、積極的なメンテナンスが必要です。
本格的な商用利用 — ホスト型抽出API、または製品が依存するパーサーのメンテナンス — についてはお問い合わせください: 📧 [email protected]
socid_extractorを製品に統合以下のSOWELテクニックに対応します:
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/ にあります。
新しいスキームの追加や修正を行いたい場合は、コントリビューションガイド を参照してください。