Bleiben Sie auf dem Laufenden über die Mets, ohne ein MLB TV Abonnement zu benötigen

Cross posted from meinem Blog unter https://writingontablets.com/Getting-Alerts-For-MLB-Condensed-Games

Vor 30 Jahren verbrachte ich ein paar Sommer in New Jersey, und wurde in die verrückte Welt des Baseballs der New York Mets hineingezogen.

Damals musste ich, um zu Hause auf dem Laufenden zu bleiben, die International Herald Tribune nach Baseball-Nachrichten durchforsten, aber in den letzten zehn Jahren habe ich MLB TV abonniert, was fantastisch war.

Als ich überlegte, ob ich das diesjährige Abonnement verlängern sollte, stellte ich fest, dass ich kaum noch Live-Spiele sehe. Die meisten Spiele werden abends (US-Ostzeit) oder später ausgetragen, so dass ich in der Regel bis zum nächsten Morgen warte und versuche, das Spiel in Kurzform zu sehen – etwa 5 Minuten Highlights im Stil von „Match of the Day“ – ohne das Ergebnis zu kennen.

Die MLB ist mit ihren Highlights-Paketen viel weniger kostspielig als die Premier League (Überraschung, Überraschung!

Doch in der MLB TV-App kann man sich nicht benachrichtigen lassen, wenn neue Spielzusammenfassungen verfügbar sind, ohne ein kostenpflichtiges Abonnement zu haben (was ja auch fair ist!).), und es ist wirklich schwer zu überprüfen, wann ein Video fertig ist, ohne den Spielstand oder einige Informationen über das Spiel über die anderen bereits veröffentlichten Videos herauszufinden.

Das exzellente Baseball Theater hatte jedoch herausgefunden, dass die Konfiguration für die mobilen Apps offen gehalten wird, und das brachte mich auf die Idee, eine ähnliche Lösung zu hacken, um Benachrichtigungen zu senden, sobald ein neues kondensiertes Spiel zum Anschauen bereit ist.

Mein MLB Condensed Games Benachrichtigungssystem

Es ist alles ein bisschen Heath-Robinson, aber mein System funktioniert wie unten. Beachten Sie, dass der Code auf GitHub verfügbar ist, und das Folgende ist aus der readme.md des Repo kopiert:

Es gibt 2 Haupteinstiegspunkte – entworfen, um von AWS Lambda ausgeführt zu werden:

  1. lambdaCondensedGame,js – Prüft, ob ein Condensed Game Stream für ein bestimmtes Team an einem bestimmten Tag verfügbar ist
  2. lambdaMonitor.js – Prüft, ob ein Condensed Game hinzugefügt wurde, und wenn ja, sendet es eine Slack-Nachricht, die besagt, dass ein neues Spiel bereit ist, sowie einen Link zum Stream

Condensed Game function

Diese Funktion liest aus dem POSTed JSON, das wie folgt formatiert ist:

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

Sie müssen auch einen HTTP-Header von MLBAPIRequest mit einem Wert senden, der als Umgebungsvariable mit dem gleichen Namen gesetzt ist.

Dies führt dann zu:

  1. Erstellen einer URL wie http://gd2.mlb.com/components/game/mlb/year_2018/month_06/day_26/master_scoreboard.xml (unter Verwendung des eingehenden Datums)
  2. Suchen Sie nach dem Knoten <game>, bei dem home_file_code=“nym“ oder away_file_code=“nym“ (unter Verwendung des eingehenden Teams)
  3. Aufnehmen des Attributs game_pk, um die URL zu erhalten, z.z. B. „https://statsapi.mlb.com/api/v1/game/530594/content?language=en“
  4. Suchen Sie in den media.epgAlternate-Knoten den Abschnitt „Erweiterte Höhepunkte“ und dann das Element, das das zusammengefasste Spielvideo darstellt (falls vorhanden)
  5. Wählen Sie den richtigen URL-Knoten aus – das Video mit einem Wert, der auf .mp4

