rewrite README: remove emojis, honest auto-apply status
This commit is contained in:
parent
ce66fc1933
commit
59eb94bd15
1 changed files with 81 additions and 103 deletions
184
README.md
184
README.md
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue