酢日報

ch3coohの日報。このブログはひっそりと運営しています

2017-07-27 ch3cooh

病院でもらってきて薬を飲んだところとても眠いが、胸にひっかかる感じがあったのは改善された。

仕事

スプラトゥーン

Question - Pulling Splatoon2 related data from the Nintendo Switch Online app | GBAtemp.net - The Independent Video Game Community」でイカリング2にアクセスするためのコードが書かれていた。

#!/usr/bin/env python3
import logging
import requests
import json
import sys
import http.client as http_client
http_client.HTTPConnection.debuglevel = 1

logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

def main():

    client_id = "xxxxxxxxxxxx"
    resource_id = 123456789
    init_session_token = "eyJhbGci.....Wq2Q"

    session = requests.Session()
    response = session.post('https://accounts.nintendo.com/connect/1.0.0/api/token',
                            headers={'Accept': 'application/json'},
                            json={ "client_id": client_id,
                                  "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer-session-token",
                                  "session_token": init_session_token})
    api_tokens = response.json()
    #print(json.dumps(response.json(),indent=4))
  
    response = session.post('https://api-lp1.znc.srv.nintendo.net/v1/Account/GetToken',
                            headers={'Accept': 'application/json', 
                                     'Authorization': "Bearer " + api_tokens["access_token"]},
                            json={"parameter": {
                                    "language": 'null',
                                    "naBirthday": 'null',
                                    "naCountry": 'null',
                                    "naIdToken": api_tokens["id_token"] }
                                    })
    tokens = response.json()["result"]
    #print(json.dumps(response.json(),indent=4))
  
    response = session.post('https://api-lp1.znc.srv.nintendo.net/v1/Game/GetWebServiceToken',
                        headers={'Accept': 'application/json',
                                 'Authorization': "Bearer "+tokens["webApiServerCredential"]["accessToken"]},
                        json={"parameter": {"id": resource_id}} )

    res_json = response.json()
    if res_json["status"] != 0:
        logging.error(json.dumps(res_json,indent=4))
        raise RuntimeError("initial auth failed")
    access_token = res_json["result"]["accessToken"]

    # get the cookie setup
    response = session.get("https://app.splatoon2.nintendo.net/?lang=ja-JP",
                        headers={'Accept': 'application/json',
                                 'X-gamewebtoken': access_token})

    # now we can rock'n'roll
    response = session.get('https://app.splatoon2.nintendo.net/api/schedules', headers={'accept': 'application/json'})
    print(json.dumps(response.json(), indent=4))

pythonを動かす環境がないので上記のコードは試せていない。

client_idは固定だから良いとして、resource_idはどこから発生するものなのか不明。

resource_idはhttps://app.splatoon2.nintendo.net/2.0.0/users/meで返ってくるjsonに含まれている情報のようだ。