Angenommen, ein komprimiertes Spiel wird gefunden, dann gibt die Funktion JSON wie folgt zurück:

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

Hinweis:

  • Das opponent-Attribut kann null sein, wenn kein Spiel gefunden wurde
  • Das url-Attribut kann null sein, wenn kein kondensierter Spielstrom für das Spiel gefunden wurde
  • Das mediaType-Attribut kann null sein oder „Erweiterte Highlights“ (ich habe eine Zeit lang damit experimentiert, auch den „Recap“ zu erhalten)

Konfiguration – Umgebungsvariablen

  • MLBAPIRequest: Der Wert, der im Header jeder Anfrage gesendet werden soll

Überwachungsfunktion

Diese Funktion speichert die zuletzt gefundenen Spieldaten in einem S3-Bucket und ist dann so konzipiert, dass sie nach einem Zeitplan ausgeführt wird, um Folgendes zu tun:

  • Sieht sich das Datum in den gespeicherten Spieldaten JSON vom letzten erfolgreichen Durchlauf an
  • Wenn das Datum heute ist, sind wir fertig (wir kommen noch nicht mit Doppel-Headern klar!)
  • Ansonsten rufe die Funktion für das komprimierte Spiel entweder für gestern oder heute auf (wenn das letzte Spiel gestern war), und wenn das Ergebnis ein url-Attribut hat
  • Speichern Sie die neuesten Spieldaten JSON in S3
  • Rufen Sie Slack auf und senden Sie das url-Attribut in einer Nachricht
  • Rufen Sie einen IFTTT-Web-Hook auf, der eine iOS-Benachrichtigung sendet, auf die geklickt wird, um die Viedo-URL zu öffnen

Sie können einen Zeitplan in Cloudwatch einrichten, der alle N Minuten ausgeführt wird.

Konfiguration – Umgebungsvariablen

  • S3ACCESSKEYID: Zugriffsschlüssel für den S3-Bucket zum Speichern von Spieldaten
  • S3DATABUCKET: Name des S3-Buckets zum Speichern von Spieldaten
  • S3DATAFILE: Name der Datei zum Speichern von Spieldaten in
  • S3SECRETACCESSKEY: Access Secret für den S3-Bucket zum Speichern der Spieldaten
  • SLACK_WEBHOOK_URL: URL des Webhooks, an den die Slack-Nachricht gesendet werden soll
  • TEAM: Teamkürzel zur Überwachung z.B. nym
  • IFTTT_EVENT_NAME: Name des IFTTT-Ereignisses, an das der Benachrichtigungsaufruf gesendet werden soll
  • IFTTT_MAKER_KEY: Name des IFTTT-Maker-Keys, um IFTTT-Aufrufe zu aktivieren

Zusammenfassung

Alles funktioniert bisher sehr gut, und ich bekomme genau das, was ich brauche. Bin sehr zufrieden! Vielleicht abonniere ich MLB TV später in der Saison, wenn ich die Live-Spiele am Wochenende verpasse – oder sogar, wenn die Mets in die Playoffs kommen – aber im Moment kann ich die Highlights auch ohne abrufen.

Die MLB-„API“ war in den ersten Wochen der Saison ein wenig im Fluss. Es ist keine öffentliche API, also ist das zu erwarten, aber hoffentlich wird sie jetzt für eine Weile stabil sein.

Ich habe auch eine iOS-Verknüpfung gebaut, um die API direkt aufzurufen, falls sich aus irgendeinem Grund die Video-URL ändert oder ich die Benachrichtigung versehentlich verpasst/gelöscht habe.

Wenn Sie etwas Ähnliches für sich selbst einrichten wollen und die GitHub-Anweisungen nicht klar sind, lassen Sie es mich wissen und ich werde versuchen, Ihnen zu helfen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.