davidofwatkins / ge-cancellation-checker

A PhantomJS script that checks your GOES account for a sooner Global Entry enrollment appointment
173 stars 74 forks source link

⚠️ Deprecation Notice:

Warning This tool is no longer functional and is no longer being maintained. Instead, please use @Drewster727's newer and lighter-weight goes-notify! For more information, see #41.

Global Entry Appointment Cancellation Checker

This allows you to check and set up notifications for Global Entry enrollment appointment cancellations through the Global Online Enrollment System website. It uses PhantomJS, a headless browser, to log in and report back the first available open appointment. If one is found sooner than your current appointment, it will notify you by email. It does not make any changes to your account or your appointment.

Before You Begin...

This started as a fun weekend project with the intention of being used only once. While it's proven to be effective for finding an appointment cancellation, it may be worth simply dropping by your nearest Global Entry application center before taking the trouble to set this up. While an appointment is technically required, interviews are typically very short, and many have reported getting their Global Entry approval before the date of their scheduled interview.

Running the Script

Once setup, you can retrieve the soonest available appointment day with the following command:

phantomjs [--ssl-protocol=any] ge-cancellation-checker.phantom.js [-v | --verbose]

Similarly, if you only want to check to see if there is a sooner one than already scheduled, run:

./ge-checker-cron.py [--notify-osx] [--no-email] [--use-gmail] [--config CONFIGFILE]

(Note that this will send an email notification to the address in your config.json if a new appointment is found.)

Setup

Please be aware that you must first sign up and schedule an enrollment appointment via the GOES website before using this script. This does nothing more than check for the first available appointment as you would do manually through a browser like Chrome or Firefox, yourself. Also note that because this navigates the GOES website like any other browser ane updates to the GOES website may break it.

Dependencies

The following must be installed and available in your $PATH:

Note: Many ISP's block port 25, used for email. If you want to set up email notifications for appointment cancellations and your ISP blocks port 25, a good way around this is to set up Sendmail to send email through Gmail.

Docker

One simple way to run this without installing PhantomJS on your local machine is to use the included DockerFile.

# If not already cloned:
git clone https://github.com/davidofwatkins/ge-cancellation-checker.git
cd ge-cancellation-checker

# Run Docker
cp config.json.example config.json
# Make your edits to config.json
docker build -t ge-cancellation-checker .
docker run ge-cancellation-checker

Configuration

To get started, copy config.json.example to config.json. In your new config, fill out the following settings:

Please also ensure you are the only one with access to your config.json to protect your username and password.

Simultaneous multiple location checking

If you would like to check multiple nearby locations at once you need to make copies the original file you just edited and change the location code on each config file. Then in seperate windows run each copy of the diffrent locations.

Twilio SMS Notification

If you'd like to receive SMS notifications in addition to or instead of email notifications, you can do so with Twilio. Create an account and a new SMS enabled sending phone number, then fill in twilio_account_sid, twilio_auth_token, twilio_from_number, and twilio_to_number in config.json. The from and to phone numbers should be formatted like this: +18005551234. You'll also need to install the twilio Python package, with pip install twilio.

Scheduling

If you'd like to be notified of cancellations regularly, you can add the ge-checker-cron.py to your cron file with the crontab -e command. The following runs every half hour:

*/30 * * * * /path/to/global-entry-cancellation-checker/ge-checker-cron.py >/dev/null 2>&1

Of course, if using SendMail instead of Gmail (see use_gmail above), please make sure that SendMail is working before trusting this to notify you. If you want to keep a record, be sure to set a logfile path in your config.json.

Contribution

If you're interested in contributing, please take a look at CONTRIBUTING.md for welcome improvements and some quick reminders for submitting a pull request. Thanks for the help!