Keep up to date on the travail of Mets without needing needing MLB TV subscription

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

30年前、私はニュージャージーで働きながら数回の夏休みを過ごしたことがあります。 ニューヨーク・メッツの野球の世界に引き込まれました。

当時、帰国後に連絡を取り合うには、野球のニュースがあればインターナショナル・ヘラルド・トリビューンをあさる必要がありましたが、この10年間はMLB TVに加入しており、それは素晴らしいことでした。 ほとんどの試合はアメリカ東部時間の夕方以降に行われるので、私が一般的に行うのは、翌朝まで待ち、スコアを知らずに、凝縮された試合-「Match Of The Day」スタイルの5分程度のハイライト-を見ようとすることです。

しかし、MLB TVアプリでは、有料会員にならないと、新しい凝縮されたゲームが利用可能になったときに通知を受け取ることができません(これは十分に公平です!)。

しかし、MLB TVアプリ内では、有料会員にならないと新しい試合が配信された時に通知が来ないし、スコアや既に公開されている他の動画で試合の情報を得ないと動画がいつ配信されるか確認するのは本当に難しいです。

しかし、優れた Baseball Theater はモバイル アプリの設定が公開されていることを突き止めたので、新しい試合が視聴可能になるとすぐにアラートを送信する、同様のソリューションをハックすることを思いつきました。 コードはすべて GitHub で公開されており、以下はリポジトリの readme.md からのコピーです:

There are two main entry points – designed to be run from AWS Lambda:

  1. lambdaCondensedGame,js – condensed game stream is available for a given team on given day
  2. lambdaMonitor.js – Condensed game stream が特定の日に利用できるかチェックします。js – condensed game が追加されたかどうかを確認し、追加された場合は、新しいゲームの準備ができたという Slack メッセージとストリームへのリンクを送信します

Condensed Game function

This function reads from the POSTed JSON formatted like:

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

同名の環境変数として値を設定した MLBAPIRequest HTTP header も送信する必要があります。

  1. Build URL like http://gd2.mlb.com/components/game/mlb/year_2018/month_06/day_26/master_scoreboard.xml (using the incoming date)
  2. Look for <game> node where home_file_code=”nym” or away_file_code=”nym” (using the incoming team)
  3. Pick up game_pk attribute to get the URL e.s. (incoming team).例: “https://statsapi.mlb.com/api/v1/game/530594/content?language=en”
  4. メディア.epgAlternate ノードで「拡張ハイライト」セクションを検索し、凝縮されたゲーム ビデオである項目を検索します(存在する場合)
  5. 正しい URL ノードを選択します – 値が .NET で終わっているビデオです。mp4

凝縮されたゲームが見つかったと仮定すると、この関数は次に次のような JSON を返します:

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

注意:

  • The opponent attribute can null if no game has been found
  • The url attribute can null if no condensed game stream has been found for the game
  • The mediaType 属性は null または “Extended Highlights” (しばらく “Recap” も取得する実験を行いました)

設定 – 環境変数

  • MLBAPIRequest: 4399>

Monitoring function

この関数は、最後に見つかったゲームデータを S3 バケットに保存し、次のことを行うためにスケジュールで実行するように設計されています:

  • 最後に成功した実行からの保存済みゲームデータ JSON で日付を確認する
  • 日が今日なら、終了する(ダブルヘッダーにはまだ対処していません!)

Monitoring function

(この関数は、ゲームデータを保存して、次のことを行う))

  • そうでない場合は、昨日または今日 (最後のゲームが昨日の場合) の condensed ゲーム関数を呼び出します。 その結果に url 属性があれば
  • S3 に最新のゲームデータの JSON を保存する
  • Slack を呼び出して url 属性をメッセージで送る
  • IFTTT Web フックを呼び出して iOS 通知し、それをクリックすると viedo URL が開く
  • Cloudwatch で N 分ごとに実行するスケジュールが設定できます。

    設定 – 環境変数

    • S3ACCESSKEYID: ゲームデータを保存するS3バケットのアクセスキー
    • S3DATABUCKET: ゲームデータを保存するS3バケット名
    • S3DATAFILE: ゲームデータを保存するファイル名
    • S3SECRETACCESSKEY: ゲームデータを保存するファイル名
    • : ゲームデータを保存するS3バケットのアクセスシークレット

    • SLACK_WEBHOOK_URL。 Slackメッセージを送信するWebhookのURL
    • TEAM: 監視するチームの略称 例. nym
    • IFTTT_EVENT_NAME: 通知コールを送信する IFTTT イベント名
    • IFTTT_MAKER_KEY: IFTTT コールを有効にする IFTTT メーカー キー名

    Summary

    すべては今のところ本当にうまくいっており、まさに私が必要としているものを得ています。 非常に満足しています。 しかし、今のところ、MLB TV なしでハイライトを見続けることができます。

    シーズンの最初の数週間は、MLB 「API」 は少し流動的でした。 これは公開 API ではないので予想されることですが、今しばらくは安定していることを期待します。

    また、API を直接呼び出す iOS ショートカットを作成したので、何らかの理由でビデオの URL が変更されたり、誤って通知を見逃したり削除してしまった場合にも対応可能です。

    コメントを残す

    メールアドレスが公開されることはありません。