
⛏️ Maigret의 추출 엔진: 모든 프로필 URL을 150개 이상의 사이트에서 구조화된 OSINT 레코드로 변환합니다.
공개 프로필 페이지를 구조화된 계정 레코드로 변환합니다 — 사용자 이름, 표시 이름, 소개, 아바타, 위치, 가입 날짜, 팔로워 수, 외부 링크, 그리고 이름 변경, 디자인 개편, 삭제에도 계정을 고유하게 식별하는 안정적인 내부 식별자까지 포함합니다.
socid_extractor는 250개 이상의 스킴에서 HTML 페이지와 API 응답을 파싱하여 계정 필드의 평탄한 기계 판독 가능 사전을 반환합니다. API 키가 필요 없고, 헤드리스 브라우저도 필요 없습니다 — 응답 텍스트에 대해 단일 함수 호출만 하면 됩니다.
유용한 이유
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 봇 또는 웹 UI를 이용하세요.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]'를 사용하세요.
모든 새 스킴에는 실제 URL/API를 호출하는 e2e 테스트가 tests/test_e2e.py에 반드시 있어야 합니다. 인라인 픽스처를 사용하는 단위 테스트(tests/test_socid_improvements.py)도 필요하지만 e2e 커버리지를 대체하지는 않습니다. 자세한 내용은 docs/testing-and-ci.md를 참조하세요.
개발자 문서(아키텍처, 모듈, CI)는 docs/에 있습니다.
새 스킴을 추가하거나 무언가를 수정하려면 기여 가이드를 참조하세요.