Splatoon3の勝敗データを収集・保存・解析を行っているサイトstat.inkに自身の戦績データを登録することで、自分の戦績データの分析が行いやすくなります。
stat.inkには、s3sというコマンドラインツールを用いて戦績をアップロードしますが、こちらの導入方法とMac OSでのサービス登録方法について手順を解説します。
実行環境
- macOS Ventura 13.0
- Python 3.9.6
s3sのセットアップ
stat.inkのアカウントの作成
もしstat.inkのアカウント作成がまだの方は、以下からアカウントの作成を行ってください。
s3sのダウンロードとインストール
cd ~/
git clone https://github.com/frozenpandaman/s3s
もしgit clone
で以下のエラーが表示された場合、xcodeのcommand line developer toolsをインストールします。
% git clone https://github.com/frozenpandaman/s3s
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
% xcode-select --install
xcode-select: note: install requested for command line developer tools
改めてgit clone
を実施すると成功します。
% git clone https://github.com/frozenpandaman/s3s
Cloning into 's3s'...
remote: Enumerating objects: 347, done.
remote: Counting objects: 100% (210/210), done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 347 (delta 189), reused 171 (delta 156), pack-reused 137
Receiving objects: 100% (347/347), 109.62 KiB | 2.28 MiB/s, done.
Resolving deltas: 100% (215/215), done.
s3sのインストールを行います。
cd s3s
pip3 install -r requirements.txt
pipの最新版を使うよう警告が表示されますが今回は無視します。
WARNING: You are using pip version 21.2.4; however, version 22.3 is available.
You should consider upgrading via the '/Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip' command.
s3sの初期設定と初回実行
初回実行時には以下の3点の初期設定と過去100戦のstat.inkへのアップロードが行われます。
- ロケールの設定
- stat.inkのAPIキーの保存
- ニンテンドーオンラインのAPIキーの保存
以下のコマンドを実行します。
python3 s3s.py -r
stat.inkのAPIキー入力を促されます。
Generating new config file. s3s v0.1.11 » While s3s is in beta, please update the script regularly via `git pull`. stat.ink API key:
stat.inkにアクセスし、上部のメニューからプロフィールと設定をクリックします。
プロフィールと設定画面で、APIキーを表示ボタンをクリックします。表示されたAPIキーをコピーします。
取得したAPIキーをターミナルに入力してEnterキーを押下します。
次にロケールの入力を促されます。英語で構わない場合はen-US
でエンターキーを押下します。日本語にしたい場合はja-JP
を入力します。ロケールの変更による違いは良くわかりませんでした。
Default locale is en-US. Press Enter to accept, or enter your own (see readme for list).
en-US
ロケールの一覧は以下の通りです。
language_list = [
"de-DE", "en-GB", "en-US", "es-ES", "es-MX", "fr-CA", "fr-FR",
"it-IT", "ja-JP", "ko-KR", "nl-NL", "ru-RU", "zh-CN", "zh-TW"
]
ニンテンドーオンラインのAPIキーの取得を促されます。
Checking if there are previously-unuploaded battles/jobs...
Make sure you have fully read the "Token generation" section of the readme before proceeding. To manually input a token instead, enter "skip" at the prompt below.
Navigate to this URL in your browser:
https://accounts.nintendo.com/connect/1.0.0/authorize?[...省略...]
Log in, right click the "Select this account" button, copy the link address, and paste it below:
Navigate to this URL in your browser:
以下に表示されているURLにアクセスし、この人にするのボタンのリンクのアドレスを右クリック、コピーしてターミナルに貼り付けます。
コピーしたURLをターミナルに貼り付けて、Enterキーを押下します。
Wrote session_token to config.txt.
Attempting to generate new gtoken and bulletToken...
Wrote tokens for [ニンテンドーアカウント名] to config.txt.
Checks for unuploaded battles and uploads any that are found.
過去の戦績をチェックし、過去最大100件分のバトルの戦績がstat.inkにアップロードされます。アップロードが完了したらstat.inkの自分のSplatoon3の戦績ページを確認してください。戦績がアップロードされていれば成功です。
コマンドライン引数
$ python s3s.py [-M [N]] [-r] [-nsr | -osr]
The -M flag runs the script in monitoring mode, uploading new battles/jobs as you play, checking for new results every N seconds; if no N is provided, it defaults to 300 (5 minutes).
The -r flag checks for & uploads any battles/jobs present on SplatNet 3 that haven't yet been uploaded.
The -nsr flag makes Salmon Run jobs not be monitored/uploaded. Use this if you're playing Lobby modes only.
The -osr flag, conversely, makes only Salmon Run jobs be monitored/uploaded. Use this if you're playing at Grizzco only.
フラグ | 説明 |
-M [N] | 監視モード。定期的に未アップロードの戦績があるかチェックし、未アップロードの戦績があればアップロードします。Nはモニタリングの間隔を秒で指定します。 |
-r | stat.inkに未アップロードの戦績のみをアップロードします。 |
-nsr | サーモンランの戦績を監視・アップロードしません。 |
-osr | サーモンランの戦績のみを監視・アップロードします。 |
以下の例は、1時間ごとに未アップロードの戦績があるかチェックし、未アップロードの戦績をstat.inkにアップロードします。
python3 s3s.py -M 3600 -r
自動化
Macを再起動する度にコマンド python3 s3s.py -M 3600 -r
を実行しないといけないのは煩わしいため、Macの起動時に自動的にサービスとして動作するように設定します。ここではMac OS Venturaでの設定方法を記載しますので、WindowsやLinuxをお使いの方はそれぞれのOSの設定方法をご確認ください。
Macにおけるサービス登録
Macではlaunchdがシステム起動時に自動的に起動するサービスの管理を行います。
ユーザー管理のサービスは以下の手順で行います。
- 起動するサービスの設定ファイル
hogehoge.plist
を作成する。 ~/Library/LaunchAgents
配下にhogehoge.plist
を配置する。hogehoge.plist
の所有者・権限を設定する。launchctl load hogehoge.plist
でサービスを登録する。
サービスの設定ファイル作成
stat-inkへの戦績アップロード用サービスの設定ファイルを作成します。
- s3sをOS起動時に実行し、1時間ごとに戦績を取得しアップロードする。
- 24時間ごとに再起動を行う。
- サービス終了時には再起動する。(実際には再起動するタイミングない)
% cd ~/Library/LaunchAgents/
% vi s3s-stat-ink-uploader.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>s3s-stat-ink-uploader</string>
<key>ProgramArguments</key>
<array>
<string>python3</string>
<string>/Users/[ユーザー名]/s3s/s3s.py -M 3600 -r</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>WorkingDirectory</key>
<string>/Users/[ユーザー名]/s3s</string>
<key>StartInterval</key>
<integer>86400</integer>
</dict>
</plist>
s3s自体のアップデート用サービスの設定ファイルを作成します。
- s3sをOS起動時に実行し、1時間ごとに戦績を取得しアップロードする。
- 24時間ごとに再起動を行う。
- サービス終了時には再起動する。(実際には再起動するタイミングない)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>s3s-updater</string>
<key>ProgramArguments</key>
<array>
<string>git pull --no-edit --ff-only</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>WorkingDirectory</key>
<string>/Users/[ユーザー名]/s3s</string>
<key>StartInterval</key>
<integer>86400</integer>
</dict>
</plist>
文法チェック
文法のチェックを行います。キー名などが誤っている場合でもXMLのスキーム的に問題がない場合は、チェックにひっかからずOK
となります。そのため、後のlaunchctl load hogehoge.plist
でエラーが出た場合はキー名間違いなどの可能性を疑ってください。
% plutil -lint s3s*plist
s3s-stat-ink-uploader.plist: OK
s3s-updater.plist: OK
所有者と権限の変更
所有者と権限を設定します。
chmod [ユーザー名]:staff s3s*.plist
chown 664 s3s*.plist
サービス登録と確認
サービスを登録します。
launchctl load s3s-stat-ink-uploader.plist
launchctl load s3s-updater.plist
サービスの登録状況を確認します。
% launchctl list | grep s3s
- 78 s3s-updater
- 2 s3s-stat-ink-uploader
これで、Macの起動とともに、s3sの戦績自動アップロードとs3s自身のアップデートが自動で定期実行されるようになりました。
ジョブの開始
% launchctl load ~/Library/LaunchAgents/xxx.plist
% launchctl start ジョブラベル
ジョブの停止
% launchctl unload ~/Library/LaunchAgents/xxx.plist
ジョブの再起動
% launchctl ジョブラベル
plistファイルの修正内容の反映
xxx.plistを修正後、stopで再起動してもxxx.plistの修正内容は反映されない。一度unloadして、loadする必要がある。
% launchctl unload ジョブラベル
% launchctl load ~/Library/LaunchAgents/xxx.plist
参考
- stat.ink関連
- launchd関連
- https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#//apple_ref/doc/uid/10000172i-SW7-105327
- http://www.maruko2.com/mw/LaunchDaemons_(launchctl,launchd.plist)%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9#.E3.82.B8.E3.83.A7.E3.83.96.E3.81.AE.E5.81.9C.E6.AD.A2