Tartsd naprakészen a Mets csapásait anélkül, hogy MLB TV előfizetésre lenne szükséged

Keresztbe tették a my blog at https://writingontablets.com/Getting-Alerts-For-MLB-Condensed-Games

30 évvel ezelőtt néhány nyarat New Jerseyben dolgoztam, és belekeveredtem a New York Mets baseball őrült világába.

Azokban az időkben az otthoni kapcsolattartás azt jelentette, hogy az International Herald Tribune-t kellett átfésülni minden baseballhírért, de az elmúlt évtizedben előfizetője voltam az MLB TV-nek, ami fantasztikus volt.

Amikor az idei előfizetés megújítását fontolgattam, rájöttem, hogy már alig nézek élő meccseket. A legtöbb meccset amerikai keleti idő szerint este vagy később játsszák, így általában azt teszem, hogy várok másnap reggelig, és megpróbálom megnézni a tömörített meccset – körülbelül 5 perces “Match Of The Day” stílusú kiemeléseket – anélkül, hogy tudnám az eredményt.

Az MLB sokkal kevésbé értékes a kiemelési csomagjaival, mint a Premier League (meglepetés, meglepetés!), és sok tartalmat ingyenesen elérhetővé tesznek mind a YouTube-on, mind az MLB TV alkalmazáson belül ingyenesen.

Az MLB TV alkalmazáson belül azonban fizetős előfizetés nélkül nem kaphatsz értesítést arról, ha új, tömörített meccsek állnak rendelkezésre (ami elég tisztességes!), és nagyon nehéz ellenőrizni, hogy mikor készül el a videó anélkül, hogy megtudnád az eredményt, vagy valamilyen információt a meccsről a már közzétett többi videón keresztül.

A kiváló Baseball Theater azonban rájött, hogy a mobilalkalmazások konfigurációját nyíltan tartják, így ez adta az ötletet, hogy összedobjak egy hasonló megoldást, ami értesítést küld, amint egy új sűrített meccs készen áll a megtekintésre.

My MLB Condensed Games alert system

Ez mind egy kicsit Heath-Robinson, de a rendszerem az alábbiak szerint működik. Megjegyzés: a kód mind elérhető a GitHub-on, és az alábbiakat a repo readme.md-jából másoltam ki:

2 fő belépési pont van – AWS Lambda-ból futtathatónak tervezve:

  1. lambdaCondensedGame,js – Ellenőrzi, hogy egy adott csapat számára elérhető-e egy adott napon egy sűrített meccs stream
  2. lambdaMonitor.js – Megnézi, hogy hozzáadtak-e egy sűrített játékot, és ha igen, küld egy Slack üzenetet arról, hogy egy új játék készen áll, valamint egy linket a streamre

Condensed Game funkció

Ez a funkció a POSTolt JSON-ból olvassa a következőképpen formázva:

{
gameDate: "2019-04-26",
team: "nym"
}

Egy MLBAPIRequest értékű HTTP fejlécet is kell küldeni, amelynek értéke egy azonos nevű környezeti változóként van beállítva.

Ezután:

  1. Elkészíti az URL-t, mint http://gd2.mlb.com/components/game/mlb/year_2018/month_06/day_26/master_scoreboard.xml (a bejövő dátummal)
  2. Keresd meg a <game> csomópontot, ahol home_file_code=”nym” vagy away_file_code=”nym” (a bejövő csapattal)
  3. Felveszi a game_pk attribútumot az URL e.pl. “https://statsapi.mlb.com/api/v1/game/530594/content?language=en”
  4. Keresd meg a media.epgAlternate csomópontokban az “Extended Highlights” részt, majd keresd meg azt az elemet, amely a sűrített játékvideó (ha létezik)
  5. Válassza ki a megfelelő URL csomópontot – azt a videót, amelynek értéke .mp4

Feltételezve, hogy a sűrített játékot megtalálta, a függvény ezután a következő JSON-t adja vissza:

{
"opponent": "pit",
"date": "2019-04-26",
"url": "http://mediadownloads.mlb.com/mlbam/mp4/2018/06/27/2202032583/1530076464641/asset_1200K.mp4",
"mediaType": "Extended Highlights"
}

Jegyzet:

  • A opponent attribútum nullázható, ha nem találtak játékot
  • A url attribútum nullázható, ha a játékhoz nem találtak sűrített játékfolyamatot
  • A mediaType attribútum nullázható vagy “Extended Highlights” (egy ideig azzal kísérleteztem, hogy a “Recap”-ot is megkapom)

Konfiguráció – Környezeti változók

  • MLBAPIRequest: Minden kérés fejlécében elküldendő érték

Figyelő függvény

Ez a függvény elmenti az utoljára talált játékadatokat egy S3 vödörbe, majd úgy van kialakítva, hogy ütemezetten fusson, hogy a következőket tegye:

  • Nézi a dátumot a mentett játékadatok JSON-ban az utolsó sikeres futtatásból
  • Ha a dátum ma van, akkor kész vagyunk (a dupla fejlécekkel még nem boldogulunk!)
  • Máskülönben hívja meg a sűrített játék funkciót vagy a tegnapi, vagy a mai napra (ha az utolsó játék tegnap volt), és ha az eredménynek van url attribútuma
  • Mentse el a legutóbbi játék JSON adatait az S3-ra
  • Hívja a Slack-et, elküldve az url attribútumot egy üzenetben
  • Hívjon egy IFTTT webes horgot, ami egy iOS értesítést küld, amire kattintva megnyílik a viedo URL

A Cloudwatch-ban beállíthat egy ütemezést, hogy N percenként fusson.

Konfiguráció – Környezeti változók

  • S3ACCESSKEYID: Hozzáférési kulcs a játékadatok mentéséhez használt S3 vödörhöz
  • S3DATABUCKET: A játékadatok mentéséhez használt S3 vödör neve
  • S3DATAFILE: A játékadatok mentéséhez használt fájl neve
  • S3SECRETACCESSKEY: A játékadatok mentéséhez használt S3 vödör hozzáférési titka
  • SLACK_WEBHOOK_URL: A Slack-üzenet elküldésére szolgáló webhook URL-je
  • TEAM: A csapat rövidítése a megfigyeléshez, pl. nym
  • IFTTT_EVENT_NAME: Az IFTTT esemény neve, amelyre az értesítési hívást küldeni kell
  • IFTTT_MAKER_KEY: Az IFTTT készítő kulcs neve az IFTTT hívások engedélyezéséhez

Summary

Minden nagyon jól működik eddig, és pontosan azt kapom, amire szükségem van. Nagyon boldog vagyok! Lehet, hogy a szezon későbbi szakaszában még előfizetek az MLB TV-re, ha lemaradok a hétvégi élő meccsekről – vagy éppen ha a Mets bejut a rájátszásba -, de egyelőre enélkül is tudom nézni a kiemelt meccseket.

Az MLB “API” a szezon első néhány hetében egy kicsit változóban volt. Ez nem egy nyilvános API, így ez várható volt, de remélhetőleg most már egy darabig stabil lesz.

Elkészítettem egy iOS Shortcutot is az API közvetlen hívásához, így ha valamiért megváltozna a videó URL címe, vagy véletlenül kihagytam/töröltem az értesítést.

Ha valami hasonlót szeretnél létrehozni magadnak, és a GitHub utasításai nem egyértelműek, szólj, és megpróbálok segíteni!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.