Created
July 30, 2017 01:30
-
-
Save issa-tseng/d0bd4cac94f4720eb243f2a7a1aa3682 to your computer and use it in GitHub Desktop.
scorebox
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "scorebox", | |
"version": "0.1.0", | |
"private": true, | |
"dependencies": { | |
"livescript": "~1.5.0", | |
"prelude-ls": "~1.1.2", | |
"request": "~2.81.0", | |
"jquery": "~3.2.1", | |
"jsdom": "~11.1.0" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
request = require(\request) | |
{ JSDOM } = require(\jsdom) | |
jq = require(\jquery) | |
# set up data. | |
offense-header = <[ team week position player team yds td ptd40 ptd50 p300 p400 2pc int yds td 2pr rtd40 rtd50 ry100 ry200 yds td 2pre retd50 rec rey200 ftd fuml fg50 fgm50 fg40 fgm40 fg0 fgm0 pat ktd prtd ftd ]> | |
defense-header = <[ team week player pa0 pa1 pa7 pa14 blkkrtd int fr blk sfty sck ktd prtd itd ftd pa18 pa22 pa28 pa35 pa46 ya100 ya199 ya299 ya349 ya399 ya449 ya499 ya549 ya550 ]> | |
offense-rows = [ offense-header ] | |
defense-rows = [ defense-header ] | |
# set up requests. | |
request-queue = [ { team: t, period: p } for t from 1 to 11 for p from 1 to 15 ] | |
# go. | |
process-next = -> | |
{ team, period } = request-queue.pop() | |
(error, response, body) <- request("http://games.espn.com/ffl/boxscorescoring?leagueId=86438&teamId=#team&scoringPeriodId=#period&seasonId=2016&view=scoringperiod&version=scoring") | |
return console.error("had a problem making request for team #team / period #period.", error, response, body) if error? | |
{ window } = new JSDOM(body) | |
$ = jq(window) | |
$('.playertableTableHeader').each(-> | |
header = $(this) | |
team-name = header.text().replace(/ box score$/i, '') | |
# offense. | |
header.nextAll('.pncPlayerRow').each(-> | |
row = $(this) | |
player-pos = row.children(':first-child').text() | |
player-name = row.find('.playertablePlayerName a').text() | |
player-team = /^[^,]+, ([a-z]+)/i.exec(row.find('.playertablePlayerName').text())?.1 ? '??' | |
player-stats = row.find('.playertableStat:not(.appliedPoints)').map(-> $(this).text()).toArray() | |
offense-rows.push([ "\"#team-name\"", period, player-pos, player-name, player-team ] ++ player-stats) | |
) | |
do # defense. | |
row = header.closest(\table).next().find('.pncPlayerRow') | |
def-name = row.find('.playertablePlayerName a').text().replace(' D/ST', '') | |
def-stats = row.find('.playertableStat:not(.appliedPoints)').map(-> $(this).text()).toArray() | |
defense-rows.push([ "\"#team-name\"", period, def-name ] ++ def-stats) | |
) | |
console.log("processed #team/#period") | |
if request-queue.length > 0 | |
set-timeout(process-next, 1000) # wait a bit, for reasons. | |
else | |
all-out() | |
process-next() | |
# crude output. | |
all-out = -> | |
for sheet in [ offense-rows, defense-rows ] | |
console.log('\n\n') | |
for row in sheet | |
console.log(row.join(\,)) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment