Skip to content

Instantly share code, notes, and snippets.

@harthur
Last active May 21, 2016 15:23
Show Gist options
  • Save harthur/4507182 to your computer and use it in GitHub Desktop.
Save harthur/4507182 to your computer and use it in GitHub Desktop.
How I got tickets to the Gymnastics finals at the Olympics
/* This node.js script checks the Olympics website for any new Women's
* Gymnastics tickets. Every five minutes it fetches the available tickets
* page for the event, and uses the cheerio (https://npmjs.org/package/cheerio)
* module to parse the page and look for the UI element that indicates there
* are tickets.
*
* If there are any tickets it plays a song using node's built in `exec()`
* function to call OS X's command line utility to play a sound file. It also
* uses the growl module (https://npmjs.org/package/growl) to post a growl
* notification.
*
* To run the script, get node.js (http://nodejs.org/). Open up the Terminal
* and install the cheerio and growl modules with the commands
* `npm install cheerio` and `npm install growl`. If you use growl you'll
* also need the growlnotify app (http://growl.info/extras.php#growlnotify).
*
* If you're not on OS X, growl won't work, but you can replace `afplay` with
* your OS's built in command to play sound.
*
* Then run the script with `node tix.js`
*/
var request = require('request'),
growl = require("growl"),
cheerio = require("cheerio"),
exec = require('child_process').exec;
var sessionURL = "http://www.tickets.london2012.com/eventdetails?id=0000455ACD8C0B72";
var fiveMinutes = 1000 * 60 * 5;
// check tickets once
checkTickets();
// then check tickets every five minutes
setInterval(checkTickets, fiveMinutes);
function checkTickets() {
console.log("checking for tickets");
request(sessionURL, function (error, response, body) {
if (error) {
console.log(error);
}
else if (response.statusCode != 200) {
console.log(response.statusCode, "error");
}
else if (hasSeats(body)) {
celebrate();
}
})
}
function hasSeats(html) {
var $ = cheerio.load(html);
var elements = $("select#price_category > option");
return elements.toArray().length;
}
function celebrate() {
console.log("Gymnastics tickets found!");
// play a song
exec("afplay ~/heartbreaker.mp3", function(err) {
if (err) console.log(err);
});
// post a growl notification
growl("Women's gymnastics tickets available!", {
title: "Tickets available",
sticky: true,
image: "./gymnast.jpg"
});
}
@harthur
Copy link
Author

harthur commented Jan 11, 2013

Steps to run:

  1. Install node.js

  2. Install required packages with npm install cheerio request growl

  3. run with node tix.js

@harthur
Copy link
Author

harthur commented Jan 11, 2013

Gymnastics time

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment