#!/usr/bin/env python3# -*- coding: utf-8 -*-import sys
if sys.version_info <(3,0,0):print("DO NOT use Python 2.\nEVER.\nhttps://pythonclock.org")
exit(1)import platform
oldexit = exit
defexit(code):if platform.system()=="Windows":import atexit
input("Press Enter to exit.")
oldexit(code)if sys.stdout.encoding.lower()=="ascii":import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer)
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer)try:import requests
except ImportError as e:print(e)if platform.system()=="Windows":from distutils.util import strtobool
a =input("The requests module is not available. Should we try to install it automatically using pip? [y/n] ")whileTrue:try:
a = strtobool(a)breakexcept ValueError:
a =input("Please answer with y or n: ")if a ==1:import subprocess
subprocess.call([sys.executable,"-m","pip","install","requests"])else:
exit(1)else:print("\"requests\" is not available. Install it with pip or your distribution's package manager.")
exit(1)import requests
from urllib.parse import urlparse, parse_qs, quote, urljoin
import pprint
import base64
# Remote Play Windows Client
CLIENT_ID ="ba495a24-818c-472b-b12d-ff231c1b5745"
CLIENT_SECRET ="mvaiZkRsAsI1IBkY"
LOGIN_URL ="https://auth.api.sonyentertainmentnetwork.com/2.0/oauth/authorize?service_entity=urn:service-entity:psn&response_type=code&client_id={}&redirect_uri=https://remoteplay.dl.playstation.net/remoteplay/redirect&scope=psn:clientapp&request_locale=en_US&ui=pr&service_logo=ps&layout_type=popup&smcid=remoteplay&prompt=always&PlatformPrivacyWs1=minimal&".format(CLIENT_ID)
TOKEN_URL ="https://auth.api.sonyentertainmentnetwork.com/2.0/oauth/token"print()print("########################################################")print(" Script to determine PSN AccountID")print(" thanks to grill2010")print(" (This script will perform network operations.)")print("########################################################")print()print(" Open the following URL in your Browser and log in:")print()print(LOGIN_URL)print()print(" After logging in, when the page shows \"redirect\", copy the URL from the address bar and paste it here:")
code_url_s =input("> ")
code_url = urlparse(code_url_s)
query = parse_qs(code_url.query)if"code"notin query orlen(query["code"])==0orlen(query["code"][0])==0:print(" URL did not contain code parameter")
exit(1)
code = query["code"][0]print(" Requesting OAuth Token")
api_auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)
body ="grant_type=authorization_code&code={}&redirect_uri=https://remoteplay.dl.playstation.net/remoteplay/redirect&".format(code)
token_request = requests.post(TOKEN_URL,
auth = api_auth,
headers ={"Content-Type":"application/x-www-form-urlencoded"},
data = body.encode("ascii"))print(" WARNING: From this point on, output might contain sensitive information in some cases!")if token_request.status_code !=200:print(" Request failed with code {}:\n{}".format(token_request.status_code, token_request.text))
exit(1)
token_json = token_request.json()if"access_token"notin token_json:print(" \"access_token\" is missing in response JSON:\n{}".format(token_request.text))
exit(1)
token = token_json["access_token"]print(" Requesting Account Info")
account_request = requests.get(TOKEN_URL +"/"+ quote(token), auth = api_auth)if account_request.status_code !=200:print(" Request failed with code {}:\n{}".format(account_request.status_code, account_request.text))
exit(1)
account_info = account_request.json()print(" Received Account Info:")
pprint.pprint(account_info)if"user_id"notin account_info:print(" \"user_id\" is missing in response or not a string")
exit(1)
user_id =int(account_info["user_id"])
user_id_base64 = base64.b64encode(user_id.to_bytes(8,"little")).decode()print()print(" This is your AccountID:")print(user_id_base64)
exit(0)"""
{'client_id': 'ba495a24-818c-472b-......
This is your AccountID:
xxxxxxxxxxxx
""""""
{'client_id': 'ba495a24-818c-472b-......
This is your AccountID:
xxxxxxxxx
"""