Zachovejte aktuální informace o porodních bolestech Mets, aniž byste potřebovali předplatné MLB TV

Křížově vysláno z mého blogu na adrese https://writingontablets.com/Getting-Alerts-For-MLB-Condensed-Games

Před 30 lety jsem strávil několik letních měsíců prací v New Jersey, a nechal jsem se vtáhnout do bláznivého světa baseballu New York Mets.

Tenkrát udržovat kontakt, když jsem se vrátil domů, znamenalo hledat v International Herald Tribune jakékoli baseballové zprávy, ale posledních deset let jsem předplatitelem MLB TV, což bylo fantastické.

Když jsem uvažoval o obnovení letošního předplatného, uvědomil jsem si, že už téměř nesleduji živé zápasy. Většina zápasů se hraje večer amerického východního času nebo později, takže většinou počkám do rána a snažím se sledovat zkrácený zápas – asi 5 minut sestřihů ve stylu „Match Of The Day“ – aniž bych znal skóre.

MLB jsou se svými balíčky sestřihů mnohem méně vzácní než Premier League (překvapení, překvapení!) a spoustu obsahu zdarma zpřístupňují jak na YouTube, tak v rámci aplikace MLB TV.

V aplikaci MLB TV však bez placeného předplatného nemůžete dostávat upozornění na to, kdy jsou k dispozici nové zkrácené zápasy (což je fér!) a je opravdu těžké zkontrolovat, kdy je video připraveno, aniž byste zjistili skóre nebo nějaké informace o zápase prostřednictvím jiných již zveřejněných videí.

Vynikající Baseball Theater však přišel na to, že konfigurace mobilních aplikací probíhá otevřeně, takže mě to přivedlo na nápad hacknout dohromady podobné řešení, které by posílalo upozornění, jakmile je ke zhlédnutí připraven nový zkrácený zápas.

Můj systém upozornění na zkrácené zápasy MLB

Je to celé trochu Heath-Robinson, ale můj systém funguje tak, jak je uvedeno níže. Všimněte si, že celý kód je k dispozici na GitHubu a níže je zkopírován z readme.md repozitáře:

Existují 2 hlavní vstupní body – určené ke spuštění z AWS Lambda:

  1. lambdaCondensedGame,js – Kontroluje, zda je pro daný tým v daný den k dispozici stream kondenzovaných zápasů
  2. lambdaMonitor.js – Zjistí, zda byla přidána zkrácená hra, a pokud ano, pošle zprávu na Slack, že je připravena nová hra, plus odkaz na stream

Funkce zkrácené hry

Tato funkce čte z POSTu JSON ve formátu:

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

Musíte také poslat HTTP hlavičku MLBAPIRequest s hodnotou nastavenou jako stejnojmenná proměnná prostředí.

Ten pak:

  1. Sestaví URL jako http://gd2.mlb.com/components/game/mlb/year_2018/month_06/day_26/master_scoreboard.xml (pomocí příchozího data)
  2. Vyhledá uzel <game>, kde home_file_code=“nym“ nebo away_file_code=“nym“ (pomocí příchozího týmu)
  3. Vyzvedne atribut game_pk, aby získal URL e.např. „https://statsapi.mlb.com/api/v1/game/530594/content?language=en“
  4. Najděte v uzlech media.epgAlternate část „Extended Highlights“ a poté najděte položku, která je zkráceným videem hry (pokud existuje)
  5. Vyberte správný uzel URL – video, které má hodnotu končící na .mp4

Pokud je nalezeno zkrácené video hry, funkce pak vrátí JSON ve tvaru:

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

Pozn:

  • Atribut opponent může být nulový, pokud nebyla nalezena žádná hra
  • Atribut url může být nulový, pokud pro hru nebyl nalezen žádný kondenzovaný herní stream
  • Atribut url může být nulový. mediaType atribut může být nulový nebo „Extended Highlights“ (chvíli jsem experimentoval i s tím, že jsem dostal „Recap“)

Konfigurace – Proměnné prostředí

  • MLBAPIRequest: Hodnota, která se má posílat v hlavičce každého požadavku

Monitorovací funkce

Tato funkce ukládá poslední nalezená herní data do kyblíku S3 a pak je navržena tak, aby se spouštěla podle plánu a dělala následující:

  • Podívá se na datum v JSONu uložených herních dat z posledního úspěšného spuštění
  • Pokud je datum dnešní, máme hotovo (zatím se nevypořádáváme s dvojí hrou!)
  • V opačném případě zavoláme funkci zhuštěné hry buď pro včerejšek, nebo pro dnešek (pokud byla poslední hra včera), a pokud má výsledek atribut url
  • Uloží poslední herní data JSON do S3
  • Volá Slack a pošle atribut url v mesage
  • Volá webový háček IFTTT, který pošle oznámení iOS, po jehož kliknutí se otevře viedo URL

Můžete nastavit plán v Cloudwatch, aby se spustil každých N minut.

Konfigurace – proměnné prostředí

  • S3ACCESSKEYID: Přístupový klíč pro kyblík S3 pro ukládání herních dat
  • S3DATABUCKET: Název kyblíku S3 pro ukládání herních dat
  • S3DATAFILE: Název souboru, do kterého se ukládají herní data
  • S3SECRETACCESSKEY: Přístupové tajemství pro kyblík S3, do kterého se ukládají herní data
  • SLACK_WEBHOOK_URL: Adresa URL webhooku, na který se má odeslat zpráva ze služby Slack
  • TEAM: Zkratka týmu, který se má sledovat, např. nym
  • IFTTT_EVENT_NAME: Název události IFTTT, na kterou se má volání oznámení odeslat
  • IFTTT_MAKER_KEY: Název klíče tvůrce IFTTT, který má povolit volání IFTTT

Souhrn

Vše zatím funguje velmi dobře a dostávám přesně to, co potřebuji. Jsem velmi spokojen! Možná si ještě v pozdější fázi sezóny předplatím MLB TV, pokud mi budou chybět víkendové zápasy v přímém přenosu – nebo opravdu pokud se Mets dostanou do play-off – ale zatím si mohu sledovat nejdůležitější momenty i bez ní.

Prvních několik týdnů sezóny bylo „API“ MLB trochu v pohybu. Není to veřejné API, takže se to dalo čekat, ale doufám, že teď už bude nějakou dobu stabilní.

Vytvořil jsem také zástupce pro iOS, který API přímo volá, takže kdyby se z nějakého důvodu změnila adresa videa nebo jsem omylem přehlédl/vymazal oznámení.

Pokud si chcete něco podobného nastavit sami a návod na GitHubu vám není jasný, dejte mi vědět a já se vám pokusím pomoci!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.