🏀

MacのメニューバーにNBAの試合経過を表示する (Python + SwiftBar)

に公開

はじめに

Macのメニューバーに自分の好きなものを表示したい!

私はNBAの試合経過をリアルタイムで確認したいと考えていました。

ブラウザを常時開いておくのは作業の妨げになる、でもチラチラ確認したい...と思ったので作りました!
SwiftBarを活用することで、簡単にスクリプトの実行結果をメニューバーに柔軟に表示することができました。

今回は作成したものを実例として、
Pythonで書いたスクリプトを、Macのメニューバーアプリのように手軽に扱う方法を紹介します。

作ったもの

Macのメニューバーに、現在行われているNBAの試合スコアをリアルタイムに表示するプラグインです。

メニューバーに進行中の試合のスコアと経過が表示されます

メニューバーに 🏀 LAL 110-108 GSW (Q4 2:00) のように表示されます


クリックするとドロップダウンで以下の情報が表示されます
レナードがコートに入ってきました

クリックするとドロップダウンで以下の情報が表示されます。

  • 当日の全試合のスコアとステータス
  • 進行中の試合の直近のPlay-by-Play(得点経過など)
  • 試合開始前の予定時刻

このように、単なるテキスト表示だけでなく、ドロップダウンを用いた詳細情報の表示や、
色・フォントの制御も可能です。

技術構成

SwiftBar

SwiftBarは、シェルスクリプトやプログラムの標準出力をメニューバーに表示するmacOSのカスタマイズツールです。

基本的な使い方は大きく分けて3ステップです。

  1. インストール
  2. プラグインの作成
  3. プラグインフォルダの設定、配置

それぞれの手順を軽く説明します。

1. インストール

Homebrewでインストールできます。

brew install --cask swiftbar

2. プラグインの作成

後述するスクリプトを作成し、それをSwiftBarのプラグインとして配置します。

スクリプト名は以下のルールに従う必要があります。

{名前}.{時間}.{拡張子}

例: nba-live-stats.1m.py
この場合、1分ごとにスクリプトが実行されます。

詳しい設定値は以下を参照してください

3. プラグインフォルダの設定、配置

Swiftbarの初回起動時に、プラグインフォルダの設定を求めます。
基本的には、選択したフォルダ内の全てをプラグインファイルとしてインポートしようとするためフォルダ選択には注意してください。
隠しフォルダは無視されます、また .swiftbarignore で設定したファイルは除外されるので必要に応じて設定してください。

Pythonスクリプトの解説

スクリプトは以下の内容になっています。
なお、今回はパッケージ管理ツール uv を使用して依存関係を管理しています。

https://github.com/p-t-a-p-1/nba-live-stats-bar/blob/main/nba_uv.1m.py

処理の流れ

具体的な処理の流れを画像で示しました。

ざっくりと以下の4ステップです。

  1. NBA API呼び出し
    • 失敗時はキャッシュ読み込み
    • 成功時はキャッシュ更新
  2. 優先試合の選択
    • 試合中のうち残り時間が少ないものをメニューバーに表示するものとして選択
  3. メニューバー出力
    • 🏀 LAL 110-108 GSW (Q4 2:00) のような形式で表示
  4. ドロップダウン出力
      1. で選択した試合の詳細を表示
      • Play by Play(直近の動向:誰が得点したかなど)の表示
    • 各試合を一覧表示

NBA APIについては、今回は nba_api という外部ライブラリを活用しております。

まとめ

本記事では、SwiftBarとPythonを使って、MacのメニューバーにNBAの試合経過を表示する方法を紹介しました。

ただ、時差の都合上、NBAの試合時間的に日本だとお昼前には大体試合が終わっているので、休日の朝くらいしかリアルタイムで表示できないのも現状です...

今回はNBAのスコアを表示しましたが、天気予報や株価、自分のTo-Doリストなど、アイデア次第でいろいろな情報をメニューバーに表示できます。
ブラウザを開かなくてもパッと確認できるのはとても便利です。

ぜひ皆さんも、自分の好きなものをメニューバーに表示させてみてください!

GitHubで編集を提案
マーベリックスのテックブログ

Discussion