help@rskworld.in +91 93305 39277
RSK World
  • Home
  • Development
    • Web Development
    • Mobile Apps
    • Software
    • Games
    • Project
  • Technologies
    • Data Science
    • AI Development
    • Cloud Development
    • Blockchain
    • Cyber Security
    • Dev Tools
    • Testing Tools
  • Blog
  • About
  • Contact

Theme Settings

Color Scheme
Display Options
Font Size
100%
Back to Project
RSK World
weather-chatbot
RSK World
weather-chatbot
Weather Chatbot - Python + Flask + OpenWeatherMap + OpenAI + Weather Forecast + Weather Alerts + Natural Language Processing
weather-chatbot
  • __pycache__
  • cache
  • logs
  • scripts
  • sessions
  • static
  • templates
  • tests
  • utils
  • .dockerignore778 B
  • .env.example1.5 KB
  • .gitignore2.4 KB
  • .pre-commit-config.yaml1 KB
  • API.md7.9 KB
  • CHANGELOG.md2.4 KB
  • CHECKLIST.md5.4 KB
  • CONTRIBUTING.md1.9 KB
  • Dockerfile1.4 KB
  • FEATURES.md7.1 KB
  • FINAL_CHECK.md6.7 KB
  • GITHUB_RELEASE_INSTRUCTIONS.md5.4 KB
  • INSTALL.md4 KB
  • LICENSE1.3 KB
  • MANIFEST.in553 B
  • Makefile2 KB
  • PROJECT_SUMMARY.md12.9 KB
  • README.md7.2 KB
  • RELEASE_NOTES_v1.0.0.md8.9 KB
  • VERIFICATION_REPORT.md9.2 KB
  • app.py22.2 KB
  • chatbot.py1.7 KB
  • config.py4.9 KB
  • docker-compose.yml2.2 KB
  • nginx.conf2.3 KB
  • pytest.ini549 B
  • requirements.txt1.9 KB
  • run.py3.1 KB
  • setup.py3.1 KB
  • weather_api.py578 B
GITHUB_RELEASE_GUIDE.mdINSTALL.mdbot.pyconfig.pyREADME.mdPROJECT_SUMMARY.mdINSTALLATION.mdindex.html.gitignore.dockerignore
INSTALL.md
Raw Download

INSTALL.md

# Installation Guide
## ===================

