MLB

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');