From Chickenfoot Script Repository
// ==UserScript==
// @name MLB
// @when Pages Match
// @description saves mlb data to disk
// @include *
// ==/UserScript==
var YEAR = 2007;
var OUTPUT_FOLDER = 'c:\\mlb\\';
function getLongestTable() {
var tables = find('table');
var max = 0;
var maxT = null;
var i = 0;
while (tables.hasMatch) {
var rows = tables.find('row').count;
if (rows >= max) {
max = rows;
maxT = tables;
}
tables = tables.next;
}
return separateMatch(maxT);
}
function separateMatch(m) {
return new Chickenfoot.Match(
m._html,
Chickenfoot.EMPTY_MATCH,
m._range,
m._document,
0,
true);
}
function genTeamCalendar(teamId, teamName, teamFullName, teamTz) {
var url = 'http://mlb.mlb.com/schedule/sortable.jsp?c_id=' + teamId;
go(url, true);
var caldata = [];
caldata.push('__CALENDAR__',
'CalendarName: ' + teamFullName + ' ' + YEAR + ' MLB Schedule',
'CalendarTimezone: ' + teamTz,
'CalendarURL: ' + url,
'',
'DefaultEventDuration: 3h',
'');
var rowMatch = find(getLongestTable()).find('row');
rowMatch = rowMatch.next; // skip table header row
while (rowMatch.hasMatch) {
var cellMatch = rowMatch.find('cell');
var date = cellMatch;
var opponent = date.next;
var time = opponent.next;
date = Chickenfoot.trim(date.toString());
if (!date) break;
date = date.match(/(\d+\/\d+)/)[1] + '/2007';
time = Chickenfoot.trim(time.toString());
time = (time === 'TBD') ? '' : time + 'm ';
caldata.push('EventWhen: ' + date + ' ' + time);
opponent = Chickenfoot.trim(opponent.toString());
opponent = opponent.match(/(at )?(.*)/);
var where = opponent[1] == null ? 'Home' : 'Away';
opponent = opponent[2];
caldata.push('EventWhat: ' + teamName + ' vs. ' +
opponent + ' (' + where + ')');
caldata.push('EventWhere: ' + where);
caldata.push('');
rowMatch = rowMatch.next;
}
var data = caldata.join('\n');
Chickenfoot.SimpleIO.write(OUTPUT_FOLDER + teamId + '.txt', data);
output('wrote ' + teamName);
}
var teamData = [
"AL East",
['nyy', 'Yankees', 'New York Yankees', 'America/New_York'],
['tor', 'Blue Jays', 'Toronto Blue Jays', 'America/New_York'],
['bos', 'Red Sox', 'Boston Red Sox', 'America/New_York'],
['bal', 'Orioles', 'Baltimore Orioles', 'America/New_York'],
['tb', 'Devil Rays', 'Tampa Bay Devil Rays', 'America/New_York'],
"AL Central",
['min', 'Twins', 'Minnesota Twins', 'America/Chicago'],
['det', 'Tigers', 'Detroit Tigers', 'America/Chicago'],
['cws', 'White Sox', 'Chicago White Sox', 'America/Chicago'],
['cle', 'Indians', 'Cleveland Indians', 'America/Chicago'],
['kc', 'Royals', 'Kansas City Royals', 'America/Chicago'],
"AL West",
['oak', 'Athletics', 'Oakland Athletics', 'America/Los_Angeles'],
['ana', 'Angels', 'Los Angeles Angels of Anaheim', 'America/Los_Angeles'],
['tex', 'Rangers', 'Texas Rangers', 'America/Los_Angeles'],
['sea', 'Mariners', 'Seattle Mariners', 'America/Los_Angeles'],
"NL East",
['nym', 'Mets', 'New York Mets', 'America/New_York'],
['phi', 'Phillies', 'Philadelphia Phillies', 'America/New_York'],
['atl', 'Braves', 'Atlanta Braves', 'America/New_York'],
['fla', 'Marlins', 'Florida Marlins', 'America/New_York'],
['was', 'Nationals', 'Washington Nationals', 'America/New_York'],
"NL Central",
['stl', 'Cardinals', 'St. Louis Cardinals', 'America/Chicago'],
['hou', 'Astros', 'Houston Astros', 'America/Chicago'],
['cin', 'Reds', 'Cincinnati Reds', 'America/Chicago'],
['mil', 'Brewers', 'Milwaukee Brewers', 'America/Chicago'],
['pit', 'Pirates', 'Pittsburgh Pirates', 'America/New_York'],
['chc', 'Cubs', 'Chicago Cubs', 'America/Chicago'],
"NL West",
['sd', 'Padres', 'San Diego Padres', 'America/Los_Angeles'],
['la', 'Dodgers', 'Los Angeles Dodgers', 'America/Los_Angeles'],
['sf', 'Giants', 'San Francisco Giants', 'America/Los_Angeles'],
['ari', 'Diamondbacks', 'Arizona Diamondbacks', 'America/Denver'],
['col', 'Rockies', 'Colorado Rockies', 'America/Denver'],
];
for (var i = 1, len = teamData.length; i < len; ++i) {
var arr = teamData[i];
if (typeof arr == 'string') continue; // header, ignore
var code = arr[0];
var name = arr[1];
var fullName = arr[2];
var tz = arr[3];
try {
genTeamCalendar(code, name, fullName, tz);
} catch (e) {
output(e);
output(e.stack);
}
}
function generateToc() {
var data = [];
data.push('__NOTOC__');
for (var i = 0, len = teamData.length; i < len; ++i) {
var arr = teamData[i];
if (typeof arr == 'string') {
data.push('===' + arr + '===');
} else {
var code = arr[0];
var fullName = arr[2];
data.push('* [[MLB_' + YEAR + '_' + code + '|' + fullName + ']]');
}
}
return data.join('\n');
}
Chickenfoot.SimpleIO.write(OUTPUT_FOLDER + 'TOC.txt',
generateToc());
output('wrote TOC.txt');