rewrite README: remove emojis, honest auto-apply status

This commit is contained in:
Aron Petau 2025-12-09 11:44:40 +01:00
parent ce66fc1933
commit 59eb94bd15

184
README.md
View file

@ -1,137 +1,115 @@
# inberlin-monitor
Monitors [inberlinwohnen.de](https://www.inberlinwohnen.de/wohnungsfinder/) and [wgcompany.de](http://www.wgcompany.de) for new apartment/WG listings and sends Telegram notifications. Supports automatic application submission via autopilot mode.
A Python bot that monitors Berlin's public housing portal (inberlinwohnen.de) and WG rooms (wgcompany.de). Sends Telegram notifications when new listings appear and can automatically apply to some listings.
## Features
## What it does
- 🔐 Logs in to your personal Wohnungsfinder for filtered results
- ⏰ Checks every 5 minutes (configurable)
- 📱 Sends Telegram notifications for new listings with clickable links
- 🤖 **Autopilot mode**: Automatically applies to new listings
- 📊 **/plot command**: Visualize when listings appear throughout the week
- 🏢 Supports 6 housing companies: HOWOGE, Gewobag, Degewo, Gesobau, Stadt und Land, WBM
- 🏠 **WGcompany.de**: Also monitors WG room listings with configurable search filters
- 💾 Persists state to detect only truly new listings
- 📈 Logs listing times for pattern analysis
- Monitors inberlinwohnen.de for new apartment listings from 6 housing companies (HOWOGE, Gewobag, Degewo, Gesobau, Stadt und Land, WBM)
- Monitors wgcompany.de for WG room listings with configurable filters
- Sends Telegram notifications with listing details
- Logs listing times to CSV for pattern analysis
- Auto-apply feature for supported housing companies
## Supported Housing Companies
## Auto-Apply Support
| Company | Auto-Apply | Notes |
|---------|------------|-------|
| HOWOGE | ✅ | Direct form submission |
| Gewobag | ✅ | Direct form submission |
| Degewo | ✅ | Via Wohnungshelden portal |
| Gesobau | ✅ | Direct form submission |
| Stadt und Land | ✅ | Direct form submission |
| WBM | ✅ | Direct form submission |
The auto-apply feature is experimental and only works for some housing companies:
| Company | Status | Notes |
|---------|--------|-------|
| HOWOGE | Working | Tested and functional |
| Degewo | Experimental | Uses Wohnungshelden portal, may need maintenance |
| Gewobag | Not working | Needs implementation |
| Gesobau | Not working | Needs implementation |
| Stadt und Land | Not working | Needs implementation |
| WBM | Not working | Needs implementation |
| WGcompany | Not supported | Monitoring only, no auto-apply |
## Setup
### 1. Create Telegram Bot
1. Message [@BotFather](https://t.me/botfather) on Telegram
2. Send `/newbot` and follow the prompts
3. Copy the bot token
### 2. Get Your Chat ID
1. Message your new bot (send anything)
2. Visit: `https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates`
3. Find `"chat":{"id":123456789}` - that's your chat ID
### 3. Configure
### Docker (recommended)
```bash
cp .env.example .env
# Edit .env with your credentials
```
### 4. Run
```bash
docker compose up -d
```
### 5. Check Logs
### Local development
```bash
docker compose logs -f
# or
cat data/monitor.log
pip install -r requirements.txt
playwright install chromium
export TELEGRAM_BOT_TOKEN=your_token
export TELEGRAM_CHAT_ID=your_chat_id
# ... other env vars
python monitor.py
```
## Telegram Commands
| Command | Description |
|---------|-------------|
| `/autopilot on` | Enable automatic applications |
| `/autopilot off` | Disable automatic applications |
| `/status` | Show current status and application stats |
| `/plot` | Generate weekly listing pattern visualization |
| `/help` | Show available commands |
## Configuration
### Required
### Required environment variables
| Variable | Description |
|----------|-------------|
| `TELEGRAM_BOT_TOKEN` | Telegram bot token from BotFather |
| `TELEGRAM_CHAT_ID` | Your Telegram chat ID |
- `TELEGRAM_BOT_TOKEN` - Bot token from @BotFather
- `TELEGRAM_CHAT_ID` - Your Telegram chat ID
### Optional - Login
### InBerlin login (required for auto-apply)
| Variable | Description | Default |
|----------|-------------|---------|
| `INBERLIN_EMAIL` | inberlinwohnen.de login email | - |
| `INBERLIN_PASSWORD` | inberlinwohnen.de password | - |
| `CHECK_INTERVAL` | Seconds between checks | 300 |
- `INBERLIN_EMAIL` - Your inberlinwohnen.de email
- `INBERLIN_PASSWORD` - Your inberlinwohnen.de password
### Optional - Form Data (for Autopilot)
### Form data (for auto-apply)
| Variable | Description | Default |
|----------|-------------|---------|
| `FORM_ANREDE` | Salutation (Herr/Frau) | Herr |
| `FORM_VORNAME` | First name | - |
| `FORM_NACHNAME` | Last name | - |
| `FORM_EMAIL` | Contact email | - |
| `FORM_PHONE` | Phone number | - |
| `FORM_STRASSE` | Street name | - |
| `FORM_HAUSNUMMER` | House number | - |
| `FORM_PLZ` | Postal code | - |
| `FORM_ORT` | City | Berlin |
| `FORM_PERSONS` | Number of persons moving in | 1 |
| `FORM_CHILDREN` | Number of children | 0 |
| `FORM_INCOME` | Monthly household net income (€) | - |
- `FORM_ANREDE` - Salutation (Herr/Frau)
- `FORM_VORNAME` - First name
- `FORM_NACHNAME` - Last name
- `FORM_EMAIL` - Email address
- `FORM_PHONE` - Phone number
- `FORM_STRASSE` - Street name
- `FORM_HAUSNUMMER` - House number
- `FORM_PLZ` - Postal code
- `FORM_ORT` - City
- `FORM_PERSONS` - Number of persons in household
- `FORM_CHILDREN` - Number of children
- `FORM_INCOME` - Monthly net income
### Optional - WGcompany.de Search Filters
### WGcompany filters
| Variable | Description | Default |
|----------|-------------|---------|
| `WGCOMPANY_ENABLED` | Enable WGcompany monitoring | true |
| `WGCOMPANY_MIN_SIZE` | Minimum room size (m²) | - |
| `WGCOMPANY_MAX_SIZE` | Maximum room size (m²) | - |
| `WGCOMPANY_MIN_PRICE` | Minimum rent (€) | - |
| `WGCOMPANY_MAX_PRICE` | Maximum rent (€) | - |
| `WGCOMPANY_BEZIRK` | District code (0=all) | 0 |
- `WGCOMPANY_ENABLED` - Enable WGcompany monitoring (true/false)
- `WGCOMPANY_MIN_SIZE` - Minimum room size in sqm
- `WGCOMPANY_MAX_SIZE` - Maximum room size in sqm
- `WGCOMPANY_MIN_PRICE` - Minimum price in EUR
- `WGCOMPANY_MAX_PRICE` - Maximum price in EUR
- `WGCOMPANY_BEZIRK` - District filter (optional)
## Without Login
## Telegram Commands
If you don't provide login credentials, the monitor will use the public Wohnungsfinder (shows all listings instead of your personalized filtered results).
- `/status` - Show current status and recent listings
- `/autopilot` - Toggle auto-apply on/off
- `/listings` - Show current listings
- `/help` - Show available commands
## Data Files
## Data files
All data is stored in the `./data` directory:
All data is stored in the `data/` directory:
| File | Description |
|------|-------------|
| `listings.json` | Known inberlinwohnen listings |
| `wgcompany_listings.json` | Known WGcompany listings |
| `state.json` | Monitor state (autopilot on/off) |
| `applications.json` | Record of submitted applications |
| `listing_times.csv` | InBerlin timing data for pattern analysis |
| `wgcompany_times.csv` | WGcompany timing data |
| `monitor.log` | Application logs |
| `weekly_plot.png` | Generated plot from /plot command |
| `wgcompany_debug.html` | Debug HTML from WGcompany |
| `*.png` | Screenshots from application attempts |
- `listings.json` - Previously seen inberlinwohnen listings
- `wgcompany_listings.json` - Previously seen WGcompany listings
- `applications.json` - Application history
- `listing_times.csv` - Time series data for listings
- `state.json` - Runtime state (autopilot toggle)
- `monitor.log` - Application logs
## Debugging
When applications fail, the bot saves:
- Screenshots to `data/*.png`
- Page HTML to `data/debug_page.html`
Check these files to understand why an application failed.
## License
MIT