🦑

【Splatoon3】s3sを立てて戦績をstat.inkに自動アップする

2022/11/01に公開
2

※サードパーティのソフトウェアを使用します。本記事の内容を実行する場合は自己責任でお願いします。


みなさん、イカしてますか? ようやくS+0に上がった響音カゲです。

スプラトゥーン3の戦績分析って楽しいですよね。自分のその日の動きが数字で見えるので、試合動画と一緒に見返すとすごく勉強になります。

スプラトゥーンの戦績ログを管理できる stat.ink というサービスに自動で戦績をアップロードできる s3s というスクリプトが公開されていたので、Ubuntuサーバー上にserviceとしてセットアップするまでのやり方を解説します。

実行環境

ソフトウェア

  • s3s@2d59ff653c (2022/11/01 12:44(JST)時点での最新版)

サーバー環境

  • さくらのVPS 1G
  • Ubuntu Server 22.04
  • Python 3.10.6 (apt版)

色々動かしてるサーバーに突っ込みました。ただのPythonスクリプトなので、GCPの無料枠や、512MB系のVPSやRaspberry Piでも十分動くと思います。

クライアント環境

  • Ubuntu 22.04 (WSL2 on Windows11 Home)

セットアップ

Python3とGitの環境入れてからpipで依存関係を入れます。
その後、APIキーを設定します。

必要なもののインストールとダウンロード

pwd # /home/[ユーザー名]/src で作業します

sudo apt update
sudo apt install -y git python3 python3-pip
git clone https://github.com/frozenpandaman/s3s
cd s3s
pip3 install -r requirements.txt

APIキーの設定

s3sは以下の2つの設定が必要です🦑

  1. stat.inkのAPIキー
  2. ニンテンドーネットワークのAPIキー

初回起動時に設定画面が出てきます。

python3 s3s.py -r
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キーは「プロフィールと設定」から取得できます。

ロケール(翻訳)を入れろと出てくるので、そのままの英語でもいいですが一応ja-JPを入れておきます。

Default locale is en-US. Press Enter to accept, or enter your own (see readme for list).
ja-JP

ロケール一覧はイカの通り。831行目付近にあります。

                        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:

URLにアクセスし、「この人にする」を右クリックしてから「リンクのアドレスをコピー」して端末に貼り付けます。

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.

戦績のアップロードが始まったら、しばらくしてからstat.inkの自分のページを見てみましょう。
戦績がアップロードされていれば成功です!

オプション(フラグ)について

$ python3 s3s.py [-M [N]] [-r] [-nsr | -osr] [-o] [-i FILE FILE] [-t]
フラグ 説明
-M [N] 定期的に戦績をアップロードします。デフォルトでは300秒(5分)ごとになっています。
-r stat.inkに未アップロードの戦績かどうかをチェックしてからアップロードします。
-nsr サーモンランの戦績を取得、アップロードしません。
-osr サーモンランの戦績だけを取得し、アップロードします。
-o 戦績をローカルファイルに出力します。
-i FILE FILE ローカルファイルのリザルトをアップロードします。-i results.json overview.jsonの順でアップロードしてください。
-t 戦績を取得だけしてアップロードしません(いわゆるdry run)
--help ヘルプを表示します。

サービス化する

ローカルで動かす場合は python3 s3s.py -M 3600 -r とかでいいのですが、サーバーで常時動かす場合はサービス化すると楽です。

crontabでもいいんですがsystemdにserviceとして登録したほうが、動かしたり止めたりしやすいしログも見やすいのでおすすめです。

sudo vim /etc/systemd/system/s3s.service とかでserviceファイルを作って編集します。
1時間おきにデータ更新、1日おきに再起動、落ちたら30分後に再起動ぐらいの負荷にしてあります。

[Unit]
Description = Stat.ink uploader

[Service]
Type = simple
Restart = always
RestartSec = 30min
RuntimeMaxSec = 86400
ExecStart = /usr/bin/python3 /home/[ユーザー名]/src/s3s/s3s.py -M 3600 -r
User = [ユーザー名]
WorkingDirectory = /home/[ユーザー名]/src/s3s

[Install]
WantedBy = multi-user.target

s3sには結構頻繁に仕様変更が入ってるので、ついでに git pull を自動でやってくれる、自動更新用のサービスファイルも作っちゃいましょう。
sudo vim /etc/systemd/system/s3s-update.service とします。

[Unit]
Description = s3s updater

[Service]
Type = oneshot
Restart = no
ExecStart = /usr/bin/git pull --no-edit --ff-only
User = [ユーザー名]
WorkingDirectory = /home/[ユーザー名]/src/s3s

[Install]
WantedBy = multi-user.target

更新のタイマーも1日おきに動かしておきます。sudo vim /etc/systemd/system/s3s-update.timer とします。

[Unit]
Description = Timer for s3s-updater

[Timer]
OnUnitActiveSec = 1day

[Install]
WantedBy = timers.target

最後に、サービスを起動します。

sudo systemctl daemon-reload

sudo systemctl start s3s-update.service # s3s自動更新のテスト
sudo systemctl status s3s-update.service # 動いてるか確認
sudo systemctl enable s3s-update.service # s3sの自動更新をオンにする
sudo systemctl enable s3s-update.timer
sudo systemctl start s3s-update.timer # timerを起動

sudo systemctl start s3s # s3sを起動する
sudo systemctl status s3s # 動いてるか確認
sudo systemctl enable s3s # s3sの自動起動をオンにする

まとめ

スプラトゥーン3の戦績を自動アップロードする方法について解説しました。

サービス書くのにもちょうどいいぐらいの難易度なので、サーバー使ってみる人には良い勉強になるかと思います。

ちなみに、私の戦績はイカのURLにあります🦑

https://stat.ink/@HibikineKage/spl3

ほぼトライストリンガー専です。たまにヒーローシューターレプリカとソイチューバーを使います。
普段はガチマをちょっとだけ回してます。ナワバリはフレンドとだけ潜ります。
もしよかったら一緒にスプラやりましょう!

それでは、イカ、よろしく~~~~🦑

Discussion

takkiitakkii

トライストリンガー使ってます。勉強になりました、ありがとうございます!
一点、上記に加えてtimerユニットの起動も必要かと思いましたがいかがでしょうか?
(sudo systemctl status s3s-update.timer)

響音カゲ響音カゲ

@takkii コメントありがとうございます! 抜けていました、修正します!