A production-quality, command-line Python application that integrates three public APIs into a unified, menu-driven dashboard. Get real-time weather data, cryptocurrency prices, and latest news — all from your terminal.
| Feature | Description |
|---|---|
| 🌤 Weather | Real-time weather for any city worldwide (temperature, humidity, wind, sunrise/sunset) |
| ₿ Cryptocurrency | Live crypto prices, market cap, 24h changes, rankings (Bitcoin, Ethereum, Solana, etc.) |
| 📰 News | Search latest news by topic with source filtering |
| 📋 Search History | Persistent history of all searches with timestamps |
| 📤 Export | Export results to CSV and JSON formats |
| 🎨 Beautiful CLI | ANSI-colored output with ASCII art banner |
| 🔄 Auto-Retry | Automatic retry with exponential backoff on failures |
| ⚡ Caching | In-memory response caching to reduce API calls |
| 🛡 Error Handling | Graceful handling of network, API, and input errors |
- Language: Python 3.8+
- HTTP Client:
requestslibrary - Data Formats: JSON, CSV, XML/RSS
- Logging: Python
loggingwith rotating file handler - APIs Used:
- wttr.in — Weather (no API key required)
- CoinGecko — Cryptocurrency (no API key required)
- NewsData.io — News (free API key) + Google News RSS fallback
- Python 3.8 or higher
- pip (Python package manager)
# 1. Clone the repository
git clone https://github.com/yourusername/MultiAPI-Dashboard.git
cd MultiAPI-Dashboard
# 2. Create a virtual environment (recommended)
python -m venv venv
# 3. Activate the virtual environment
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate
# 4. Install dependencies
pip install -r requirements.txtFor the best news experience, get a free API key from NewsData.io (no credit card required):
- Register at newsdata.io
- Copy your API key from the dashboard
- Open
config.pyand paste your key:NEWS_API_KEY = "your_api_key_here"
Note: The app works without a news API key! It automatically falls back to Google News RSS.
python main.pyMultiAPI-Dashboard/
│
├── main.py # Application entry point & menu system
├── weather.py # Weather service (wttr.in integration)
├── crypto.py # Cryptocurrency service (CoinGecko integration)
├── news.py # News service (NewsData.io + RSS fallback)
├── history.py # Search history persistence
├── exporter.py # CSV & JSON export functionality
├── api_client.py # Centralized HTTP client with retry & caching
├── config.py # Configuration constants & API URLs
├── logger.py # Rotating file logger setup
├── utils.py # UI helpers, banner, spinner, formatting
│
├── requirements.txt # Python dependencies
├── README.md # Project documentation
├── LICENSE # MIT License
├── .gitignore # Git ignore rules
│
├── logs/ # Application logs (auto-generated)
│ └── api.log
├── exports/ # Exported CSV & JSON files
├── data/ # Persistent data (search history)
│ └── history.json
└── screenshots/ # Application screenshots
| API | Provider | Auth | Rate Limit | Documentation |
|---|---|---|---|---|
| Weather | wttr.in | None | Generous | wttr.in/:help |
| Crypto | CoinGecko | None | 10-30/min | docs.coingecko.com |
| News | NewsData.io | Free Key | 200/day | newsdata.io/docs |
| News (fallback) | Google News RSS | None | Unlimited | RSS Feed |
- Currency conversion — Display crypto prices in multiple currencies (EUR, INR, GBP)
- Weather forecast — Show 3-day and 7-day weather forecasts
- Watchlist — Save favorite cryptocurrencies and cities
- Rich TUI — Upgrade to a full terminal UI with
textualorrich - Unit tests — Comprehensive pytest test suite with mocked API calls
- Docker — Containerize the application
- Config file — Move settings to a YAML/TOML config file
- API key rotation — Support multiple news API keys
- SQLite history — Upgrade from JSON to SQLite for history storage
- Charts — ASCII price charts for cryptocurrency trends
This project is licensed under the MIT License — see the LICENSE file for details.
- wttr.in — Free weather API by Igor Chubin
- CoinGecko — Free cryptocurrency data API
- NewsData.io — Free news API
- Google News — RSS feed for news fallback
Built with ❤️ using Python
A project by Ashwani





