7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】大谷選手の試合予定を自動でLINEに通知する

Posted at

Pythonを使って大谷選手の試合予定を自動でLINEに通知する

大谷選手、今年もばんばんホームランを打って、活躍してほしい!
この記事では、そんなあなたに、エンゼルスの試合予定をLineに通知する、自動化手法を紹介します。

LINE Notify API の利用準備

今回は、ユーザへの一方的な通知になるので LINE Notify API を利用します。

APIのトークンは LINE公式サイト からアカウントを登録することで取得できます。
マイページ > トークンを発行する > トークン名、トークルームを設定 > 発行する
発行されたトークンはpythonコード内で使用するのでコピーしておきます。

必要ライブラリのインストール

今回は、LINE APIにHTTPリクエストを送信するためのrequestsと、
MLBの試合や選手の情報を取ってくるstatsapiのライブラリを利用します。

$ pip install requests MLB-StatsAPI

コーディング

作成したpythonコードは以下です。 今回はコード内に全ての解説を記載しています。

こちらのスクリプトを実行すると、例えば、

"次の試合は 2022-05-01 05:05:00 から Los Angeles Angels vs. Chicago White Sox です"

など、次のエンゼルスの試合が何時からかを通知してくれるBotが実現します!

linebot.py
import datetime
import requests
import statsapi


def send_line_notify(notification_message):
    # トークンとLine notify apiのエンドポイントを設定
    line_notify_token = '取得したトークンを記載'
    line_notify_api = 'https://notify-api.line.me/api/notify'
    # トークンをリクエストヘッダに、送信メッセージをリクエストデータに記載
    headers = {'Authorization': f'Bearer {line_notify_token}'}
    data = {'message': f'message: {notification_message}'}
    # HTTPのPOSTリクエストを発行
    requests.post(line_notify_api, headers=headers, data=data)


def get_next_game():
    # Los Angeles Angels の team Code 'ANA' でチームIDを取得
    team_info = statsapi.lookup_team('ana')[0]
    team_id = team_info['id']
    # チームIDを利用して次の試合のIDを取得
    game_id = statsapi.next_game(team_id)
    # 試合IDを利用して試合の詳細情報を取得
    next_game = statsapi.schedule(game_id=game_id)[0]
    return next_game


if __name__ == '__main__':
    # 次の試合のゲーム情報を取得
    next_game = get_next_game()
    # ゲームの開始時間を取得し、JST(UTC+9:00)時間に合わせる
    start_time = datetime.datetime.strptime(next_game['game_datetime'], '%Y-%m-%dT%H:%M:%SZ')
    start_time += datetime.timedelta(hours=9)
    # ホームチームとアウェーチームをそれぞれ取得
    home_team = next_game['home_name']
    away_team = next_game['away_name']
    # ラインに通知するメッセージを作成
    msg = '次の試合は ' + str(start_time) + ' から ' + away_team + ' vs. ' + home_team + ' です'
    # ラインへの通知を実施
    send_line_notify(msg)

ちなみに、get_next_game()の中身は、

{
   "game_id":661534,
   "game_datetime":"2022-04-30T20:05:00Z",
   "game_date":"2022-04-30",
   "game_type":"R",
   "status":"Scheduled",
   "away_name":"Los Angeles Angels",
   "home_name":"Chicago White Sox",
   "away_id":108,
   "home_id":145,
   "doubleheader":"N",
   "game_num":1,
   "home_probable_pitcher":"Vince Velasquez",
   "away_probable_pitcher":"Jose Suarez",
   "home_pitcher_note":"",
   "away_pitcher_note":"",
   "away_score":"0",
   "home_score":"0",
   "current_inning":"",
   "inning_state":"",
   "venue_id":4,
   "venue_name":"Guaranteed Rate Field",
   "summary":"2022-04-30 - Los Angeles Angels @ Chicago White Sox (Scheduled)"
}

こんな感じでした。

細かいパラメータの意味はMLB Stats APIのドキュメントを参照しないといけませんが、
両チームの先発投手を通知内容に含めるぐらいであれば簡単に実現できそうですね!

まとめ

  • pythonを使えばエンゼルスの試合情報をLINE通知したり、自由にカスタマイズしながら簡単に自動化できる
  • 大谷選手はとにかく今年も頑張ってほしい!

以上、ご訪問ありがとうございました。

7
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?