Swiftでiksm_session取得のライブラリつくった

Nintendo Switch

SplatNet2

SplatNet2
SplatNet2 is the framework to generate iksm_session using internal and external API.

CocoaPodsかSwift Package Managerを使って追加してください。それらの使い方についてはググればいくらでも記事が出てくるので割愛します。

注意点

有志により無償で利用可能な二つの外部APIを利用しています。個人利用の場合は構いませんが、商用利用(例えばApp Storeで販売する)場合には外部APIの利用規約を遵守する必要があります。

frozenpandaman/splatnet2statink
Takes battle data from the SplatNet 2 app and uploads it to stat.ink. - frozenpandaman/splatnet2statink

利用前に許可を取ること

はっきりとした利用目的があり、既存のアプリとかぶらない内容であればだいたい許可されます。

ユニークで適切なフォーマットのUser-Agentを設定すること

現在公開しているライブラリはUser-Agentをコード側から変えられるようになっていないので近々修正しようと思います。

外部APIを利用していることをユーザに明確に伝える

任天堂の公式APIでないものを使っていることを必ず明記しましょう。

アプリ内で代替手法について解説すること

mitmproxyやFiddlerでiksm_sessionを取得できることを明記すること。または解説しているウェブページへのリンクを適切に貼ること。

アプリは無料で提供しなければならない

有償アプリで配布することは許可されていません。必ず無償アプリとしてストアに提出しましょう。

機能のアンロックのために寄付を求めるべきではない

例えばリザルトをよりたくさん保存するために課金するシステムなどを組み込んではいけないということです。

え、でもSalmoniaって寄付募ってるよね?っていう突っ込みはなしです。なぜならSalmoniaは寄付しても機能がアンロックされないのでセーフなのです(謎理論

広告を表示することは推奨されない

「推奨されない」とあるだけで、実際にApp Storeで配布されているアプリはほぼ全てに広告がついています。まあ広告をつけないと完全にタダ働きになるのでこれは仕方ない気もしますが。

使い方

ドキュメントを読めば多分分かるかと。

iksm_sessionの取得

これがベース機能でgetSessionToken()でsession_tokenを取得したあとでgenIksmSession()を呼び出せばデータが取得できます。

genIksmSession()はJSONデータを返しますが、中身は以下のようになっています。

{
    "user": {
        "nickname": "USER NAME",
        "thumbnail_url": "USER TUMBNAIL IMAGE URL"
    },
    "iksm_session": "IKSM SESSION",
    "nsaid": "USER NSA ID"
}

優しさ設計でユーザ名、ユーザのアイコンもついでにとってきてくれます。また、固有IDであるnsaidもとってくるのでデータベース書き込み時にはプライマリキーに設定すると良いかもしれません。

iksm_sessionの再生成

特に難しいことはなくて、生成時と同じようにgenIksmSession()を呼び出します。

import SplatNet2
import SwiftyJSON

do {
    let session_token = "YOUR SESSION TOKEN"
    response = try SplatNet2.genIksmSession(session_token)
} catch (error) {
    // Error handling
}

二回目以降はsession_tokenがあれば再生成できるので、session_tokenは保存しておくようにしましょう。

nickname_and_iconsの取得

任天堂のAPIにはnsaidを渡すとユーザの現在の名前とアイコンを返すものがあります。

それらを利用しやすくした関数を作ったのでぜひともご利用ください。

import SplatNet2
import SwiftyJSON

do {
    let iksm_session = "YOUR IKSM SESSION"
    let nsaids: [String] = "NSAID's ARRAY"
    response = try SplatNet2.getPlayerNickname(nsaids, iksm_session)
} catch (error) {
    // Error handling
}

String型配列にnsaidをガンガン詰め込んでiksm_sessionと一緒に渡せば、JSON配列でデータを返してくれます。100件くらいなら一度に呼び出しても問題なかったですが、あんまりたくさん一気に呼び出すのはやめといたほうがいいでしょう。

まとめ

というわけで、良きプログラミングライフを!!!

コメント

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