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),
...