**Author:** RSK World (https://rskworld.in)
**Year:** 2026

This guide provides detailed installation instructions for the Weather Chatbot application.

## Prerequisites

- Python 3.8 or higher
- pip (Python package installer)
- Git (optional, for cloning repository)
- OpenWeatherMap API key (free at https://openweathermap.org/api)
- OpenAI API key (optional, for enhanced NLP)

## Installation Methods

### Method 1: Standard Installation

1. **Clone the repository (or download ZIP)**
```bash
git clone https://github.com/rskworld/weather-chatbot.git
cd weather-chatbot
```

2. **Create virtual environment**
```bash
# Windows
python -m venv venv
venv\Scripts\activate

# macOS/Linux
python3 -m venv venv
source venv/bin/activate
```

3. **Install dependencies**
```bash
pip install --upgrade pip
pip install -r requirements.txt
```

4. **Configure environment variables**
```bash
# Copy example file
cp .env.example .env

# Edit .env file with your API keys
# OPENWEATHER_API_KEY=your_key_here
# OPENAI_API_KEY=your_key_here (optional)
```

5. **Run the application**
```bash
python app.py
# or
python run.py
```

6. **Access the application**
Open your browser and go to: `http://localhost:5000`

### Method 2: Docker Installation

1. **Build Docker image**
```bash
docker build -t weather-chatbot .
```

2. **Run container**
```bash
docker run -p 5000:5000 --env-file .env weather-chatbot
```

### Method 3: Docker Compose Installation

1. **Configure environment**
```bash
cp .env.example .env
# Edit .env file with your API keys
```

2. **Start services**
```bash
docker-compose up -d
```

3. **View logs**
```bash
docker-compose logs -f
```

4. **Stop services**
```bash
docker-compose down
```

## Post-Installation

### Verify Installation

1. **Check health endpoint**
```bash
curl http://localhost:5000/health
```

2. **Test API**
```bash
curl -X POST http://localhost:5000/chat \
-d "message=What is the weather in London?"
```

### Database Setup (Optional)

If using PostgreSQL or MySQL:

1. **Install database**
```bash
# PostgreSQL
sudo apt-get install postgresql postgresql-contrib

# MySQL
sudo apt-get install mysql-server
```

2. **Create database**
```sql
CREATE DATABASE weather_chatbot;
CREATE USER weatherbot WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE weather_chatbot TO weatherbot;
```

3. **Update .env file**
```
DATABASE_URL=postgresql://weatherbot:your_password@localhost:5432/weather_chatbot
```

### Redis Setup (Optional)

1. **Install Redis**
```bash
# Ubuntu/Debian
sudo apt-get install redis-server

# macOS
brew install redis

# Start Redis
redis-server
```

2. **Update .env file**
```
REDIS_URL=redis://localhost:6379/0
CACHE_ENABLED=True
```

## Troubleshooting

### Common Issues

1. **Port already in use**
- Change PORT in .env file
- Or stop the process using port 5000

2. **Module not found errors**
- Ensure virtual environment is activated
- Run: `pip install -r requirements.txt`

3. **API key errors**
- Verify API keys in .env file
- Check OpenWeatherMap API key is valid

4. **Database connection errors**
- Verify DATABASE_URL in .env
- Check database server is running
- Verify credentials

5. **Redis connection errors**
- Check Redis server is running
- Verify REDIS_URL in .env
- Or disable caching: `CACHE_ENABLED=False`

## Production Deployment

See README.md for deployment instructions.

## Support

For installation help:
- Email: hello@rskworld.in
- Phone: +91 93305 39277
- Website: https://rskworld.in

---

**ยฉ 2026 RSK World. All rights reserved.**
config.py
Raw Download
Find: Go to:
#!/usr/bin/env python3
"""
Weather Chatbot Configuration
============================

Author: RSK World (https://rskworld.in)
Founded by: Molla Samser
Designer & Tester: Rima Khatun
Contact: +91 93305 39277, hello@rskworld.in, support@rskworld.in
Location: Nutanhat, Mongolkote, Purba Burdwan, West Bengal, India, 713147
Year: 2026

Description: Configuration settings for the Weather Chatbot application
"""

import os
from dotenv import load_dotenv

# Load environment variables
load_dotenv()

class Config:
    """Base configuration class for Weather Chatbot"""
    
    # Basic Flask Configuration
    SECRET_KEY = os.getenv('SECRET_KEY', 'weather-chatbot-secret-key-2026')
    DEBUG = os.getenv('FLASK_DEBUG', 'True').lower() == 'true'
    
    # Server Configuration
    HOST = os.getenv('HOST', '0.0.0.0')
    PORT = int(os.getenv('PORT', 5000))
    
    # API Keys
    OPENWEATHER_API_KEY = os.getenv('OPENWEATHER_API_KEY')
    OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
    
    # Weather API Configuration
    WEATHER_UNITS = os.getenv('WEATHER_UNITS', 'metric')
    WEATHER_LANGUAGE = os.getenv('WEATHER_LANGUAGE', 'en')
    DEFAULT_CITY = os.getenv('DEFAULT_CITY', 'London')
    
    # OpenWeatherMap API URLs
    OPENWEATHER_BASE_URL = "https://api.openweathermap.org/data/2.5"
    OPENWEATHER_GEO_URL = "http://api.openweathermap.org/geo/1.0"
    
    # Logging Configuration
    LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO')
    LOG_FILE = os.getenv('LOG_FILE', 'logs/weather_chatbot.log')
    
    # Rate Limiting
    RATE_LIMIT_ENABLED = os.getenv('RATE_LIMIT_ENABLED', 'True').lower() == 'true'
    RATE_LIMIT_PER_MINUTE = int(os.getenv('RATE_LIMIT_PER_MINUTE', 30))
    
    # Cache Configuration
    CACHE_ENABLED = os.getenv('CACHE_ENABLED', 'False').lower() == 'true'
    CACHE_TTL = int(os.getenv('CACHE_TTL', 300))  # 5 minutes
    
    # Database Configuration (for chat history)
    DATABASE_URL = os.getenv('DATABASE_URL', 'sqlite:///weather_chatbot.db')
    
    # CORS Configuration
    CORS_ORIGINS = os.getenv('CORS_ORIGINS', '*').split(',')
    
    # Security Configuration
    SESSION_COOKIE_SECURE = os.getenv('SESSION_COOKIE_SECURE', 'False').lower() == 'true'
    SESSION_COOKIE_HTTPONLY = os.getenv('SESSION_COOKIE_HTTPONLY', 'True').lower() == 'true'
    SESSION_COOKIE_SAMESITE = os.getenv('SESSION_COOKIE_SAMESITE', 'Lax')
    
    # Application Information
    APP_NAME = "Weather Chatbot"
    APP_VERSION = "1.0.0"
    APP_AUTHOR = "RSK World"
    APP_WEBSITE = "https://rskworld.in"
    APP_YEAR = "2026"
    
    # Supported Cities for Quick Access
    SUPPORTED_CITIES = [
        'London', 'New York', 'Paris', 'Tokyo', 'Delhi', 'Mumbai', 
        'Kolkata', 'Chennai', 'Bangalore', 'Sydney', 'Moscow', 
        'Beijing', 'Dubai', 'Singapore', 'Hong Kong'
    ]
    
    # Weather Alert Thresholds
    ALERT_TEMPERATURE_HIGH = 40.0  # Celsius
    ALERT_TEMPERATURE_LOW = -10.0  # Celsius
    ALERT_WIND_SPEED_HIGH = 20.0   # m/s
    ALERT_HUMIDITY_HIGH = 90.0     # Percentage
    
    @staticmethod
    def validate_config():
        """Validate required configuration settings"""
        errors = []
        
        if not Config.OPENWEATHER_API_KEY:
            errors.append("OPENWEATHER_API_KEY is required")
        
        if errors:
            raise ValueError("Configuration validation failed: " + ", ".join(errors))
        
        return True
    
    @staticmethod
    def get_app_info():
        """Get application information"""
        return {
            'name': Config.APP_NAME,
            'version': Config.APP_VERSION,
            'author': Config.APP_AUTHOR,
            'website': Config.APP_WEBSITE,
            'year': Config.APP_YEAR,
            'contact': {
                'phone': '+91 93305 39277',
                'email': 'hello@rskworld.in',
                'support': 'support@rskworld.in'
            },
            'location': 'Nutanhat, Mongolkote, Purba Burdwan, West Bengal, India, 713147'
        }

class DevelopmentConfig(Config):
    """Development configuration"""
    DEBUG = True
    LOG_LEVEL = 'DEBUG'

class ProductionConfig(Config):
    """Production configuration"""
    DEBUG = False
    SESSION_COOKIE_SECURE = True
    LOG_LEVEL = 'WARNING'

class TestingConfig(Config):
    """Testing configuration"""
    TESTING = True
    DEBUG = True
    OPENWEATHER_API_KEY = 'test_key'
    OPENAI_API_KEY = 'test_key'

# Configuration mapping
config_map = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'testing': TestingConfig,
    'default': DevelopmentConfig
}

def get_config(config_name=None):
    """Get configuration based on environment"""
    if config_name is None:
        config_name = os.getenv('FLASK_ENV', 'default')
    
    return config_map.get(config_name, DevelopmentConfig)
151 linesโ€ข4.9 KB
python
README.md
Raw Download

README.md

# Weather Chatbot ๐ŸŒค๏ธ

**Author:** RSK World (https://rskworld.in)
**Founded by:** Molla Samser
**Designer & Tester:** Rima Khatun
**Contact:** +91 93305 39277, hello@rskworld.in, support@rskworld.in
**Location:** Nutanhat, Mongolkote, Purba Burdwan, West Bengal, India, 713147
**Year:** 2026

A sophisticated weather chatbot providing real-time weather forecasts, alerts, and comprehensive weather information using natural language processing.

## ๐ŸŒŸ Features

- **Real-time Weather Data**: Get current weather conditions for any city worldwide
- **Weather Forecasts**: 5-day weather forecasts with detailed information
- **Weather Alerts**: Real-time weather alerts and warnings for specific locations
- **Natural Language Processing**: Chat interface powered by OpenAI API for intelligent conversations
- **Location-based Services**: Automatic location detection and weather data
- **Web Interface**: Beautiful, responsive web interface
- **API Endpoints**: RESTful API for integration with other services
- **Multiple Query Types**: Support for current weather, forecasts, and alerts
- **Fallback Support**: Works without OpenAI API using keyword matching

## ๐Ÿ› ๏ธ Technologies Used

- **Python 3.8+**: Core programming language
- **Flask**: Web framework for the application
- **OpenWeatherMap API**: Weather data provider
- **OpenAI API**: Natural language processing (optional)
- **HTML/CSS/JavaScript**: Frontend interface
- **Bootstrap**: UI framework for responsive design
- **Requests**: HTTP library for API calls

## ๐Ÿ“‹ Prerequisites

- Python 3.8 or higher
- OpenWeatherMap API key (free at https://openweathermap.org/api)
- OpenAI API key (optional, for enhanced NLP)
- Git for cloning the repository

## ๐Ÿš€ Quick Start

### 1. Clone the Repository

```bash
git clone https://github.com/rskworld/weather-chatbot.git
cd weather-chatbot
```

### 2. Create Virtual Environment

```bash
python -m venv venv

# Windows
venv\Scripts\activate

# macOS/Linux
source venv/bin/activate
```

### 3. Install Dependencies

```bash
pip install -r requirements.txt
```

### 4. Configure Environment Variables

```bash
# Copy the example environment file
cp .env.example .env

# Edit .env file with your API keys
# OPENWEATHER_API_KEY=your_openweathermap_api_key_here
# OPENAI_API_KEY=your_openai_api_key_here
```

### 5. Run the Application

```bash
python app.py
```

The application will be available at `http://localhost:5000`

## ๐Ÿ”ง Configuration

### Required Environment Variables

- `OPENWEATHER_API_KEY`: Your OpenWeatherMap API key (required)
- `OPENAI_API_KEY`: Your OpenAI API key (optional, for enhanced NLP)

### Optional Configuration

- `SECRET_KEY`: Flask secret key for sessions
- `HOST`: Server host (default: 0.0.0.0)
- `PORT`: Server port (default: 5000)
- `WEATHER_UNITS`: Temperature units (metric/imperial/kelvin)
- `DEFAULT_CITY`: Default city for weather queries

## ๐Ÿ“ก API Endpoints

### Chat Interface
- `POST /chat` - Send chat message and get weather response

### Weather Data
- `GET /weather/<city>` - Get current weather for a city
- `GET /forecast/<city>` - Get 5-day forecast for a city
- `GET /alerts/<city>` - Get weather alerts for a city

### System
- `GET /health` - Health check endpoint
- `GET /` - Main web interface

## ๐Ÿ’ฌ Usage Examples

### Basic Weather Queries
- "What's the weather in London?"
- "How's the weather in New York today?"
- "Tell me about the weather in Tokyo"

### Forecast Queries
- "What's the forecast for Paris tomorrow?"
- "Will it rain in Mumbai this week?"
- "Weather forecast for Delhi next 5 days"

### Alert Queries
- "Any weather alerts for Sydney?"
- "Are there warnings for Beijing?"
- "Weather alerts in Dubai"

## ๐ŸŽฏ Supported Features

### Weather Information
- Temperature (current, feels like)
- Humidity and pressure
- Wind speed and direction
- Weather description and conditions
- Visibility
- Sunrise and sunset times

### Forecast Data
- Hourly forecasts (3-hour intervals)
- Daily weather summaries
- Temperature trends
- Precipitation predictions
- Weather condition changes

### Weather Alerts
- Severe weather warnings
- Temperature alerts
- Storm warnings
- Precipitation alerts
- Custom alert thresholds

## ๐ŸŒ Supported Cities

The chatbot supports weather queries for cities worldwide, including:
- Major international cities (London, New York, Paris, Tokyo)
- Indian cities (Delhi, Mumbai, Kolkata, Chennai, Bangalore)
- Regional cities and towns
- Custom location support

## ๐Ÿ”’ Security Features

- Environment variable configuration
- Secure session handling
- Input validation and sanitization
- Rate limiting protection
- CORS configuration
- Error handling and logging

## ๐Ÿ“Š Logging and Monitoring

- Comprehensive logging system
- Error tracking and reporting
- Performance monitoring
- API usage statistics
- Health check endpoints

## ๐Ÿงช Testing

```bash
# Run unit tests
python -m pytest tests/

# Run with coverage
python -m pytest --cov=app tests/

# Run specific test file
python -m pytest tests/test_weather_api.py
```

## ๐Ÿ“ Project Structure

```
weather-chatbot/
โ”œโ”€โ”€ app.py # Main Flask application
โ”œโ”€โ”€ config.py # Configuration settings
โ”œโ”€โ”€ requirements.txt # Python dependencies
โ”œโ”€โ”€ .env.example # Environment variables template
โ”œโ”€โ”€ README.md # Project documentation
โ”œโ”€โ”€ static/ # Static files (CSS, JS, images)
โ”œโ”€โ”€ templates/ # HTML templates
โ”œโ”€โ”€ utils/ # Utility functions
โ”œโ”€โ”€ tests/ # Test files
โ””โ”€โ”€ logs/ # Application logs
```

## ๐Ÿš€ Deployment

### Docker Deployment

```bash
# Build Docker image
docker build -t weather-chatbot .

# Run container
docker run -p 5000:5000 --env-file .env weather-chatbot
```

### Heroku Deployment

```bash
# Install Heroku CLI
heroku create your-app-name

# Set environment variables
heroku config:set OPENWEATHER_API_KEY=your_key
heroku config:set OPENAI_API_KEY=your_key

# Deploy
git push heroku main
```

## ๐Ÿค Contributing

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## ๐Ÿ“ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## ๐Ÿ“ž Support

For support and inquiries:

- **Email:** hello@rskworld.in, support@rskworld.in
- **Phone:** +91 93305 39277
- **Website:** https://rskworld.in
- **Location:** Nutanhat, Mongolkote, Purba Burdwan, West Bengal, India, 713147

## ๐Ÿ™ Acknowledgments

- OpenWeatherMap for providing weather data API
- OpenAI for natural language processing capabilities
- Flask framework for web development
- Bootstrap for responsive UI components

---

**ยฉ 2026 RSK World. All rights reserved.**
*Content used for educational purposes only. View Disclaimer: https://rskworld.in/disclaimer.php*
PROJECT_SUMMARY.md
Raw Download

PROJECT_SUMMARY.md

# Weather Chatbot - Project Summary
## ==================================

**Author:** RSK World (https://rskworld.in)
**Year:** 2026

This document summarizes all files, features, and fixes implemented in the Weather Chatbot project.

---

## โœ… Files Created/Added

### 1. Configuration Files
- **.env.example** - Complete environment variables template (attempted - file filtered)
- **.dockerignore** - Docker ignore patterns
- **pytest.ini** - Pytest configuration
- **.pre-commit-config.yaml** - Pre-commit hooks configuration
- **MANIFEST.in** - Package manifest for distribution

### 2. Documentation Files
- **API.md** - Comprehensive API documentation
- **LICENSE** - MIT License file
- **CONTRIBUTING.md** - Contributing guidelines
- **CHANGELOG.md** - Version history and changelog
- **INSTALL.md** - Detailed installation guide
- **PROJECT_SUMMARY.md** - This file (project summary)

### 3. Template Files
- **templates/errors/404.html** - Custom 404 error page
- **templates/errors/500.html** - Custom 500 error page

### 4. Static Files
- **static/script.js** - Separated JavaScript code from HTML template
- **static/uploads/.gitkeep** - Uploads directory placeholder
- **cache/.gitkeep** - Cache directory placeholder
- **sessions/.gitkeep** - Sessions directory placeholder

### 5. Test Files
- **tests/__init__.py** - Test package initialization
- **tests/test_app.py** - Application tests
- **tests/test_weather_api.py** - Weather API tests
- **tests/test_utils.py** - Utility functions tests
- **tests/conftest.py** - Pytest configuration and fixtures

### 6. Scripts
- **scripts/init_db.py** - Database initialization script

### 7. Docker Files
- **Dockerfile** - Docker container configuration
- **docker-compose.yml** - Docker Compose configuration with PostgreSQL and Redis
- **nginx.conf** - Nginx reverse proxy configuration

### 8. Build Files
- **Makefile** - Make commands for common tasks

### 9. Directory Structure
- **logs/** - Logs directory with .gitkeep
- **tests/** - Test directory
- **scripts/** - Utility scripts directory
- **templates/errors/** - Error pages directory
- **static/uploads/** - Uploads directory
- **cache/** - Cache directory
- **sessions/** - Sessions directory

---

## โœ… Features Added

### 1. Error Handling
- โœ… Custom 404 error page
- โœ… Custom 500 error page
- โœ… Error handlers for 403, 429 (rate limit)
- โœ… JSON error responses for API endpoints
- โœ… HTML error pages for web interface

### 2. Security Enhancements
- โœ… CORS configuration with Flask-CORS
- โœ… Security headers (X-Frame-Options, X-Content-Type-Options, etc.)
- โœ… Proxy fix middleware for production
- โœ… HTTPS-ready configuration

### 3. API Enhancements
- โœ… `/api/status` - API status endpoint
- โœ… `/api/search/cities` - City search endpoint
- โœ… `/api/compare` - City comparison endpoint
- โœ… `/api/stats` - API statistics endpoint

### 4. Code Organization
- โœ… Separated JavaScript into external file (script.js)
- โœ… Improved code structure and organization
- โœ… Better separation of concerns

### 5. Testing Infrastructure
- โœ… Complete test suite structure
- โœ… Pytest configuration
- โœ… Test fixtures and mocks
- โœ… Coverage reporting setup

### 6. Docker Support
- โœ… Dockerfile for containerization
- โœ… Docker Compose with PostgreSQL and Redis
- โœ… Nginx reverse proxy configuration
- โœ… Health checks

### 7. Development Tools
- โœ… Makefile for common tasks
- โœ… Pre-commit hooks configuration
- โœ… Code quality tools (Black, Flake8, MyPy)
- โœ… Database initialization script

### 8. Documentation
- โœ… Comprehensive API documentation
- โœ… Installation guide
- โœ… Contributing guidelines
- โœ… Changelog
- โœ… Project summary

---

## โœ… Bugs Fixed

### 1. **utils/rate_limiting.py**
- โœ… Fixed `cache_weather_data` and `get_cached_weather_data` methods to use proper CacheManager API
- โœ… Corrected cache key generation pattern

### 2. **utils/notifications.py**
- โœ… Added missing `push_config` parameter to `__init__` method

### 3. **utils/database.py**
- โœ… Added missing `get_connection()` method for database access

### 4. **requirements.txt**
- โœ… Removed built-in module `smtplib` from dependencies

### 5. **utils/__init__.py**
- โœ… Added `WeatherDatabase` to exports list

### 6. **templates/index.html**
- โœ… Removed duplicate inline JavaScript code
- โœ… Updated to use external script.js file

---

## โœ… Missing Files Added

### Core Files
1. โœ… Error page templates (404, 500)
2. โœ… Separate JavaScript file (script.js)
3. โœ… Docker configuration files
4. โœ… Test suite files
5. โœ… Documentation files
6. โœ… Build and deployment files

### Configuration Files
1. โœ… pytest.ini
2. โœ… .pre-commit-config.yaml
3. โœ… .dockerignore
4. โœ… Makefile
5. โœ… nginx.conf
6. โœ… MANIFEST.in

### Documentation
1. โœ… API.md - API documentation
2. โœ… LICENSE - MIT License
3. โœ… CONTRIBUTING.md - Contributing guide
4. โœ… CHANGELOG.md - Version history
5. โœ… INSTALL.md - Installation guide
6. โœ… PROJECT_SUMMARY.md - This summary

### Test Files
1. โœ… tests/__init__.py
2. โœ… tests/test_app.py
3. โœ… tests/test_weather_api.py
4. โœ… tests/test_utils.py
5. โœ… tests/conftest.py

### Scripts
1. โœ… scripts/init_db.py

---

## โœ… Features Added/Enhanced

### API Endpoints
1. โœ… `/health` - Health check (enhanced with version info)
2. โœ… `/api/status` - API status and information
3. โœ… `/api/search/cities` - City search functionality
4. โœ… `/api/compare` - Weather comparison between cities
5. โœ… `/api/stats` - API usage statistics

### Error Handling
1. โœ… Custom 404 error page
2. โœ… Custom 500 error page
3. โœ… Error handlers for all common HTTP errors
4. โœ… JSON error responses for API endpoints
5. โœ… HTML error pages for web interface

### Security
1. โœ… CORS support with Flask-CORS
2. โœ… Security headers middleware
3. โœ… Proxy fix for production deployments
4. โœ… HTTPS-ready configuration
5. โœ… Input validation and sanitization

### Testing
1. โœ… Complete test suite structure
2. โœ… Unit tests for application
3. โœ… Unit tests for weather API
4. โœ… Unit tests for utilities
5. โœ… Test fixtures and mocks
6. โœ… Coverage reporting

### Docker & Deployment
1. โœ… Dockerfile for containerization
2. โœ… Docker Compose with services
3. โœ… Nginx reverse proxy configuration
4. โœ… Health checks
5. โœ… Production-ready setup

### Development Tools
1. โœ… Makefile for automation
2. โœ… Pre-commit hooks
3. โœ… Code quality tools
4. โœ… Database initialization script
5. โœ… Build scripts

### Documentation
1. โœ… Comprehensive API documentation
2. โœ… Installation guide
3. โœ… Contributing guidelines
4. โœ… Changelog tracking
5. โœ… Code comments and docstrings

---

## โœ… Project Structure (Complete)

```
weather-chatbot/
โ”œโ”€โ”€ app.py # Main Flask application
โ”œโ”€โ”€ chatbot.py # Simple chatbot class
โ”œโ”€โ”€ config.py # Configuration settings
โ”œโ”€โ”€ weather_api.py # Weather API wrapper
โ”œโ”€โ”€ run.py # Application runner
โ”œโ”€โ”€ setup.py # Package setup
โ”œโ”€โ”€ requirements.txt # Python dependencies
โ”œโ”€โ”€ .env.example # Environment variables template
โ”œโ”€โ”€ .gitignore # Git ignore patterns
โ”œโ”€โ”€ .dockerignore # Docker ignore patterns
โ”œโ”€โ”€ pytest.ini # Pytest configuration
โ”œโ”€โ”€ .pre-commit-config.yaml # Pre-commit hooks
โ”œโ”€โ”€ Makefile # Make commands
โ”œโ”€โ”€ MANIFEST.in # Package manifest
โ”œโ”€โ”€ nginx.conf # Nginx configuration
โ”œโ”€โ”€ docker-compose.yml # Docker Compose config
โ”œโ”€โ”€ Dockerfile # Docker configuration
โ”œโ”€โ”€ README.md # Main documentation
โ”œโ”€โ”€ API.md # API documentation
โ”œโ”€โ”€ LICENSE # MIT License
โ”œโ”€โ”€ CONTRIBUTING.md # Contributing guide
โ”œโ”€โ”€ CHANGELOG.md # Version history
โ”œโ”€โ”€ INSTALL.md # Installation guide
โ”œโ”€โ”€ PROJECT_SUMMARY.md # This file
โ”œโ”€โ”€ static/ # Static files
โ”‚ โ”œโ”€โ”€ style.css # Stylesheet
โ”‚ โ”œโ”€โ”€ script.js # JavaScript
โ”‚ โ””โ”€โ”€ uploads/ # Upload directory
โ”‚ โ””โ”€โ”€ .gitkeep
โ”œโ”€โ”€ templates/ # HTML templates
โ”‚ โ”œโ”€โ”€ index.html # Main page
โ”‚ โ””โ”€โ”€ errors/ # Error pages
โ”‚ โ”œโ”€โ”€ 404.html # Not found page
โ”‚ โ””โ”€โ”€ 500.html # Server error page
โ”œโ”€โ”€ utils/ # Utility modules
โ”‚ โ”œโ”€โ”€ __init__.py # Package init
โ”‚ โ”œโ”€โ”€ advanced_nlp.py # NLP processing
โ”‚ โ”œโ”€โ”€ rate_limiting.py # Rate limiting
โ”‚ โ”œโ”€โ”€ multilang.py # Multi-language
โ”‚ โ”œโ”€โ”€ weather_maps.py # Weather maps
โ”‚ โ”œโ”€โ”€ notifications.py # Notifications
โ”‚ โ”œโ”€โ”€ comparison.py # City comparison
โ”‚ โ”œโ”€โ”€ geolocation.py # Geolocation
โ”‚ โ”œโ”€โ”€ auth.py # Authentication
โ”‚ โ”œโ”€โ”€ database.py # Database operations
โ”‚ โ”œโ”€โ”€ analytics.py # Analytics
โ”‚ โ””โ”€โ”€ weather_utils.py # Weather utilities
โ”œโ”€โ”€ tests/ # Test files
โ”‚ โ”œโ”€โ”€ __init__.py # Test package
โ”‚ โ”œโ”€โ”€ conftest.py # Pytest config
โ”‚ โ”œโ”€โ”€ test_app.py # App tests
โ”‚ โ”œโ”€โ”€ test_weather_api.py # API tests
โ”‚ โ””โ”€โ”€ test_utils.py # Utils tests
โ”œโ”€โ”€ scripts/ # Utility scripts
โ”‚ โ””โ”€โ”€ init_db.py # DB initialization
โ”œโ”€โ”€ logs/ # Log files
โ”‚ โ””โ”€โ”€ .gitkeep
โ”œโ”€โ”€ cache/ # Cache directory
โ”‚ โ””โ”€โ”€ .gitkeep
โ””โ”€โ”€ sessions/ # Session files
โ””โ”€โ”€ .gitkeep
```

---

## โœ… All Issues Fixed

1. โœ… **Missing return statement** in `get_cached_weather_data` - Fixed
2. โœ… **Missing push_config** initialization - Fixed
3. โœ… **Missing get_connection method** in database - Fixed
4. โœ… **smtplib in requirements** - Removed (built-in)
5. โœ… **Missing exports** in __init__.py - Fixed
6. โœ… **Duplicate JavaScript code** - Separated into script.js
7. โœ… **Missing error pages** - Created 404 and 500 pages
8. โœ… **Missing error handlers** - Added comprehensive error handling
9. โœ… **Missing CORS** - Added Flask-CORS support
10. โœ… **Missing security headers** - Added security middleware
11. โœ… **Missing API endpoints** - Added status, search, compare, stats
12. โœ… **Missing test files** - Created complete test suite
13. โœ… **Missing Docker files** - Created Dockerfile and docker-compose.yml
14. โœ… **Missing documentation** - Created comprehensive docs
15. โœ… **Missing build tools** - Added Makefile and build scripts

---

## โœ… Verification

### Compilation Status
- โœ… All Python files compile successfully
- โœ… No syntax errors found
- โœ… No import errors found
- โœ… All dependencies correctly specified

### File Completeness
- โœ… All required files present
- โœ… All directories created
- โœ… All placeholder files (.gitkeep) added
- โœ… All configuration files present

### Feature Completeness
- โœ… Error handling implemented
- โœ… Security features added
- โœ… API endpoints complete
- โœ… Testing infrastructure ready
- โœ… Docker support complete
- โœ… Documentation complete

---

## ๐Ÿ“ Notes

1. **.env.example** file creation was attempted but filtered by globalignore. The content is ready and should be manually created if needed.

2. **Optional Dependencies**: Some features require optional dependencies (Redis, PostgreSQL, etc.) which are listed in requirements.txt but can work without them using fallbacks.

3. **Database**: The application defaults to SQLite but supports PostgreSQL and MySQL through DATABASE_URL configuration.

4. **Testing**: All test files are created. Run `pytest` to execute tests.

5. **Docker**: Full Docker support with docker-compose for production deployment including PostgreSQL and Redis.

---

## ๐ŸŽฏ Summary

All missing files have been added, all errors have been fixed, and all required features have been implemented. The Weather Chatbot application is now complete with:

- โœ… Complete error handling
- โœ… Security enhancements
- โœ… Comprehensive API
- โœ… Full test suite
- โœ… Docker support
- โœ… Complete documentation
- โœ… Development tools
- โœ… Production-ready configuration

The application is ready for development, testing, and deployment!

---

**ยฉ 2026 RSK World. All rights reserved.**
templates/index.html
Raw Download
Find: Go to:
<!DOCTYPE html>
<html lang="en">
<head>
    <!--
    Weather Chatbot - Web Interface
    =================================
    
    Author: RSK World (https://rskworld.in)
    Founded by: Molla Samser
    Designer & Tester: Rima Khatun
    Contact: +91 93305 39277, hello@rskworld.in, support@rskworld.in
    Location: Nutanhat, Mongolkote, Purba Burdwan, West Bengal, India, 713147
    Year: 2026
    
    Description: Web interface for the Weather Chatbot application
    providing forecasts, alerts, and weather information.
    -->
    
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="Weather Chatbot - Get real-time weather forecasts, alerts, and weather information using natural language">
    <meta name="keywords" content="weather, chatbot, forecast, alerts, temperature, rain, storm, climate">
    <meta name="author" content="RSK World">
    
    <title>Weather Chatbot - RSK World</title>
    
    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- Font Awesome -->
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
    <!-- Custom CSS -->
    <style>
        :root {
            --primary-color: #007bff;
            --secondary-color: #6c757d;
            --success-color: #28a745;
            --danger-color: #dc3545;
            --warning-color: #ffc107;
            --info-color: #17a2b8;
            --light-color: #f8f9fa;
            --dark-color: #343a40;
            --gradient-bg: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            --card-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: var(--gradient-bg);
            min-height: 100vh;
            margin: 0;
            padding: 0;
        }

        .main-container {
            min-height: 100vh;
            display: flex;
            flex-direction: column;
        }

        .header {
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(10px);
            box-shadow: 0 2px 20px rgba(0, 0, 0, 0.1);
            padding: 1rem 0;
        }

        .logo {
            font-size: 1.8rem;
            font-weight: bold;
            color: var(--primary-color);
            text-decoration: none;
            display: flex;
            align-items: center;
            gap: 0.5rem;
        }

        .chat-container {
            flex: 1;
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 2rem;
        }

        .chat-card {
            background: white;
            border-radius: 20px;
            box-shadow: var(--card-shadow);
            width: 100%;
            max-width: 800px;
            height: 600px;
            display: flex;
            flex-direction: column;
            overflow: hidden;
        }

        .chat-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 1.5rem;
            text-align: center;
            border-bottom: 1px solid rgba(255, 255, 255, 0.1);
        }

        .chat-messages {
            flex: 1;
            overflow-y: auto;
            padding: 1.5rem;
            background: #f8f9fa;
            display: flex;
            flex-direction: column;
            gap: 1rem;
        }

        .message {
            max-width: 80%;
            padding: 0.8rem 1.2rem;
            border-radius: 18px;
            word-wrap: break-word;
            animation: fadeIn 0.3s ease-in;
        }

        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(10px); }
            to { opacity: 1; transform: translateY(0); }
        }

        .user-message {
            align-self: flex-end;
            background: var(--primary-color);
            color: white;
            border-bottom-right-radius: 4px;
        }

        .bot-message {
            align-self: flex-start;
            background: white;
            color: var(--dark-color);
            border: 1px solid #e9ecef;
            border-bottom-left-radius: 4px;
        }

        .weather-info {
            background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
            color: white;
            padding: 1rem;
            border-radius: 12px;
            margin-top: 0.5rem;
        }

        .weather-details {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
            gap: 0.5rem;
            margin-top: 0.5rem;
        }

        .weather-detail {
            text-align: center;
            padding: 0.5rem;
            background: rgba(255, 255, 255, 0.1);
            border-radius: 8px;
        }

        .chat-input-container {
            padding: 1.5rem;
            background: white;
            border-top: 1px solid #e9ecef;
        }

        .chat-input {
            border: 2px solid #e9ecef;
            border-radius: 25px;
            padding: 0.8rem 1.5rem;
            font-size: 1rem;
            transition: all 0.3s ease;
            width: 100%;
        }

        .chat-input:focus {
            outline: none;
            border-color: var(--primary-color);
            box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.1);
        }

        .send-button {
            background: var(--primary-color);
            color: white;
            border: none;
            border-radius: 50%;
            width: 50px;
            height: 50px;
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            transition: all 0.3s ease;
            margin-left: 1rem;
        }

        .send-button:hover {
            background: #0056b3;
            transform: scale(1.05);
        }

        .send-button:disabled {
            background: var(--secondary-color);
            cursor: not-allowed;
            transform: scale(1);
        }

        .typing-indicator {
            display: none;
            align-items: center;
            gap: 0.3rem;
            padding: 0.8rem 1.2rem;
            background: white;
            border: 1px solid #e9ecef;
            border-radius: 18px;
            border-bottom-left-radius: 4px;
            width: fit-content;
        }

        .typing-dot {
            width: 8px;
            height: 8px;
            background: var(--secondary-color);
            border-radius: 50%;
            animation: typing 1.4s infinite ease-in-out;
        }

        .typing-dot:nth-child(1) { animation-delay: -0.32s; }
        .typing-dot:nth-child(2) { animation-delay: -0.16s; }

        @keyframes typing {
            0%, 80%, 100% { transform: scale(0.8); opacity: 0.5; }
            40% { transform: scale(1); opacity: 1; }
        }

        .quick-actions {
            display: flex;
            gap: 0.5rem;
            margin-bottom: 1rem;
            flex-wrap: wrap;
        }

        .quick-action-btn {
            background: var(--light-color);
            border: 1px solid #dee2e6;
            border-radius: 20px;
            padding: 0.5rem 1rem;
            font-size: 0.9rem;
            cursor: pointer;
            transition: all 0.3s ease;
        }

        .quick-action-btn:hover {
            background: var(--primary-color);
            color: white;
            border-color: var(--primary-color);
        }

        .footer {
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(10px);
            text-align: center;
            padding: 1rem;
            color: var(--secondary-color);
            border-top: 1px solid rgba(0, 0, 0, 0.1);
        }

        .footer a {
            color: var(--primary-color);
            text-decoration: none;
        }

        .footer a:hover {
            text-decoration: underline;
        }

        @media (max-width: 768px) {
            .chat-container {
                padding: 1rem;
            }
            
            .chat-card {
                height: 500px;
                border-radius: 15px;
            }
            
            .message {
                max-width: 90%;
            }
            
            .weather-details {
                grid-template-columns: repeat(2, 1fr);
            }
        }

        .loading-spinner {
            display: none;
            width: 20px;
            height: 20px;
            border: 2px solid #f3f3f3;
            border-top: 2px solid var(--primary-color);
            border-radius: 50%;
            animation: spin 1s linear infinite;
        }

        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }
    </style>
</head>
<body>
    <div class="main-container">
        <!-- Header -->
        <header class="header">
            <div class="container">
                <div class="row align-items-center">
                    <div class="col-md-6">
                        <a href="https://rskworld.in" class="logo">
                            <i class="fas fa-cloud-sun"></i>
                            Weather Chatbot
                        </a>
                    </div>
                    <div class="col-md-6 text-md-end">
                        <small class="text-muted">
                            Powered by <a href="https://rskworld.in" target="_blank">RSK World</a> | ยฉ 2026
                        </small>
                    </div>
                </div>
            </div>
        </header>

        <!-- Chat Container -->
        <div class="chat-container">
            <div class="chat-card">
                <!-- Chat Header -->
                <div class="chat-header">
                    <h4 class="mb-0">
                        <i class="fas fa-robot me-2"></i>
                        Weather Assistant
                    </h4>
                    <small>Ask me about weather conditions, forecasts, and alerts!</small>
                </div>

                <!-- Chat Messages -->
                <div class="chat-messages" id="chatMessages">
                    <div class="message bot-message">
                        <div>๐Ÿ‘‹ Hello! I'm your Weather Assistant. I can help you with:</div>
                        <ul class="mb-0 mt-2">
                            <li>Current weather conditions</li>
                            <li>Weather forecasts</li>
                            <li>Weather alerts and warnings</li>
                        </ul>
                        <div class="mt-2">Try asking: "What's the weather in London?"</div>
                    </div>
                </div>

                <!-- Typing Indicator -->
                <div class="typing-indicator" id="typingIndicator">
                    <div class="typing-dot"></div>
                    <div class="typing-dot"></div>
                    <div class="typing-dot"></div>
                </div>

                <!-- Chat Input -->
                <div class="chat-input-container">
                    <div class="quick-actions">
                        <button class="quick-action-btn" onclick="sendQuickMessage('What\'s the weather in London?')">
                            <i class="fas fa-city me-1"></i> London
                        </button>
                        <button class="quick-action-btn" onclick="sendQuickMessage('Weather forecast for New York')">
                            <i class="fas fa-calendar me-1"></i> NYC Forecast
                        </button>
                        <button class="quick-action-btn" onclick="sendQuickMessage('Any weather alerts for Delhi?')">
                            <i class="fas fa-exclamation-triangle me-1"></i> Delhi Alerts
                        </button>
                        <button class="quick-action-btn" onclick="sendQuickMessage('How\'s the weather in Tokyo today?')">
                            <i class="fas fa-sun me-1"></i> Tokyo Today
                        </button>
                    </div>
                    <div class="input-group">
                        <input type="text" 
                               class="chat-input" 
                               id="messageInput" 
                               placeholder="Ask about weather..." 
                               onkeypress="handleKeyPress(event)">
                        <button class="send-button" id="sendButton" onclick="sendMessage()">
                            <i class="fas fa-paper-plane"></i>
                            <div class="loading-spinner" id="loadingSpinner"></div>
                        </button>
                    </div>
                </div>
            </div>
        </div>

        <!-- Footer -->
        <footer class="footer">
            <div class="container">
                <div class="row">
                    <div class="col-md-6">
                        <small>
                            <strong>RSK World</strong> | 
                            <i class="fas fa-phone me-1"></i> +91 93305 39277 | 
                            <i class="fas fa-envelope me-1"></i> hello@rskworld.in
                        </small>
                    </div>
                    <div class="col-md-6 text-md-end">
                        <small>
                            <a href="https://rskworld.in" target="_blank">Website</a> | 
                            <a href="https://rskworld.in/contact.php" target="_blank">Contact</a> | 
                            <a href="https://rskworld.in/disclaimer.php" target="_blank">Disclaimer</a>
                        </small>
                    </div>
                </div>
                <div class="mt-2">
                    <small class="text-muted">
                        Nutanhat, Mongolkote, Purba Burdwan, West Bengal, India, 713147
                    </small>
                </div>
            </div>
        </footer>
    </div>

    <!-- Bootstrap JS -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
    
    <!-- Custom JavaScript -->
    <script src="{{ url_for('static', filename='script.js') }}"></script>
</body>
</html>
435 linesโ€ข14.5 KB
markup
.gitignore
Raw Download
Find: Go to:
# Weather Chatbot Git Ignore File
# =================================
#
# Author: RSK World (https://rskworld.in)
# Founded by: Molla Samser
# Designer & Tester: Rima Khatun
# Contact: +91 93305 39277, hello@rskworld.in, support@rskworld.in
# Location: Nutanhat, Mongolkote, Purba Burdwan, West Bengal, India, 713147
# Year: 2026

# Environment variables
.env
.env.local
.env.development
.env.test
.env.production

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# Virtual environments
venv/
env/
ENV/
.venv/
.env/

# IDEs
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Logs
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Coverage directory used by tools like istanbul
coverage/
*.lcov

# nyc test coverage
.nyc_output

# Dependency directories
node_modules/
jspm_packages/

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env

# next.js build output
.next

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
public

# Storybook build outputs
.out
.storybook-out

# Temporary folders
tmp/
temp/

# Database files
*.db
*.sqlite
*.sqlite3

# Flask specific
instance/
.webassets-cache

# Pytest
.pytest_cache/
.coverage
htmlcov/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# pipenv
Pipfile.lock

# PEP 582
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# Application specific
uploads/
static/uploads/
cache/
sessions/

# API Keys and secrets
secrets.json
config.json
api_keys.txt

# Backup files
*.bak
*.backup
*.old

# Compressed files
*.zip
*.tar.gz
*.rar

# Documentation build
docs/_build/

# Local development
local/
dev/
test_data/
201 linesโ€ข2.4 KB
text
.dockerignore
Raw Download
Find: Go to:
# Docker Ignore File
# ==================
#
# Author: RSK World (https://rskworld.in)
# Year: 2026

# Git
.git
.gitignore
.gitattributes

# Environment files
.env
.env.local
.env.*.local

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
*.egg-info/
dist/
build/
*.egg

# Virtual environments
venv/
env/
ENV/
.venv/

# IDE
.vscode/
.idea/
*.swp
*.swo

# Testing
.pytest_cache/
.coverage
htmlcov/
.tox/
tests/

# Documentation
docs/_build/
*.md
!README.md

# Logs
logs/
*.log

# Database
*.db
*.sqlite
*.sqlite3

# Temporary files
tmp/
temp/
*.tmp

# OS
.DS_Store
Thumbs.db

# Application specific
uploads/
cache/
sessions/
static/uploads/

# Docker
Dockerfile
docker-compose.yml
.dockerignore
80 linesโ€ข778 B
text
๐Ÿš€ Support RSK World

Subscribe to our YouTube channel for latest tutorials & updates!



Click subscribe & support our work โค๏ธ

About RSK World

Founded by Molla Samser, with Designer & Tester Rima Khatun, RSK World is your one-stop destination for free programming resources, source code, and development tools.

Founder: Molla Samser
Designer & Tester: Rima Khatun

Development

  • Game Development
  • Web Development
  • Mobile Development
  • AI Development
  • Development Tools

Legal

  • Terms & Conditions
  • Privacy Policy
  • Disclaimer

Contact Info

Nutanhat, Mongolkote
Purba Burdwan, West Bengal
India, 713147

+91 93305 39277

hello@rskworld.in
support@rskworld.in

© 2026 RSK World. All rights reserved.

Content used for educational purposes only. View Disclaimer