Django + Backbone app to cross-reference All Songs Considered podcast with Songkick Event API
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

#allsongsmap Readme


This is allsongsmap, a webapp that combines the NPR Story API with the Songkick API to figure out if artists featured on the All Songs Considered podcast have upcoming shows in a certain area. The vision is to come to this site, type in your zip code/ city, hit a big 'ol button and get back a list of upcoming events with links to their Songkick page so you can get tickets. Also being explored are sorting featured artists by genre and date, as well as creating a feed so you could just import this whole list right into songkick and have them send you update emails. Rock on! \o/


Vagrant details

Using the ubuntu/trusty64 box. Running apache2, python 2.7.5 and Django 1.7. Also host system should have vagrant >= 1.5 installed.

Misc Nodes

  • gotta start django with python runserver, because apparently is a loopback interface
  • sqlite3 commands are prefixed with a period
  • allsongsmap = project, musicmapper = app, webapp = client interface, externs = external resources
  • all test commands go in /dev folder
  • use to mock api requests and visualize NPRML response


Keys should be stored in keys.prop, which gets cat'd into .bash_profile

export NPRKEY='. . .'
export SONGKICKKEY='. . .'

Steps to get project running

  1. Clone from bitbucket
  2. Ensure Vagrantfile exists and vagrant >= 1.5 is installed on your system
    • vagrant box add ubuntu/trusty64 if necessary
    • Run vagrant up and ensure that all commands executed successfully
  3. Run ' syncdb' to create sqlite tables
    • Use super:pw/ for development when asked to create superusers


Logging is accomplished with pythons built in logging functionality. Inside a command,

logger = logging.getLogger(__name__) 'Finished UpdateNPR command in %s:%s:%s' % (hours, minutes, seconds) )
logger.debug( 'blah blah blah')


A matching logging handler needs to have been declared inside the top level to properly catch stuff.


Here are some details about the frontend-specific stuff.

Getting started

npm install gulp bower


Using bower to manage libraries/components

  • Backbone
  • Backbone-localstorage
  • jQuery
  • React
  • Pure
  • Require
  • Normalize


Task definitions go in the gulpfile, helpers


  • gulp-less
  • gulp-rename
  • gulp-jshint
  • gulp-concat
  • gulp-mocha
  • gulp-uglify


  • init
  • concat
  • min
  • serve
  • test
  • watch


  • /stories/
  • /stories/pk/
  • /artists/
  • /artists/pk


  • Task (resolution)
  • Implement more robust logging system
  • Fix mbid to resolve case sensitivity issues, not just take top result
  • Clean up cases where musicbrainz search returns wrong result -> Brian Eno/ David Brynne
  • Set NPRKEY and SONGKICKKEY environment variables automatically (Pipe keys.prop to bash_profile)
  • Update datetime to non-naive (Using pytz)
  • Setup puppet provisioning (check out the puppet directory and init.pp)
  • Integrate with Musicbrainz or Echonest API to get artist info and picture, track listsings
  • Create Story cards
  • Create artist cards
  • Create event cards
  • Figure out caching scheme for event and location search results
  • Implement library for location search using zip code
  • Deploy on Linode with security features
  • Migrate development management to a pure gulp setup, route through this
  • Why is gulp-less throwing a missing module error? (Needed to update global npm to include promises module)
  • Update libraries to latest versions, especially Django REST Framework