Rester au courant des déboires des Mets sans avoir besoin d’un abonnement à MLB TV
Cross posted from. mon blog à https://writingontablets.com/Getting-Alerts-For-MLB-Condensed-Games
Il y a 30 ans, j’ai passé quelques étés à travailler dans le New Jersey, et j’ai été entraîné dans le monde fou du baseball des New York Mets.
À l’époque, rester en contact une fois rentré au pays signifiait parcourir l’International Herald Tribune pour toute nouvelle sur le baseball, mais depuis dix ans, je suis abonné à MLB TV, ce qui a été fantastique.
En envisageant de renouveler l’abonnement de cette année, j’ai réalisé que je ne regardais pratiquement plus aucun match en direct. La plupart des matchs sont joués le soir, heure de l’Est des États-Unis, ou plus tard, alors ce que je fais généralement, c’est d’attendre le lendemain matin et d’essayer de regarder le match condensé – environ 5 minutes de faits saillants de style « Match Of The Day » – sans connaître le score.
La MLB est beaucoup moins précieuse avec ses paquets de faits saillants que la Premier League (surprise, surprise !).), et rendent beaucoup de contenu disponible gratuitement à la fois sur YouTubeet dans l’application MLB TV.
Cependant, dans l’application MLB TV, vous ne pouvez pas obtenir de notifications pour savoir quand de nouveaux condensés sont disponibles sans un abonnement payant (ce qui est assez juste !), et il est vraiment difficile de vérifier quand une la vidéo est prête sans découvrir le score, ou quelques informations sur le match via les autres vidéos déjà publiées.
Cependant, l’excellent Baseball Theater avait compris que la configuration des applications mobiles est tenue en libre accès, ce qui m’a donné l’idée de bricoler une solution similaire pour envoyer des alertes dès qu’un nouveau jeu condensé est prêt à être visionné.
Mon système d’alerte MLB Condensed Games
C’est tout un peu Heath-Robinson, mais mon système fonctionne comme ci-dessous. Notez que le code est tout disponible sur GitHub, et ce qui suit est copié à partir du readme.md du repo:
Il y a 2 points d’entrée principaux – conçus pour être exécutés à partir de AWS Lambda:
- lambdaCondensedGame,js – Vérifie si un flux de jeux condensés est disponible pour une équipe donnée un jour donné
- lambdaMonitor.js – Vérifie si un jeu condensé a été ajouté, et si c’est le cas, envoie un message Slack disant qu’un nouveau jeu est prêt, plus un lien vers le flux
Fonction de jeu condensé
Cette fonction lit à partir du JSON POSTé formaté comme:
{
gameDate: "2019-04-26",
team: "nym"
}
Vous devez également envoyer un en-tête HTTP de MLBAPIRequest
avec une valeur définie comme une variable d’environnement du même nom.
Ceci va alors :
- Construire une URL comme http://gd2.mlb.com/components/game/mlb/year_2018/month_06/day_26/master_scoreboard.xml (en utilisant la date entrante)
- Recherchercher le nœud <game> où home_file_code= »nym » ou away_file_code= »nym » (en utilisant l’équipe entrante)
- Relever l’attribut game_pk pour obtenir l’URL par ex.par exemple « https://statsapi.mlb.com/api/v1/game/530594/content?language=en »
- Trouver dans les nœuds media.epgAlternate la section « Extended Highlights », puis trouver l’élément qui est la vidéo condensée du match (si elle existe)
- Poser le nœud URL correct – la vidéo qui a une valeur qui se termine par .mp4
En supposant qu’un jeu condensé soit trouvé, la fonction renvoie alors JSON comme:
{
"opponent": "pit",
"date": "2019-04-26",
"url": "http://mediadownloads.mlb.com/mlbam/mp4/2018/06/27/2202032583/1530076464641/asset_1200K.mp4",
"mediaType": "Extended Highlights"
}
Note :
- L’attribut
opponent
peut être nul si aucun jeu n’a été trouvé - L’attribut
url
peut être nul si aucun flux de jeu condensé n’a été trouvé pour le jeu - L’attribut
mediaType
attribut peut être nul ou « Extended Highlights » (j’ai expérimenté le fait d’obtenir aussi le « Recap » pendant un moment)
Configuration – Variables d’environnement
-
MLBAPIRequest
: La valeur à envoyer dans l’en-tête de toute requête
Fonction de surveillance
Cette fonction sauvegarde les dernières données de jeu trouvées dans un seau S3, puis est conçue pour s’exécuter selon un calendrier pour faire ce qui suit :
- Regarde la date dans les données de jeu sauvegardées JSON à partir de la dernière exécution réussie
- Si la date est aujourd’hui, nous avons terminé (nous ne gérons pas encore les doubles têtes de série !)
- Sinon, appelez la fonction de jeu condensé pour hier ou aujourd’hui (si le dernier jeu était hier), et si le résultat a un attribut url
- Enregistrer les dernières données de jeu JSON dans S3
- Appeler Slack en envoyant l’attribut url dans un mesage
- Appeler un hook web IFTTT qui envoie une notification iOS, en cliquant sur laquelle s’ouvre l’URL du viedo
Vous pouvez configurer une planification dans Cloudwatch pour qu’elle soit exécutée toutes les N minutes.
Configuration – Variables d’environnement
-
S3ACCESSKEYID
: Clé d’accès pour le seau S3 pour sauvegarder les données du jeu -
S3DATABUCKET
: Nom du seau S3 pour sauvegarder les données du jeu -
S3DATAFILE
: Nom du fichier pour sauvegarder les données du jeu dans -
S3SECRETACCESSKEY
: Secret d’accès pour le seau S3 pour sauvegarder les données de jeu -
SLACK_WEBHOOK_URL
: URL du webhook pour envoyer le message Slack à -
TEAM
: Abréviation de l’équipe à surveiller, par exemple. nym -
IFTTT_EVENT_NAME
: Nom de l’événement IFTTT pour envoyer l’appel de notification à -
IFTTT_MAKER_KEY
: Nom de la clé de fabricant IFTTT pour activer les appels IFTTT
Summary
Tout fonctionne très bien jusqu’à présent, et j’obtiens exactement ce dont j’ai besoin. Très heureux ! Je pourrais encore m’abonner à MLB TV plus tard dans la saison si je rate les matchs en direct du week-end – ou même si les Mets entrent dans une course aux playoffs – mais pour l’instant, je peux continuer à regarder les moments forts sans cela.
L’API de MLB était un peu en mouvement pendant les premières semaines de la saison. Ce n’est pas une API publique, donc il faut s’y attendre, mais espérons qu’elle sera stable pendant un certain temps maintenant.
J’ai également construit un raccourci iOS pour appeler l’API directement, donc si pour une raison quelconque l’URL de la vidéo a changé, ou si j’ai manqué/supprimé la notification par accident.
Si vous voulez mettre en place quelque chose de similaire pour vous-même et que les instructions de GitHub ne sont pas claires, faites-le moi savoir et je vais essayer de vous aider!