Skip to content

Instantly share code, notes, and snippets.

@issa-tseng
Created July 30, 2017 01:30
Show Gist options
  • Save issa-tseng/d0bd4cac94f4720eb243f2a7a1aa3682 to your computer and use it in GitHub Desktop.
Save issa-tseng/d0bd4cac94f4720eb243f2a7a1aa3682 to your computer and use it in GitHub Desktop.
scorebox
{
"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"
}
}
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