SkillAgentSearch skills...

JobApplicationBot

A bot that automatically sends emails to new ads posted in any desired xe.gr search url.

Install / Use

/learn @drkostas/JobApplicationBot
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Auto Apply Bot

CircleCI GitHub license

Table of Contents

About <a name = "about"></a>

A bot that automatically sends emails to new ads posted in any desired xe.gr search url.

In just a few minutes of configuring until it suits your needs, it can easily be deployed and start sending your specified emails to every new ad that gets posted in the search url you select within xe.gr.

With a little programming, you can also modify the XeGrAdSiteCrawler class and make it support other advertisement sites too. Feel free to fork.

Getting Started <a name = "getting_started"></a>

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.

Prerequisites <a name = "prerequisites"></a>

You need to have a machine with Python > 3.6 and any Bash based shell (e.g. zsh) installed.

$ python3.6 -V
Python 3.6.9

echo $SHELL
/usr/bin/zsh

You will also need to setup the following:

Set the required environment variables <a name = "env_variables"></a>

In order to run the main.py or the tests you will need to set the following environmental variables in your system:

DROPBOX_API_KEY=<VALUE>
MYSQL_HOST=<VALUE>
MYSQL_USERNAME=<VALUE>
MYSQL_PASSWORD=<VALUE>
MYSQL_DB_NAME=<VALUE>
EMAIL_ADDRESS=<VALUE>
GMAIL_API_KEY=<VALUE>
CHECK_INTERVAL=<VALUE>
CRAWL_INTERVAL=<VALUE>
TEST_MODE=<VALUE>
LOOKUP_URL=<VALUE>
  • LOOKUP_URL (str): The url that matches your desired search results. You can copy it straight from your browser.
  • CHECK_INTERVAL (int) : The seconds to wait before each check (for new ads).
  • CRAWL_INTERVAL (int) : The seconds to wait before each crawl (for the discovering of sublinks).
  • TEST_MODE (bool) : If enabled, every email will be sent to you instead of the discovered email addresses.

Modify the files in the data folder <a name = "data_files"></a>

Before starting, you should modify the emails that are going to be sent, the stop-words e.t.c.

  • stop_words.txt: A list of words that you don't want to be present in the ads that the bot sends emails to.
  • application_to_send_subject.txt: The subject of the email that is going to be sent to new ads.
  • application_to_send_body.html: The html body of the email that is going to be sent to new ads.
  • inform_success_subject.txt: The subject of the email that is going to be sent to you when the bot successfully sends an email.
  • inform_success_body.html: The html body of the email that is going to be sent to you when the bot successfully sends an email. Make sure to use the {link} and {email} vars in order to include them in the email.
  • inform_should_call.txt: The subject of the email that is going to be sent to you when the bot couldn't find any email to a new ad, and requires manual action.
  • inform_should_call_body.html: The html body of the email that is going to be sent to you when the bot couldn't find any email to a new ad, and requires manual action. Make sure to use the {link} var in order to include it in the email.
  • Attachments: Add any attachments you want to be included in the Ad Email and define their names in xegr_jobs.yml

Installing, Testing, Building <a name = "installing"></a>

All the installation steps are being handled by the Makefile.

<i>If you don't want to go through the setup steps and finish the installation and run the tests, execute the following command:</i>

$ make install server=local

<i>If you executed the previous command, you can skip through to the Running locally section.</i>

Check the available make commands <a name = "check_make_commamnds"></a>

$ make help

-----------------------------------------------------------------------------------------------------------
                                              DISPLAYING HELP                                              
-----------------------------------------------------------------------------------------------------------
make delete_venv
       Delete the current venv
make create_venv
       Create a new venv for the specified python version
make requirements
       Upgrade pip and install the requirements
make run_tests
       Run all the tests from the specified folder
make setup
       Call setup.py install
make clean_pyc
       Clean all the pyc files
make clean_build
       Clean all the build folders
make clean
       Call delete_venv clean_pyc clean_build
make install
       Call clean create_venv requirements run_tests setup
make help
       Display this message
-----------------------------------------------------------------------------------------------------------

Clean any previous builds <a name = "clean_previous"></a>

$ make clean server=local
make delete_venv
make[1]: Entering directory '/home/drkostas/Projects/AutoApplyBot'
Deleting venv..
rm -rf venv
make[1]: Leaving directory '/home/drkostas/Projects/AutoApplyBot'
make clean_pyc
make[1]: Entering directory '/home/drkostas/Projects/AutoApplyBot'
Cleaning pyc files..
find . -name '*.pyc' -delete
find . -name '*.pyo' -delete
find . -name '*~' -delete
make[1]: Leaving directory '/home/drkostas/Projects/AutoApplyBot'
make clean_build
make[1]: Entering directory '/home/drkostas/Projects/AutoApplyBot'
Cleaning build directories..
rm --force --recursive build/
rm --force --recursive dist/
rm --force --recursive *.egg-info
make[1]: Leaving directory '/home/drkostas/Projects/AutoApplyBot'

Create a new venv and install the requirements <a name = "venv_requirements"></a>

$ make create_venv server=local
Creating venv..
python3.6 -m venv ./venv

$ make requirements server=local
Upgrading pip..
venv/bin/pip install --upgrade pip wheel setuptools
Collecting pip
.................

Run the tests <a name = "tests"></a>

The tests are located in the tests folder. To run all of them, execute the following command:

$ make run_tests server=local
source venv/bin/activate && \
.................

Build the project locally <a name = "build_locally"></a>

To build the project locally using the setup.py command, execute the following command:

$ make setup server=local
venv/bin/python setup.py install '--local'
running install
.................

Running the code locally <a name = "run_locally"></a>

In order to run the code now, you will only need to change the yml file if you need to and run either the main or the created console script.

Modifying the Configuration <a name = "configuration"></a>

There is an already configured yml file under xegr_jobs.yml with the following structure:

tag: production
lookup_url: !ENV ${LOOKUP_URL}
check_interval: !ENV ${CHECK_INTERVAL}
crawl_interval: !ENV ${CRAWL_INTERVAL}
test_mode: !ENV ${TEST_MODE}
cloudstore:
  - config:
      api_key: !ENV ${DROPBOX_API_KEY}
      local_files_folder: data
      attachments_names:
        - cv.pdf
        - cover_letter.pdf
      update_attachments: true
      update_stop_words: true
      update_application_to_send_email: true
      update_inform_success_email: true
      update_inform_should_call_email: true
    type: dropbox
datastore:
  - config:
      hostname: !ENV ${MYSQL_HOST}
      username: !ENV ${MYSQL_USERNAME}
      password: !ENV ${MYSQL_PASSWORD}
      db_name: !ENV ${MYSQL_DB_NAME}
      port: 3306
    type: mysql
email_app:
  - config:
      email_address: !ENV ${EMAIL_ADDRESS}
      api_key: !ENV ${GMAIL_API_KEY}
    type: gmail

The !ENV flag indicates that a environmental value follows. You can change the values/environmental var names as you wish. If a yaml variable name is changed/added/deleted, the corresponding changes should be reflected on the Configuration class and the yml_schema.json too.

You can also modify each class's default options

Execution Options <a name = "execution_options"

Related Skills

View on GitHub
GitHub Stars74
CategoryDevelopment
Updated13d ago
Forks6

Languages

HTML

Security Score

100/100

Audited on Mar 23, 2026

No findings