Jersey Beers Alexa Skill - provides up-to-date tap list information for select North Jersey breweries (basically the ones that have scrapeable websites!)
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
.idea/inspectionProfiles
controllers
deploy
models
tests
.gitattributes
README.rst
config.py
config.sh
lambda_function.py
requirements.txt

README.rst

[bp100a] Jersey Beers

Overview

Read a tap list from a brewery's website and parse it into something that can be read off by an Alexa Skill. Even for breweries using UnTappd, I have to deal with brewery-specific formatting. Hate scraping, but what can you do...

Currently read the following formats:

  • UnTappd
    • Man Skirt
    • Alementary
    • Fort Nonsense
    • Pinelands
    • Untied Brewing
    • Demented
  • Digital Pour
    • Village Idiot
  • Beer Menus
    • Rinn Duin
  • Custom scraped
    • Twin Elephant Brewing
    • Jersey Girl
    • Departed Soles
    • Angry Erik (10/9/2018)
    • Trap Rock
    • Two Ton
    • Cypress

On the list

See issues

How it works

You can ask the following:

"ask Jersey Beers what breweries do you know?" "ask Jersey Beers what is on tap at {brewery name}?" "ask Jersey Beers to set my home brewery to {brewery name}" "ask Jersey Beers to get my home taplist"

I accept the obvious aliases for a brewery name e.g. "Alementary", "Alementary Brewery" and "Alementary Brewing", as well as "elementary". The brewery list read back will use the "shortest" name specified for the brewery. I've incorporated logging of mispronounced brewery names, so over time things should get better.

There's been a lot of testing and deployment incorporated into the codebase (not passwords!) I'm using CircleCI to both build & deploy. Deployment uses lambda versions & alias with the following flow:

  1. Build job
    • runs unit tests (+110 tests, all mocked in about 6 secs!)
    • runs PyLint (pretty darn clean)
  2. Deploy job
    • run if no errors during build
    • deploys to arn:STAGE
    • runs integration tests (.json -> lambda function)
    • deploys to arn:PROD if integration tests succeed

Running integration tests catches dumb-ass errors like missing import statements that don't show up during build.

Had to change name to "Jersey Beers" since Alexa/Amazon doesn't allow a single word invocation name (unless it's a brand). Also fixed up session state management and added tests to validate.

If you have a favorite brewery you want included, send me a message!

Regards,

Harry