fix: replace 22 dead/blocked RSS feeds with working alternatives

Tested all 80+ RSS feeds — 22 returned 403/404/timeout. Changes:
- AP Top News: rsshub → feedx.net (working wire proxy)
- Reuters World: reutersagency.com → Google News RSS filter
- Defense One: /rss/ → /rss/all/ (correct endpoint)
- Military Times replaces Stars and Stripes (404, no RSS found)
- The National UAE: /rss → Arc outbound feed (working)
- Nikkei Asia: /rss → /rss/feed/nar (working)
- Lowy Interpreter replaces East Asia Forum (403 WAF block)
- Dialogo Americas replaces Americas Quarterly + Brazil Wire
- Remove 13 dead feeds with no working replacement:
  Threatpost, CSIS, CFR, Chatham House, Atlantic Council, IISS,
  Al Monitor, ACAPS, EU External Action, NATO News,
  Energy Intelligence, The Africa Report, African Arguments

Reduces feed count from 80 to 62, eliminating wasted timeout cycles
that were blocking the dashboard SSE first frame.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Marc Shade
2026-02-24 10:26:47 -05:00
co-authored by Claude Opus 4.6
parent a72fdc50f7
commit 95b149ad55
+13 -30
View File
@@ -29,8 +29,8 @@ _RSS_FEEDS: dict[str, list[tuple[str, str]]] = {
"geopolitics": [
("BBC World", "https://feeds.bbci.co.uk/news/world/rss.xml"),
("Al Jazeera", "https://www.aljazeera.com/xml/rss/all.xml"),
("AP Top News", "https://rsshub.app/apnews/topics/apf-topnews"),
("Reuters World", "https://www.reutersagency.com/feed/?taxonomy=best-sectors&post_type=best"),
("AP Top News", "https://feedx.net/rss/ap.xml"),
("Reuters World", "https://news.google.com/rss/search?q=source:Reuters&hl=en-US&gl=US&ceid=US:en"),
("The Guardian World", "https://www.theguardian.com/world/rss"),
("DW News", "https://rss.dw.com/rss/en/top_news/rss-en-top"),
("France24", "https://www.france24.com/en/rss"),
@@ -41,7 +41,6 @@ _RSS_FEEDS: dict[str, list[tuple[str, str]]] = {
("The Hacker News", "https://feeds.feedburner.com/TheHackersNews"),
("Schneier on Security", "https://www.schneier.com/feed/atom/"),
("Dark Reading", "https://www.darkreading.com/rss.xml"),
("Threatpost", "https://threatpost.com/feed/"),
("CISA Alerts", "https://www.cisa.gov/cybersecurity-advisories/all.xml"),
],
"technology": [
@@ -60,12 +59,11 @@ _RSS_FEEDS: dict[str, list[tuple[str, str]]] = {
("Zero Hedge", "https://feeds.feedburner.com/zerohedge/feed"),
],
"military": [
("Defense One", "https://www.defenseone.com/rss/"),
("Defense One", "https://www.defenseone.com/rss/all/"),
("War on the Rocks", "https://warontherocks.com/feed/"),
("The War Zone", "https://www.twz.com/feed"),
("Breaking Defense", "https://breakingdefense.com/feed/"),
("Defense News", "https://www.defensenews.com/arc/outboundfeeds/rss/category/land/?outputType=xml"),
("Stars and Stripes", "https://www.stripes.com/rss"),
("Military Times", "https://www.militarytimes.com/arc/outboundfeeds/rss/?outputType=xml"),
("USNI News", "https://news.usni.org/feed"),
],
"science": [
@@ -77,54 +75,41 @@ _RSS_FEEDS: dict[str, list[tuple[str, str]]] = {
"think_tanks": [
("RAND", "https://www.rand.org/blog.xml"),
("Brookings", "https://www.brookings.edu/feed/"),
("CSIS", "https://www.csis.org/analysis/feed"),
("CFR", "https://www.cfr.org/rss.xml"),
("Carnegie", "https://carnegieendowment.org/rss/solr.xml"),
("Chatham House", "https://www.chathamhouse.org/rss.xml"),
("Atlantic Council", "https://www.atlanticcouncil.org/feed/"),
("IISS", "https://www.iiss.org/rss/"),
],
"middle_east": [
("Al Monitor", "https://www.al-monitor.com/rss"),
("Middle East Eye", "https://www.middleeasteye.net/rss"),
("The National UAE", "https://www.thenationalnews.com/rss"),
("The National UAE", "https://www.thenationalnews.com/arc/outboundfeeds/rss/?outputType=xml"),
("Times of Israel", "https://www.timesofisrael.com/feed/"),
("Iran Intl", "https://www.iranintl.com/en/feed"),
],
"asia_pacific": [
("SCMP", "https://www.scmp.com/rss/91/feed"),
("Nikkei Asia", "https://asia.nikkei.com/rss"),
("Nikkei Asia", "https://asia.nikkei.com/rss/feed/nar"),
("The Diplomat", "https://thediplomat.com/feed/"),
("Channel News Asia", "https://www.channelnewsasia.com/api/v1/rss-outbound-feed?_format=xml"),
("East Asia Forum", "https://www.eastasiaforum.org/feed/"),
("Lowy Interpreter", "https://www.lowyinstitute.org/the-interpreter/rss.xml"),
],
"africa": [
("allAfrica", "https://allafrica.com/tools/headlines/rdf/latest/headlines.rdf"),
("The Africa Report", "https://www.theafricareport.com/feed/"),
("African Arguments", "https://africanarguments.org/feed/"),
],
"latin_america": [
("Americas Quarterly", "https://www.americasquarterly.org/feed/"),
("MercoPress", "https://en.mercopress.com/rss"),
("Brazil Wire", "https://www.brasilwire.com/feed/"),
("Dialogo Americas", "https://dialogo-americas.com/feed/"),
],
"energy": [
("Oil Price", "https://oilprice.com/rss/main"),
("Rigzone", "https://www.rigzone.com/news/rss/rigzone_latest.aspx"),
("Energy Intelligence", "https://www.energyintel.com/rss"),
("Utility Dive", "https://www.utilitydive.com/feeds/news/"),
],
"government": [
("State Dept", "https://www.state.gov/rss-feed/press-releases/feed/"),
("DoD News", "https://www.defense.gov/DesktopModules/ArticleCS/RSS.ashx?ContentType=1&Site=945&max=10"),
("UN News", "https://news.un.org/feed/subscribe/en/news/all/rss.xml"),
("EU External Action", "https://www.eeas.europa.eu/eeas/rss-feeds_en"),
("NATO News", "https://www.nato.int/cps/en/natohq/news.xml"),
],
"crisis": [
("ReliefWeb", "https://reliefweb.int/updates/rss.xml"),
("ICG", "https://www.crisisgroup.org/rss.xml"),
("ACAPS", "https://www.acaps.org/en/rss/briefing-notes"),
],
}
@@ -148,14 +133,10 @@ SOURCE_TIERS: dict[str, str] = {
"USNI News": "specialty",
"War on the Rocks": "specialty",
"The War Zone": "specialty",
"Military Times": "specialty",
"RAND": "think_tank",
"Brookings": "think_tank",
"CSIS": "think_tank",
"CFR": "think_tank",
"Carnegie": "think_tank",
"Chatham House": "think_tank",
"Atlantic Council": "think_tank",
"IISS": "think_tank",
"ICG": "think_tank",
"BleepingComputer": "specialty",
"Krebs on Security": "specialty",
@@ -164,9 +145,11 @@ SOURCE_TIERS: dict[str, str] = {
"State Dept": "government",
"DoD News": "government",
"UN News": "government",
"NATO News": "government",
"ReliefWeb": "intl_org",
"ACAPS": "intl_org",
"Lowy Interpreter": "think_tank",
"Dialogo Americas": "specialty",
"Nikkei Asia": "major",
"The National UAE": "major",
"Zero Hedge": "aggregator",
}