import sys, json sys.path.insert(0, '.') from concurrent.futures import ThreadPoolExecutor from omni import feeds from omni.sources import Source C = [ ("debian_dsa", "security", "html", "https://www.debian.org/security/", "html_listing", {"include_prefixes": ["/tracker/DSA-"]}), ("debian_dsa2", "security", "html", "https://www.debian.org/security/", "html_listing", {"include_prefixes": ["/debian-security-announce/"]}), ("openwall_a", "security", "html", "https://www.openwall.com/lists/oss-security/", "html_listing", {"include_prefixes": ["/lists/oss-security/2026/"]}), ("openwall_b", "security", "html", "https://www.openwall.com/lists/oss-security/", "html_listing", {"include_prefixes": ["/lists/oss-security/"]}), ("t00ls", "forum", "html", "https://www.t00ls.com/", "html_listing", {"include_prefixes": ["/articles-", "/Vuls-"]}), ("anquanke_html", "security", "html", "https://www.anquanke.com/", "html_listing", {"include_prefixes": ["/post/id/"]}), ("secrss", "security", "html", "https://www.secrss.com/", "html_listing", {"include_prefixes": ["/articles/"], "exclude_exact": ["/articles"]}), ("freebuf_root", "security", "html", "https://www.freebuf.com/", "html_listing", {"include_prefixes": ["/articles/", "/news/"]}), ("freebuf_news", "security", "html", "https://www.freebuf.com/news", "html_listing", {"include_prefixes": ["/articles/", "/news/"]}), ("freebuf_rss2", "security", "rss", "https://www.freebuf.com/rss", "rss", {}), ("freebuf_rss3", "security", "rss", "https://www.freebuf.com/feed/", "rss", {}), ("securitylab_a", "security", "rss", "https://www.securitylab.ru/rss/news.xml", "rss", {}), ("securitylab_b", "security", "rss", "https://www.securitylab.ru/rss/", "rss", {}), ("kaspersky_a", "security", "rss", "https://www.kaspersky.com/blog/feed/", "rss", {}), ("anti_malware_a", "security", "rss", "https://www.anti-malware.ru/rss/news", "rss", {}), ("xakep_tech", "security", "rss", "https://xakep.ru/feed/", "rss", {}), ("codeby_x", "forum", "html", "https://codeby.net/forums/", "xenforo_latest", {}), ("seebug_retry", "security", "rss", "https://paper.seebug.org/rss/", "rss", {}), ("ransomlook_retry", "abuse", "json", "https://www.ransomlook.io/api/recent", "generic_json", {}), ("ransomware_live_g", "abuse", "json", "https://api.ransomware.live/groups", "generic_json", {}), ("cybersecnews_retry", "security", "rss", "https://cybersecuritynews.com/feed/", "rss", {}), ("gbhackers_retry", "security", "rss", "https://gbhackers.com/feed/", "rss", {}), ("huntress_retry", "security", "rss", "https://www.huntress.com/blog/rss.xml", "rss", {}), ("scmedia_a", "security", "rss", "https://www.scmagazine.com/rss/news", "rss", {}), ("trendmicro_a", "security", "rss", "https://www.trendmicro.com/en_us/research.rss", "rss", {}), ("dragos_a", "security", "rss", "https://www.dragos.com/blog/feed/", "rss", {}), ("arcticwolf_a", "security", "rss", "https://arcticwolf.com/feed/", "rss", {}), ("zscaler_a", "security", "rss", "https://www.zscaler.com/blogs/rss.xml", "rss", {}), ("arch_a", "security", "rss", "https://security.archlinux.org/advisory/feed.atom", "rss", {}), ("gentoo_a", "security", "rss", "https://www.gentoo.org/glsa/feed.xml", "rss", {}), ("cisa_all_retry", "security", "rss", "https://www.cisa.gov/cybersecurity-advisories/all.xml", "rss", {}), ] def run(t): name, cat, kind, url, ad, extra = t src = Source(name=name, category=cat, kind=kind, url=url, adapter=ad, tags=(), limit=5, extra=extra) try: items = feeds.fetch(src, 5) return {"name": name, "n": len(items), "first": (items[0].title[:70] if items else "")} except Exception as e: return {"name": name, "n": 0, "err": str(e)[:80]} with ThreadPoolExecutor(6) as ex: for r in ex.map(run, C): print(json.dumps(r, ensure_ascii=False))