VGReleases (Request.YQL)

Scrapping game release dates from VGReleases using Request.YQL

HTML

<select id="region">
    <option value="eu.">Europa</option>
    <option value="jp.">Japonia</option>
    <option value="au.">Australia</option>
    <option value="www.">Stany Zjednoczone</option>
</select>

<select id="platform">
    <option value="xbox360">Xbox360</option>
    <option value="ps3">Playstation 3</option>
    <option value="wii">Nintendo Wii</option>
    <option value="pc">PC</option>
    <option value="psp">Playstation Portable</option>
    <option value="nintendods">Nintendo DS</option>
</select>

<select id="month">
    <option value="4">Kwiecień</option>
    <option value="5">Maj</option>
    <option value="6">Czerwiec</option>
</select>

<select id="year">
    <option value="2012">2012</option>
</select>

<button id="get-releases">Pobierz</button>

<ul id="games-list"></ul>

CSS

body {
    font-family: Helvetica;
    font-size: 12px;
    padding: 10px;
}

#games-list {
    margin-top: 20px;
}

#games-list li {
    margin-top: 4px;
    height: 100%;
    overflow: hidden;    
}

img {
    float: left;
    margin-right: 10px;
}

a {
    display: block;
    margin: 0 0 7px;
    font-size: 1.2em
}

a:hover {
    text-decoration: underline;
}

.past {
    opacity: 0.3;
}

JavaScript

// Author: Oskar Krawczyk (nouincolor.com)

// Let's create a class that takes care of YQL requests
Request.YQL = new Class({

    Extends: Request.JSONP,

    options: {
        url: 'http://dantri.com.vn',
        // query: '',
        data: {
            format: 'json'
        }
    },

    initialize: function(options) {
        this.setOptions(options);
        this.options.url = this.options.url + encodeURIComponent(this.options.query);
        this.running = false;
        this.requests = 0;
        this.triesRemaining = [];
    }

});

var Releases = new Class({

    Implements: [Options, Events],

    options: {},

    initialize: function(options) {
        this.setOptions(options);

        this.gamesListEl = document.id('games-list');
        this.getReleasesEl = document.id('get-releases');
        this.month = document.id('month');
        this.platform = document.id('platform');
        this.year = document.id('year');
        this.region = document.id('region');
        this.selected = {};

        this.setup();
    },

    setup: function() {
        
        // show on load
        this.fetchReleases();
        
        this.getReleasesEl.addEvents({
            click: this.fetchReleases.bind(this)
        });
    },

    fetchReleases: function() {
        this.selected.platform = this.platform.get('value');
        this.selected.month = this.month.get('value');
        this.selected.year = this.year.get('value');
        this.selected.region = this.region.get('value');
        
        // the magical query
        // ReleaseDates/Anticipated.aspx or ReleaseDates/All.aspx
        this.yqlQuery = "select * from html where url=\"http://{region}vgreleases.com/{platform}/ReleaseDates/All-{month}-{year}.aspx?OrderBy=sortdate\" and xpath='//div[@class=\"CB\"]/div'".substitute(this.selected);
        
        // make the YQL call
        new Request.YQL({
            query: this.yqlQuery,
            onRequest: this.clearResults.bind(this),
          ...