Pitää sinut ajan tasalla Metsin vaikeuksista tarvitsematta MLB:n TV-tilausta
Ristiin lähetetty osoitteesta blogistani osoitteessa https://writingontablets.com/Getting-Alerts-For-MLB-Condensed-Games
30 vuotta sitten vietin pari kesää töissä New Jerseyssä, ja ajauduin New York Metsin baseballin hulluun maailmaan.
Taannoin yhteydenpito kotimaassa tarkoitti International Herald Tribune -lehden läpikäyntiä baseball-uutisten varalta, mutta viimeisen vuosikymmenen ajan olen tilannut MLB TV:n, joka on ollut fantastinen.
Harkitessani tämän vuoden tilauksen uusimista tajusin, etten enää juurikaan katso yhtään suoraa peliä. Useimmat ottelut pelataan illalla Yhdysvaltain itäistä aikaa tai myöhemmin, joten yleensä odotan seuraavaan aamuun ja yritän katsoa tiivistetyn ottelun – noin 5 minuuttia ”Match Of The Day” -tyylisiä kohokohtia – tietämättä tulosta.
MLB ei ole niin kallisarvoinen kohokohdepakettiensa kanssa kuin Valioliiga (yllätys, yllätys!), ja tarjoavat paljon sisältöä ilmaiseksi sekä YouTubessa että MLB TV -sovelluksen sisällä ilmaiseksi.
Mutta MLB TV -sovelluksen sisällä et saa ilmoituksia siitä, milloin uusia tiivistettyjä otteluita on saatavilla ilman maksullista tilausta (mikä on reilua!), ja on todella vaikea tarkistaa, milloin video on valmis ilman, että saa selville pisteet tai jotain tietoa pelistä muiden jo julkaistujen videoiden kautta.
Erinomainen Baseball Theater oli kuitenkin keksinyt, että mobiilisovellusten konfiguraatio pidetään avoimena, joten se antoi minulle idean hakata yhteen samanlainen ratkaisu, joka lähettää hälytyksiä heti, kun uusi tiivistetty peli on valmis katsottavaksi.
My MLB Condensed Games alert system
Se on kaikki vähän Heath-Robinson, mutta minun systeemini toimii seuraavasti. Huomaa, että koodi on kaikki saatavilla GitHubissa, ja alla oleva on kopioitu repon readme.md:stä:
Tässä on 2 pääasiallista sisäänkäyntipistettä – suunniteltu ajettavaksi AWS Lambdasta:
- lambdaCondensedGame,js – Tarkistaa, onko tiivistetty otteluvirta saatavissa tietylle joukkueelle tiettynä päivänä
- lambdaMonitor.js – Tarkistaa, onko tiivistetty peli lisätty, ja jos on, lähettää Slack-viestin, jossa kerrotaan, että uusi peli on valmis, sekä linkin streamiin
Condensed Game -funktio
Tämä funktio lukee POSTattua JSONia, joka on muotoiltu seuraavasti:
{
gameDate: "2019-04-26",
team: "nym"
}
Tämä funktio lukee POSTattua JSONia, joka on muotoiltu seuraavasti:
{
gameDate: "2019-04-26",
team: "nym"
}
Osa on myös lähetettävä http:n otsakkeella MLBAPIRequest
, jossa on määritetty arvoksi ympäristömuuttujana, jolla on sama nimi.
Tällöin:
- Rakentaa URL:n kuten http://gd2.mlb.com/components/game/mlb/year_2018/month_06/day_26/master_scoreboard.xml (käyttäen saapuvaa päivämäärää)
- Etsii <peli>-solmun, jossa kotitiedoston_koodi=”nym” tai vierastiedoston_koodi=”nym” (käyttäen saapuvaa joukkuetta)
- Poimii game_pk-attribuutin saadakseen URL:n e.esim. ”https://statsapi.mlb.com/api/v1/game/530594/content?language=en”
- Etsikää media.epgAlternate-solmuista osio ”Extended Highlights” ja etsikää sitten kohde, joka on tiivistetty pelivideo (jos se on olemassa)
- Poimikaa oikea URL-solmu – video, jonka arvo päättyy .mp4
Edellyttäen, että tiivistetty peli löytyy, funktio palauttaa sen jälkeen JSON:in kaltaisen:
{
"opponent": "pit",
"date": "2019-04-26",
"url": "http://mediadownloads.mlb.com/mlbam/mp4/2018/06/27/2202032583/1530076464641/asset_1200K.mp4",
"mediaType": "Extended Highlights"
}
Huom:
- Aattribuutti
opponent
voi olla nolla, jos peliä ei ole löydetty - Aattribuutti
url
voi olla nolla, jos pelille ei ole löydetty tiivistettyä pelivirtaa - Pelin
mediaType
attribuutti voi olla nolla tai ”Extended Highlights” (kokeilin hetken aikaa saada myös ”Recap”)
Configuration – Ympäristömuuttujat
-
MLBAPIRequest
: Kaikkien pyyntöjen otsikossa lähetettävä arvo
Valvontafunktio
Tämä funktio tallentaa viimeisimmän löydetyn pelidatan S3-ämpäriin, ja sen jälkeen se on suunniteltu ajettavaksi aikataulun mukaan, jotta se voi tehdä seuraavaa:
- Katsoo päivämäärän tallennetun pelidatan JSON:sta viimeisimmän onnistuneen suorituksen ajalta
- Jos päivämääränä on päiväys on tänään, homma on hoidettu loppuunmyyty (emme selviydy tupla-otteluiden kanssa vielä!)
- Muussa tapauksessa kutsutaan tiivistettyä pelifunktiota joko eilen tai tänään (jos viimeinen peli oli eilen), ja jos tuloksella on url-attribuutti
- Tallenna viimeisimmät pelitiedot JSON:na S3:een
- Kutsu Slackia lähettämällä url-attribuutti viestissä
- Kutsu IFTTT-verkkokoukku, joka lähettää iOS-ilmoituksen, jota napsauttamalla aukeaa viedon URL-osoite
Voit asettaa Cloudwatchissa aikataulun ajettavaksi N:n minuutin välein.
Konfiguraatio – Ympäristömuuttujat
-
S3ACCESSKEYID
: Pelidatan tallentavan S3-ämpärin käyttöavain -
S3DATABUCKET
: Pelidatan tallentavan S3-ämpärin nimi -
S3DATAFILE
: Pelidatan tallentavan tiedoston nimi -
S3SECRETACCESSKEY
: Pelidatan tallentavan S3-ämpärin pääsysalaisuus -
SLACK_WEBHOOK_URL
: Sen webhookin URL-osoite, johon Slack-viesti lähetetään -
TEAM
: Tiimin lyhenne, jota seurataan esim. nym -
IFTTT_EVENT_NAME
: IFTTT-tapahtuman nimi, johon ilmoituskutsu lähetetään -
IFTTT_MAKER_KEY
: IFTTT-valmistajan avaimen nimi, jolla IFTTT-kutsut otetaan käyttöön
Yhteenveto
Kaikki toimii toistaiseksi todella hyvin, ja saan juuri sitä, mitä tarvitsen. Erittäin tyytyväinen! Saatan vielä tilata MLB TV:n myöhemmin kauden aikana, jos jään paitsi viikonlopun suorista peleistä – tai tosiaan, jos Mets pääsee pudotuspelikamppailuun – mutta toistaiseksi voin jatkaa kohokohtien katsomista ilman sitäkin.
MMLB:n ”API” oli hieman hakusessa kauden ensimmäisten viikkojen ajan. Se ei ole julkinen API, joten se on odotettavissa, mutta toivottavasti se pysyy vakaana jonkin aikaa.
Rakensin myös iOS:n pikakuvakkeen, jolla voi kutsua API:ta suoraan, joten jos videon URL-osoite jostain syystä muuttuu tai jos unohdan/poistan ilmoituksen vahingossa.
Jos haluat perustaa itsellesi jotakin vastaavaa etkä GitHubin ohjeet ole selkeät, kerro minulle ja yritän auttaa sinua!
Mitä?