feat(x): парсинг X через api.fxtwitter.com — 30 живых хендлов как источники, адаптер x_user, полный текст твитов, метрики; старый syndication-путь (429) убран

This commit is contained in:
Vlad Gothbreach
2026-10-26 19:33:35 +03:00
parent f5eef56a3b
commit cfb8639c67
4 changed files with 122 additions and 26 deletions

53
omni/sources_x.py Normal file
View File

@@ -0,0 +1,53 @@
"""X/Twitter источники — читаются без API-ключей через api.fxtwitter.com.
Адаптер: feeds._x_user -> providers.x.profile(handle).
Каждый хендл проверен живым прогоном (>=3 записи). Мёртвые (0 записей) не добавлены.
"""
_X = [
# (handle, category, теги)
("vxunderground", "abuse", ("malware", "leak")),
("malwrhunterteam", "abuse", ("malware", "stealer")),
("DailyDarkWeb", "abuse", ("leak", "ransomware")),
("DarkWebInformer", "abuse", ("leak", "darkweb")),
("abuse_ch", "abuse", ("stealer", "malware")),
("H4ckManac", "abuse", ("leak", "breach")),
("falconfeedsio", "abuse", ("ransomware", "leak")),
("nullcookies", "abuse", ("leak", "fraud")),
("TheHackersNews", "security", ("news", "cve")),
("BleepinComputer", "security", ("news", "cve")),
("campuscodi", "security", ("news", "cve")),
("ShadowServer", "security", ("scan", "cve")),
("RecordedFuture", "security", ("intel", "cve")),
("CISAgov", "security", ("cve", "advisory")),
("msftsecintel", "security", ("cve", "advisory")),
("Unit42_Intel", "security", ("intel", "cve")),
("Mandiant", "security", ("intel", "cve")),
("CrowdStrike", "security", ("intel", "cve")),
("SentinelOne", "security", ("intel", "cve")),
("Kaspersky", "security", ("intel", "cve")),
("elasticlabs", "security", ("intel",)),
("blackorbird", "security", ("apt", "intel")),
("OpenAI", "models", ("model", "release")),
("AnthropicAI", "models", ("model", "release")),
("deepseek_ai", "models", ("model", "release")),
("huggingface", "models", ("model", "dataset")),
("AI_News_", "models", ("news", "model")),
("karpathy", "community", ("ai", "guide")),
("simonw", "community", ("ai", "tool")),
("ylecun", "community", ("ai", "news")),
]
X_SOURCES = [
{
"name": "x_" + h.lower(),
"category": cat,
"kind": "tweet",
"url": "https://x.com/" + h,
"adapter": "x_user",
"tags": tags,
"limit": 15,
"extra": {"handle": h},
}
for h, cat, tags in _X
]