# Ferrocarril Central Monitor

Check for new train schedules on the Ferrocarril Central Andino line from Lima to Huancayo.

This script monitors the Ferrocarril Central Andino website (`https://ferrocarrilcentral.com.pe/appfcca/`) for available travel dates, compares them against previously seen dates, and sends an email notification when new dates are detected. Designed to run as a cron job for automated daily checks.

- **Author**: Edward Betts
- **Email**: edward@4angle.com
- **Repository**: https://git.4angle.com/edward/ferrocarrilcentral
- **License**: MIT

## Installation

1. **Clone the Repository**:
   ```bash
   git clone https://git.4angle.com/edward/ferrocarrilcentral.git
   cd ferrocarrilcentral
   ```

2. **Install Dependencies**:
   Requires Python 3 and the following packages:
   ```bash
   pip install requests lxml
   ```

3. **Make Executable**:
   ```bash
   chmod +x check.py
   ```

## Usage

Run the script manually to test:
```bash
./check.py
```

For automated monitoring, add it to your crontab to run twice daily (e.g., 8 AM and 8 PM):
```bash
crontab -e
```
Add this line:
```
0 8,20 * * * /home/edward/src/ferrocarrilcentral/check.py
```

- **Interactive Mode**: Outputs informational messages (e.g., "New dates found") to stdout.
- **Cron Mode**: Silent unless errors occur, which are logged to stdout (captured by cron).

## Configuration

1. **Config File**:
   Create `~/.config/ferrocarril/config` (INI format) with your SMTP settings:
   ```
   [mail]
   smtp_host = your.smtp.server
   from_address = your.email@example.com
   to_address = recipient@example.com
   ```

2. **Data Storage**:
   - Previously seen dates are stored in `~/lib/data/ferrocarril_dates.json`.
   - The script creates this file automatically on the first successful run.

## How It Works

1. Fetches the webpage from `https://ferrocarrilcentral.com.pe/appfcca/`.
2. Parses available travel dates using `lxml.html`.
3. Compares against dates in `~/lib/data/ferrocarril_dates.json`.
4. Sends an email if new dates are found and updates the JSON file.

## Requirements

- Python 3.6+
- `requests` library for HTTP requests
- `lxml` library for HTML parsing
- An SMTP server for email notifications

## License

This project is licensed under the MIT License.