A real-time disaster monitoring system that scrapes social media and earthquake data to provide early warnings and situational awareness.
- Multi-Source Data Collection: Scrapes Twitter/X accounts and earthquake APIs
- AI-Powered Classification: Uses Groq LLaMA for disaster relevance detection
- Real-Time Processing: Concurrent data collection and processing
- Geographic Intelligence: Automatic location extraction and coordinate mapping
- MongoDB Storage: Scalable database with duplicate detection
- RESTful API: Flask-based endpoints for data access
backend/
├── core/ # Core application logic
│ ├── main.py # Flask API server
│ ├── classify.py # AI classification
│ ├── mongo.py # Database operations
│ ├── dict_coordinates.py # Location services
│ ├── logger.py # Logging configuration
│ └── validators.py # Data validation
├── scrapers/ # Data collection modules
│ ├── x_scrap.py # Twitter scraper
│ └── seismo_scrap.py # Earthquake scraper
├── utils/ # Utility tools
│ ├── pop_data.py # Database population
│ └── clear.py # Database cleanup
├── config/ # Configuration files
│ ├── config.py # Application settings
│ ├── requirements.txt # Dependencies
│ └── twitter_cookies1.json # Session cookies
├── data/ # Data storage
│ ├── earthquake/ # Earthquake data
│ └── tweets/ # Tweet data
├── unused/ # Legacy/unused files
└── run.py # Application entry point
-
Install Dependencies
pip install -r config/requirements.txt
-
Configure Chrome Driver
- Download ChromeDriver and place in
C:\\Program Files\\Driver\\chromedriver.exe - Or update
CHROME_DRIVER_PATHinconfig/config.py
- Download ChromeDriver and place in
-
Configure Database
- Update MongoDB connection string in
config/config.py
- Update MongoDB connection string in
python run.pyGET /health- Health check endpointGET /fetch_socials- Collect disaster data from all sources
{
"status": "success",
"message": "Collected 18 total records",
"results": {
"x_data": [...],
"earthquake_data": [...]
}
}Key settings in config/config.py:
- Database: MongoDB connection and collection settings
- API Keys: Groq AI API configuration
- Scrapers: Twitter accounts, limits, timeouts
- Paths: Data directories, Chrome driver location
- Collection: Concurrent scraping from Twitter and earthquake APIs
- Classification: AI-powered disaster type and severity classification
- Enhancement: Geographic coordinate addition via OpenStreetMap
- Storage: MongoDB storage with duplicate prevention
- Response: JSON API response with collected data
- Separated concerns into logical modules
- Configuration management system
- Consistent project structure
- Comprehensive try-catch blocks
- Graceful degradation on failures
- Input validation and sanitization
- Structured logging with different levels
- File and console output
- Request/operation tracking
- Connection pooling for MongoDB
- Concurrent data collection
- Optimized Selenium operations
- Clear separation of configuration
- Modular function design
- Comprehensive documentation
- Health check endpoints
- Proper error responses
- Environment-based configuration
- Flask: Web API framework
- Selenium: Web scraping automation
- BeautifulSoup: HTML parsing
- PyMongo: MongoDB driver
- OpenAI: Groq AI integration
- Requests: HTTP client
pytest tests/black .
flake8 .from utils.clear import clear_database
from utils.pop_data import populate_dataThis project is for educational and disaster monitoring purposes.