Skip to main content

yawgbot

PyPI version Code style: black

Yet Another WG helper bot. WG stands for Wohngemeinschaft, a German word that refers to a living arrangement in which several tenants share an apartment. It is aimed to automate the extremely complex and time-consuming task of finding a room or an apartment to rent. Initially it was only working for wg-gesucht.de, now it's a plugin-based system ready to be extended for every platform to find accommodation.

From a technical standpoint yawgbot is a simple tool that runs different plugins. A plugin either scrapes websites using requests and beautifulsoup4 or uses APIs (both public and undocumented) both to search for listings and to contact landlords. It uses a SQLite database to save contacted ads and to perform fewer requests to platforms. It also comes with a simple web UI to track your progress and gather your findings across different platforms.
The database is stored:

  • on GNU/Linux at ~/.local/share/yawgbot/yawgbot.sqlite
  • on Windows at %USERPROFILE%\AppData\Local\rcastellotti\yawgbot\yawgbot.sqlite
  • on macOS at ~/Library/Application Support/yawgbot/yawgbot.sqlite

running manually

To run the bot manually:

  • install the package with pip3 install yawgbot (a virtual environment is suggested)
  • configure .config.myl, stored
    • on GNU/Linux at ~/.config/yawgbot/config.yml
    • on Windows at %USERPROFILE%\AppData\Local\rcastellotti\yawgbot\config.yml
    • on macOS at ~/Library/Preferences/yawgbot/config.yml
  • create a new file named bot.py with the following content and run it:
from yawgbot import Bot
import logging

logging.basicConfig(level=logging.INFO)
bot = Bot(platforms=["wg-gesucht"])
bot.run()

running periodically with celery

Running in background at time intervals is achieved using Celery to schedule tasks. It is configured to use SQLite as both backend and broker, to know more read the docs. The file run_yawgbot.py, for example, runs the bot each 5 minutes, to use it:

  • run celery -A run_yawgbot.celery worker --loglevel=INFO to run the worker
  • run celery -A run_yawgbot.celery beat to schedule the bot

web UI

To start the web UI simply run yawgbot-web

plugins

creating a plugin

Extending yawgbot is a pretty straightforward process. A plugin is a simple module extending the PluginBase class, an example is wg-gesucht.py, supported plugins can be used just by instantiating Bot with the platforms argument. Custom plugins can be registered using the Bot.register_plugin() method.
To start creating a template you can use this boilerplate code:

from yawgbot.pluginBase import PluginBase


class YawgbotPlugin(PluginBase):
    def __init__(self):
        pass

    def get_ads(self, url):
        pass

    def parse_ad(self, ad):
        pass

    def contact_ad(self, slug):
        pass

    def run(self):
        pass

If you develop a plugin, consider creating a PR, I will be more than happy to work with you to make it an official plugin and ship it with yawgbot.

Each plugin should load configuration values using the static Bot.config() method.
To better understand plugins you can read the code in src/yawgbot/plugins.

wg-gesucht

config

wg-gesucht:
  username: ""
  password: ""
  message_template: ""
  base_url: ""

When configuring for use go on https://wg-gesucht.de and copy the url you are using to look for accommodation, then replace the last number with {} in order to be able to search across multiple pages, for example, if looking for apartments in Munich: base url is https://www.wg-gesucht.de/1-zimmer-wohnungen-in-Munchen.90.1.1.1.html , replace the last 1 as follows: https://www.wg-gesucht.de/1-zimmer-wohnungen-in-Munchen.90.1.1.{}.html

building

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yawgbot-0.0.6.tar.gz (20.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yawgbot-0.0.6-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file yawgbot-0.0.6.tar.gz.

File metadata

  • Download URL: yawgbot-0.0.6.tar.gz
  • Upload date:
  • Size: 20.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for yawgbot-0.0.6.tar.gz
Algorithm Hash digest
SHA256 a240e4f49869fb5ae6d02c09b6459c599b70ec507dcd93f8e0264c9a56488ca0
MD5 de724c8a6e6327c67caf5d0617403fe0
BLAKE2b-256 80e3e764e53158d96eeff9b1586145b6cea367c34822ac7a4c4d83e523aebc62

See more details on using hashes here.

File details

Details for the file yawgbot-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: yawgbot-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for yawgbot-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 4a886af370c7cd2554de16c7c1c1f41c5f3bd4d6d110dd727f7aecd5a0b090f1
MD5 938e1607743e5de90d2b142e7df3f755
BLAKE2b-256 65b629fa064935f94093249a85d78d7b81120519ba066bea9b8c74452604595c

See more details on using hashes here.

Release history Release notifications | RSS feed

0.0.7

2 files

This release

0.0.6 This release

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page