GAS版Salmoniaを複数アカウント対応した

Javascript

Android利用者向けである

Salmoniaというよりは、単なるリザルト(JSON)アップローダなのだが、まあそこには目をつむってほしい。

Android版のSalmoniaはリザルトアップロード機能しかなく、iOS版のようにデータ分析などができない。よって、本記事はAndroidを所持している方向けで、そういう人はパソコンがあるなら絶対に導入したほうがいいです。

iPhoneやiPadがあるならこれを導入した上でSalmonia2を使えば、より便利にサーモンランを楽しむことができるでしょう。

Google Apps Scriptの設定など

GASのアカウント開設や、設定の大まかな方法は以前と変わっていません。

以下の記事を参考にしてください。

また、iksm_sessionの取得にはPC版のSalmoniaが必須です。

最近コードを大幅に変えて安定性を向上させたので、ぜひともそっちを使ってみてください。

え、じゃあ何が変わったんだとなるわけですが、複数アカウントに対応したのが今回の一番の目玉です。

サブ垢対応のコード

function Salmonia() {
const iksmSessions= JSON.parse(PropertiesService.getScriptProperties().getProperty('IKSM_SESSION'))
const apiToken = PropertiesService.getScriptProperties().getProperty('API_TOKEN')
let jobNum = JSON.parse(PropertiesService.getScriptProperties().getProperty('JOB_NUM'))
iksmSessions.forEach(function(iksm_session, index) {
const present = getJobNumFromSplatNet2(iksm_session)
const preview = Math.max(parseInt(jobNum[index]), present 49)
Logger.log(iksm_session, present, preview)
if(present != preview) {
for(let job_num = preview; job_num <= present; ++job_num) {
Logger.log(`${iksm_session}: ${job_num}`)
const result = getResultFromSplatNet2(iksm_session, job_num)
Utilities.sleep(5000)
setResultToSalmonStats(result, apiToken)
}
} else {
Logger.log(`${iksm_session}: No new results`)
}
jobNum[index] = present.toString()
PropertiesService.getScriptProperties().setProperty("JOB_NUM", JSON.stringify(jobNum))
})
}
function getJobNumFromSplatNet2(iksm_session) {
const url = "https://app.splatoon2.nintendo.net/api/coop_results"
const cookie =`iksm_session=${iksm_session}`
const options = { headers: { cookie }}
const response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() != 200)
throw new Error("Invalid/Expired iksm_session.")
const json = JSON.parse(response.getContentText());
return Math.round(json["summary"]["card"]["job_num"])
}
function getResultFromSplatNet2(iksm_session, job_num) {
const url = `https://app.splatoon2.nintendo.net/api/coop_results/${job_num}`
const cookie =`iksm_session=${iksm_session}`
const options = { headers: { cookie }}
return JSON.parse(UrlFetchApp.fetch(url, options).getContentText())
}
function setResultToSalmonStats(result, apiToken) {
url = "https://salmon-stats-api.yuki.games/api/results"
const headers = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify({results: [result]}),
"headers": {"Authorization" : `Bearer ${apiToken}`},
"muteHttpExceptions": true
}
const response = UrlFetchApp.fetch(url, headers)
if (response.getResponseCode() != 200)
throw new Error("Invalid api-token.")
}
view raw Salmonia2.js hosted with ❤ by GitHub

プロパティについて

プロパティはJSON形式にのみ対応しています。

JSON形式と言われてもよくわからないと思うので、テンプレートを置いておくのでそのとおりに書いてみてください。

IKSM_SESSION => ["IKSM_SESSION_1", "IKSM_SESSION_2"]
API_TOKEN => API_TOKEN
JOB_NUM	=> ["0", "0"]

IKSM_SESSIONJOB_NUMだけは読み込みの都合上、ダブルクオーテーションで囲む必要があります。API_TOKENだけはそのままであることに注意してください。

こんな感じで書き込めたら今まで通り指定したトリガーで実行されます。

こんな感じでどんどんリザルトを自動取得してくれます。実はアップロードが正しくできているかは未確認なのだが、多分大丈夫でしょう(ヨシ

記事は以上。

コメント

タイトルとURLをコピーしました