#!/bin/bash set -e set -o pipefail while getopts 'd:t:' opt do case $opt in d) db=$OPTARG ;; t) team=$OPTARG ;; ?) exit 1 ;; esac done if [[ -z $db ]] then echo "$0:" '-d is required' >&2 exit 1 fi if [[ -z $team ]] then echo "$0:" '-t is required' >&2 exit 1 fi # grab most recently started live pk, if multiple gamePk=$(mlblive schedule -t $team | jq '.dates[].games | map(select(.status.abstractGameState == "Live"))[-1].gamePk') if [[ "$gamePk" = 'null' ]] then echo "$0:" 'no live games found' >&2 exit 1 fi # grab select data from each response with jq, add 0 to the end of each line # (to go in the 'posted' db column), then write each line as they come in to db jqFilter='{gamePk} + (.gameData.teams | {awayTeam: .away.teamName, homeTeam: .home.teamName}) + (.liveData.plays.allPlays[] | (.result + (.about | {atBatIndex, halfInning, inning, isComplete, isScoringPlay, hasReview})))' mlblive subscribe -g $gamePk | jq -Sc --unbuffered "$jqFilter" | sed -u 's/$/0/' | split -l 1 --filter="sqlite3 $db '.mode ascii' '.separator ' '.import /dev/stdin mlbdata'"