DVOACAP-Python now supports fetching space weather data from multiple international sources with automatic fallback, reducing dependence on any single data provider (particularly NOAA/USA).
- Resilience: If one source is down, others automatically take over
- Geopolitical Independence: Not relying solely on US government sources
- Data Diversity: Cross-validation from multiple authoritative sources
- Future-proofing: Protection against service discontinuation
-
NOAA SWPC (USA) - Primary
- API:
https://services.swpc.noaa.gov/json/f107_cm_flux.json - Coverage: Daily observations
- API:
-
LISIRD (LASP Colorado) - Backup
- URL:
https://lasp.colorado.edu/lisird/data/penticton_radio_flux/ - Coverage: Historical + current Penticton data
- URL:
-
Space Weather Canada - Tertiary
- URL:
https://spaceweather.gc.ca/forecast-prevision/solar-solaire/solarflux/ - Coverage: Penticton observatory data
- URL:
-
SIDC/SILSO (Belgium) - Primary (Authoritative Source)
- API:
https://data.opendatasoft.com/api/records/1.0/search/?dataset=daily-sunspot-number@datastro - Organization: Royal Observatory of Belgium
- Coverage: Official World Data Center for sunspot index
- License: CC BY-NC
- API:
-
NOAA SWPC (USA) - Backup
- API:
https://services.swpc.noaa.gov/json/solar-cycle/observed-solar-cycle-indices.json - Coverage: Solar cycle observations
- API:
-
GFZ Potsdam (Germany) - Primary (Authoritative Source)
- API:
https://kp.gfz.de/app/json/?start=<ISO8601>&end=<ISO8601>&index=Kp - Organization: German Research Centre for Geosciences
- Coverage: Official Kp index producer
- License: CC BY 4.0
- API:
-
NOAA SWPC (USA) - Backup
- API:
https://services.swpc.noaa.gov/json/planetary_k_index_1m.json - Coverage: 1-minute planetary K-index
- API:
-
GFZ Potsdam (Germany) - Primary
- API:
https://kp.gfz.de/app/json/?start=<ISO8601>&end=<ISO8601>&index=Ap - Coverage: Daily A-index (Ap)
- API:
-
NOAA SWPC (USA) - Backup
- API:
https://services.swpc.noaa.gov/json/predicted_fredericksburg_a_index.json - Coverage: Predicted A-index
- API:
-
IMAGE Network (Finland/Scandinavia)
- API:
https://space.fmi.fi/image/www/data_download.php - Stations: 57 magnetometers including Tromsø, Sodankylä
- Coverage: Real-time auroral zone data
- Use: Local geomagnetic disturbances, Kp validation
- API:
-
INTERMAGNET (International)
- API:
https://imag-data.bgs.ac.uk/GIN_V1/hapi - Coverage: Global observatory network including 14 Canadian stations
- Use: High-quality geomagnetic field measurements
- API:
-
Tromsø Geophysical Observatory (Norway)
- URL:
https://flux.phys.uit.no/geomag.html - Coverage: High-latitude magnetometer data
- URL:
-
Sodankylä Geophysical Observatory (Finland)
- URL:
https://www.sgo.fi/Data/Magnetometer/magnData.php - Coverage: Auroral zone measurements
- URL:
-
Nobeyama (Japan)
- Coverage: F30, F15, F8, F3.2 (can derive F10.7)
- Organization: National Astronomical Observatory of Japan
-
CLS (France)
- Coverage: Interpolated F10.7 values
- Organization: Collecte Localisation Satellites
The multi-source fetcher uses a hierarchical fallback architecture:
from dvoacap.space_weather_sources import MultiSourceSpaceWeatherFetcher
# Initialize fetcher
fetcher = MultiSourceSpaceWeatherFetcher(timeout=10, verbose=True)
# Fetch all parameters with automatic fallback
data = fetcher.fetch_all()
# Access results
print(f"SFI: {data.sfi} from {data.sources['sfi']}")
print(f"SSN: {data.ssn} from {data.sources['ssn']}")
print(f"Kp: {data.kp} from {data.sources['kp']}")
print(f"A-index: {data.a_index} from {data.sources['a_index']}")For each parameter:
- Try primary authoritative source (e.g., SIDC for SSN, GFZ for Kp)
- If fails, try secondary source (e.g., NOAA)
- If all fail, use sensible defaults (mid-cycle quiet conditions)
- Track which source provided each value
The Dashboard's generate_predictions.py now uses the multi-source fetcher:
def fetch_solar_conditions() -> Dict:
fetcher = MultiSourceSpaceWeatherFetcher(timeout=10, verbose=True)
return fetcher.fetch_all_legacy_format()# Test the multi-source fetcher
python3 src/dvoacap/space_weather_sources.pyOutput shows which source provided each parameter:
======================================================================
Multi-Source Space Weather Data Fetcher
======================================================================
[OK] Solar Flux (F10.7): 149.0 from NOAA SWPC (USA)
[OK] Sunspot Number: 114.6 from SIDC/SILSO (Belgium)
[OK] Kp Index: 3.0 from GFZ Potsdam (Germany)
[OK] A-Index: 15.0 from GFZ Potsdam (Germany)
======================================================================
from dvoacap.space_weather_sources import MultiSourceSpaceWeatherFetcher
# Create fetcher
fetcher = MultiSourceSpaceWeatherFetcher(timeout=10, verbose=False)
# Get data
data = fetcher.fetch_all()
# Use data
solar_flux = data.sfi
sunspot_number = data.ssn
kp_index = data.kp
a_index = data.a_index
# Check sources
print(f"SSN from: {data.sources['ssn']}") # e.g., "SIDC/SILSO (Belgium)"
# Check for errors
if data.fetch_errors:
for error in data.fetch_errors:
print(f"Warning: {error}")- Single point of failure eliminated: If NOAA goes down, European sources take over
- Automatic failover: No manual intervention required
- Graceful degradation: Uses defaults only when all sources fail
- Authoritative sources: SIDC for SSN, GFZ for Kp (official producers)
- Cross-validation: Can compare values from multiple sources
- Source transparency: Know exactly where each value came from
- International diversity: Data from Belgium, Germany, Canada, Finland, Japan
- Reduced US dependence: Multiple European and Asian alternatives
- Future-proof: Easy to add new sources as needed
- Data cross-validation: Compare values from multiple sources, flag discrepancies
- Source health monitoring: Track success/failure rates by source
- Automatic source rotation: Distribute load across sources
- Magnetometer integration: Use IMAGE/INTERMAGNET for real-time Kp validation
- Historical data: Fetch data for specific dates (backfilling)
- Australian Space Weather Services (BoM)
- UK Met Office Space Weather
- ESA Space Weather Service Network
- Chinese National Space Science Center
# Default timeout: 10 seconds
fetcher = MultiSourceSpaceWeatherFetcher(timeout=10)
# Longer timeout for slow connections
fetcher = MultiSourceSpaceWeatherFetcher(timeout=30)# Enable detailed logging
fetcher = MultiSourceSpaceWeatherFetcher(verbose=True)
# Quiet mode
fetcher = MultiSourceSpaceWeatherFetcher(verbose=False)| Source | License | Attribution Required |
|---|---|---|
| SIDC/SILSO | CC BY-NC | Yes - Royal Observatory of Belgium |
| GFZ Potsdam | CC BY 4.0 | Yes - GFZ Helmholtz Centre |
| NOAA SWPC | Public Domain | Recommended |
| IMAGE Network | Free for scientific use | Yes - contact required for publications |
| INTERMAGNET | Open access | Yes - cite INTERMAGNET |
If all sources fail (network issues, etc.), the fetcher returns sensible defaults:
- SFI: 150.0 (mid-cycle)
- SSN: 100.0 (mid-cycle)
- Kp: 2.0 (quiet)
- A-index: 10.0 (quiet)
Some systems may have SSL issues with GFZ. The fetcher automatically falls back to NOAA.
Currently no rate limiting implemented. Most sources have generous limits for research use.
- SIDC/SILSO: https://www.sidc.be/SILSO/home
- GFZ Potsdam Kp Index: https://kp.gfz-potsdam.de/
- IMAGE Network: https://space.fmi.fi/image/
- INTERMAGNET: https://intermagnet.org/
- NOAA SWPC: https://www.swpc.noaa.gov/
For questions about data sources or to suggest additional sources:
- Open an issue on GitHub
- Check source documentation for data provider contacts
Last Updated: November 2025 Status: Production Ready ✓