API 文档
2.1 accountId(如果只获取本人游戏及奖杯数据可以跳过)
# psn id
username = ""
url = f"https://us-prof.np.community.playstation.net/userProfile/v1/users/{username}/profile2?fields=npId,onlineId,accountId,avatarUrls,plus,aboutMe,languagesUsed,trophySummary(@default,level,progress,earnedTrophies),isOfficiallyVerified,personalDetail(@default,profilePictureUrls),personalDetailSharing,personalDetailSharingRequestMessageFlag,primaryOnlineStatus,presences(@default,@titleInfo,platform,lastOnlineDate,hasBroadcastData),requestMessageFlag,blocking,friendRelation,following,consoleAvailability"
# 1.3 及 1.4 中获取的 access_token
headers = {"Authorization": f"Bearer {access_token}"}
response = requests.get(url, headers=headers, allow_redirects=False)
# 请求成功后从账号信息中获取 accountId
accountId = response.json().get("profile").get("accountId")
测试可以通过国服账号获取其他服账号的 accountId
2.2 奖杯汇总信息
# 2.1 中获取的 accountId 或 me
accountId = "me"
url = f"https://m.np.playstation.com/api/trophy/v1/users/{accountId}/trophySummary"
# 1.3 及 1.4 中获取的 access_token
headers = {"Authorization": f"Basic {access_token}"}
trophy_request = requests.get(url, headers=headers, allow_redirects=False)
print(trophy_request.json())
返回结果如下:
{
"accountId": "1301***********2184",
"trophyLevel": 301,
"trophyPoint": 60975,
"trophyLevelBasePoint": 60840,
"trophyLevelNextPoint": 61740,
"progress": 15,
"tier": 4,
"earnedTrophies": {"bronze": 1471, "silver": 420, "gold": 149, "platinum": 43},
}
字段 | 类型 | 描述 |
accountId | 字符 | accountId |
trophyLevel | 数值 | 级别 |
trophyPoint | 数值 | 点数 |
trophyLevelBasePoint | 数值 | 当前级别点数 |
trophyLevelNextPoint | 数值 | 下一级所需点数 |
progress | 数值 | 点数百分比 |
tier | 数值 | ps stars? |
earnedTrophies | json 对象 | 已获取奖杯情况 |
# 2.1 中获取的 accountId 或 me
accountId = "me"
url = f"https://m.np.playstation.com/api/trophy/v1/users/{accountId}/trophyTitles"
# params = {"limit": "", "offset": 0}
# url += "?" + "&".join([f"{key}={value}" for key, value in params.items()])
# 1.3 及 1.4 中获取的 access_token
headers = {"Authorization": f"Basic {access_token}"}
trophy_request = requests.get(url, headers=headers, allow_redirects=False)
print(trophy_request.json())
入参说明:
参数 | 类型 | 描述 |
accountId | 字符 | 使用 me 获取本人游戏数据,或获取制定账号数据 |
limit | 数值(最小 1,最大 800,默认 100) | 限制返回游戏数据的数量 |
offset | 数值(最小 0,最大游戏总数-1,默认 0) | 游戏数据索引,第一个游戏为 0,最后一个为游戏总数-1 |
{
"trophyTitles": [
{
"npServiceName": "trophy2",
"npCommunicationId": "NPWR20188_00",
"trophySetVersion": "01.40",
"trophyTitleName": "ASTRO’s PLAYROOM",
"trophyTitleIconUrl": "https://psnobj.prod.dl.playstation.net/psnobj/NPWR20188_00/035a02db-e64f-4572-8653-4a3db37fe2f6.png",
"trophyTitlePlatform": "PS5",
"hasTrophyGroups": true,
"trophyGroupCount": 3,
"definedTrophies": {
"bronze": 31,
"silver": 14,
"gold": 5,
"platinum": 1
},
"progress": 2,
"earnedTrophies": {
"bronze": 2,
"silver": 0,
"gold": 0,
"platinum": 0
},
"hiddenFlag": false,
"lastUpdatedDateTime": "2024-09-30T11:08:02Z"
}
],
"totalItemCount": 1
}
字段 | 类型 | 描述 |
trophyTitles | json 对象 | 基于入参数量限制返回的游戏具体数据 |
totalItemCount | 数值 | 游戏总数 |
nextOffset | 数值 | trophyTitles 的第一个游戏索引 |
previousOffse | 数值 | trophyTitles 的最后一个游戏索引 |
字段 | 类型 | 描述 |
npServiceName | 字符 | 游戏平台,trophy 为 PS3、PS4、PSV;trophy2 为 PS5、PC |
npCommunicationId | 字符 | 游戏的唯一 id |
trophyTitleName | 字符 | 游戏名称 |
trophyTitleDetail | 字符 | 游戏描述 |
trophyTitleIconUrl | 字符 | 游戏图标地址 |
trophyTitlePlatform | 字符 | 游戏平台 |
hasTrophyGroups | 布尔值 | 是否有多组奖杯,DLC 算不同组的奖杯 |
trophyGroupCount | 数组 | 奖杯组总数 |
definedTrophies | json 对象 | 默认奖杯汇总信息 |
progress | 数值 | 奖杯获取百分比 |
earnedTrophies | json 对象 | 已获取奖杯信息 |
hiddenFlag | 布尔值 | 奖杯是否隐藏,只有获取本人奖杯列表时才能看到隐藏的游戏 |
lastUpdatedDateTime | 日期对象 | 最后一个奖杯获取时间 |
2.4.1 指定游戏的奖杯汇总信息
# 2.3 中获取到的游戏 npCommunicationId(宇宙机器人无线控制器指南)
npCommunicationId = "NPWR20188_00"
url = f"https://m.np.playstation.com/api/trophy/v1/npCommunicationIds/{npCommunicationId}/trophyGroups"
# 如果是 ps3、ps4、psv 游戏需要加 npServiceName 参数
# params = {"npServiceName": "trophy"}
# url += "?" + "&".join([f"{key}={value}" for key, value in params.items()])
# 1.3 及 1.4 中获取的 access_token
headers = {"Authorization": f"Bearer {access_token}"}
trophy_request = requests.get(url, headers=headers)
print(trophy_request.json())
入参说明:
参数 | 类型 | 描述 |
npCommunicationId | 字符 | 游戏的唯一 id |
npServiceName | 字符(值:trophy) | 如果是 ps3、ps4、psv 游戏必须加该参数 |
{
"npServiceName": "trophy2",
"npCommunicationId": "NPWR20188_00",
"trophySetVersion": "01.40",
"trophyTitleName": "ASTRO’s PLAYROOM",
"trophyTitleIconUrl": "https://psnobj.prod.dl.playstation.net/psnobj/NPWR20188_00/035a02db-e64f-4572-8653-4a3db37fe2f6.png",
"trophyTitlePlatform": "PS5",
"definedTrophies": {
"bronze": 31,
"silver": 14,
"gold": 5,
"platinum": 1
},
"trophyGroups": [
{
"trophyGroupId": "default",
"trophyGroupName": "ASTRO’s PLAYROOM",
"trophyGroupIconUrl": "https://psnobj.prod.dl.playstation.net/psnobj/NPWR20188_00/035a02db-e64f-4572-8653-4a3db37fe2f6.png",
"definedTrophies": {
"bronze": 26,
"silver": 13,
"gold": 3,
"platinum": 1
}
},
{
"trophyGroupId": "001",
"trophyGroupName": "ASTRO’s PLAYROOM [ADD-ON]",
"trophyGroupIconUrl": "https://psnobj.prod.dl.playstation.net/psnobj/NPWR20188_00/07628edd-c7e7-4762-9409-edcece03a12d.png",
"definedTrophies": {
"bronze": 1,
"silver": 0,
"gold": 2,
"platinum": 0
}
},
{
"trophyGroupId": "002",
"trophyGroupName": "ASTRO’s PLAYROOM [ADD-ON] ",
"trophyGroupIconUrl": "https://psnobj.prod.dl.playstation.net/psnobj/NPWR20188_00/1c8dc8da-12c2-4a5a-a6f0-d89f2fd9c6c1.png",
"definedTrophies": {
"bronze": 4,
"silver": 1,
"gold": 0,
"platinum": 0
}
}
]
}
字段 | 类型 | 描述 |
npServiceName | 字符 | 游戏平台,trophy 为 PS3、PS4、PSV;trophy2 为 PS5、PC |
npCommunicationId | 字符 | 游戏的唯一 id |
trophyTitleName | 字符 | 游戏名称 |
trophyTitleDetail | 字符 | 游戏描述 |
trophyTitleIconUrl | 字符 | 游戏图标地址 |
trophyTitlePlatform | 字符 | 游戏平台 |
definedTrophies | json 对象 | 默认奖杯汇总信息(全部包含 DLC) |
trophyGroups | json 对象 | 分组奖杯汇总信息 |
字段 | 类型 | 描述 |
trophyGroupId | 字符 | 奖杯组的 id |
trophyGroupName | 字符 | 奖杯组名称 |
trophyGroupIconUrl | 字符 | 奖杯组图标地址 |
definedTrophies | json 对象 | 默认奖杯组信息 |
在 2.4.1url 后加上 trophyGroupId 及"/trophies"
# 2.3 中获取到的游戏 npCommunicationId(宇宙机器人无线控制器指南)
npCommunicationId = "NPWR20188_00"
# 2.4.1 中的 trophyGroupId 获取本体、dlc 奖杯具体信息或 all 返回所有奖杯具体信息
trophyGroupId = "all"
url = f"https://m.np.playstation.com/api/trophy/v1/npCommunicationIds/{npCommunicationId}/trophyGroups/{trophyGroupId}/trophies"
# 如果是 ps3、ps4、psv 游戏需要加 npServiceName 参数
# params = {"npServiceName": "trophy","limit": "", "offset": 0}
# url += "?" + "&".join([f"{key}={value}" for key, value in params.items()])
# 1.3 及 1.4 中获取的 access_token
# headers 中增加 Accept-Language 设置请求结果的语音
headers = {
"Authorization": f"Bearer {access_token}",
"Accept-Language": "zh-hans-cn",
}
trophy_request = requests.get(url, headers=headers)
print(trophy_request.json())
入参说明:
参数 | 类型 | 描述 |
npCommunicationId | 字符 | 游戏的唯一 id |
trophyGroupId | 字符(all、default、001) | 奖杯组 id,all 表示所有,defalut 一般为本体 |
npServiceName | 字符(值:trophy) | 如果是 ps3、ps4、psv 游戏必须加该参数 |
limit | 数值(最小 1,最大 400,默认所有) | 限制奖杯返回的数量 |
{
"trophySetVersion": "01.40",
"hasTrophyGroups": true,
"trophies": [
{
"trophyId": 0,
"trophyHidden": false,
"trophyType": "platinum",
"trophyName": "大功告成!",
"trophyDetail": "已集齐宇宙机器人无线控制器使用指南中的所有奖杯。我们下次冒险再见!",
"trophyIconUrl": "https://psnobj.prod.dl.playstation.net/psnobj/NPWR20188_00/4e1f7ad7-5720-4b03-96a4-ecf8abb17ed8.png",
"trophyGroupId": "default"
},
{
"trophyId": 50,
"trophyHidden": true,
"trophyType": "bronze",
"trophyName": "名胜之旅",
"trophyDetail": "成功救出困在冷却泉水中的特殊机器人。",
"trophyIconUrl": "https://psnobj.prod.dl.playstation.net/psnobj/NPWR20188_00/ba591bf0-7303-4e5b-bb92-72f5e52b16f4.png",
"trophyGroupId": "002"
}
],
"totalItemCount": 51
}
字段 | 类型 | 描述 |
hasTrophyGroups | 布尔值 | 是否存在多组奖杯 |
trophies | json 对象 | 奖杯信息 |
totalItemCount | 数值 | 奖杯总数 |
字段 | 类型 | 描述 |
trophyId | 数值 | 奖杯索引 |
trophyHidden | 布尔值 | 奖杯是否隐藏 |
trophyType | 字符 | 奖杯类型(白金、金、银、铜) |
trophyName | 字符 | 奖杯名称 |
trophyDetail | 字符 | 奖杯详细信息 |
trophyIconUrl | 字符 | 奖杯图标地址 |
trophyGroupId | 字符 | 所属奖杯组 id |
2.5.1 指定游戏的奖杯获取汇总信息
# 2.1 中获取的 accountId 或 me
accountId = "me"
# 2.3 中获取到的游戏 npCommunicationId(宇宙机器人无线控制器指南)
npCommunicationId = "NPWR20188_00"
url = f"https://m.np.playstation.com/api/trophy/v1/users/{accountId}/npCommunicationIds/{npCommunicationId}/trophyGroups"
# 如果是 ps3、ps4、psv 游戏需要加 npServiceName 参数
# params = {"npServiceName": "trophy"}
# url += "?" + "&".join([f"{key}={value}" for key, value in params.items()])
# 1.3 及 1.4 中获取的 access_token
headers = {"Authorization": f"Bearer {access_token}"}
trophy_request = requests.get(url, headers=headers)
print(trophy_request.json())
入参说明:
参数 | 类型 | 描述 |
accountId | 字符 | 使用 me 获取本人游戏数据,或获取制定账号数据 |
npCommunicationId | 字符 | 游戏的唯一 id |
npServiceName | 字符(值:trophy) | 如果是 ps3、ps4、psv 游戏必须加该参数 |
{
"trophySetVersion": "01.40",
"hiddenFlag": false,
"progress": 93,
"earnedTrophies": {
"bronze": 27,
"silver": 13,
"gold": 5,
"platinum": 1
},
"lastUpdatedDateTime": "2023-02-18T11:54:37Z",
"trophyGroups": [
{
"trophyGroupId": "default",
"progress": 100,
"earnedTrophies": {
"bronze": 26,
"silver": 13,
"gold": 3,
"platinum": 1
},
"lastUpdatedDateTime": "2023-02-18T11:42:16Z"
},
{
"trophyGroupId": "001",
"progress": 100,
"earnedTrophies": {
"bronze": 1,
"silver": 0,
"gold": 2,
"platinum": 0
},
"lastUpdatedDateTime": "2023-02-18T11:54:37Z"
},
{
"trophyGroupId": "002",
"progress": 0,
"earnedTrophies": {
"bronze": 0,
"silver": 0,
"gold": 0,
"platinum": 0
}
}
]
}
字段 | 类型 | 描述 |
hiddenFlag | 布尔值 | 奖杯是否隐藏,只有获取本人奖杯列表时才能看到隐藏的游戏 |
progress | 数值 | 奖杯获取百分比 |
earnedTrophies | json 对象 | 已获取奖杯汇总信息 |
lastUpdatedDateTime | 日期对象 | 最后一个奖杯获取时间 |
trophyGroups | json 对象 | 分组获得奖杯信息 |
字段 | 类型 | 描述 |
trophyGroupId | 字符 | 奖杯组 id |
progress | 数值 | 奖杯组获取百分比 |
earnedTrophies | json 对象 | 奖杯组已获取情况 |
lastUpdatedDateTime | 日期对象 | 该组最后一个奖杯获取时间 |
在 2.5.1url 后加上 trophyGroupId 及"/trophies"
# 2.1 中获取的 accountId 或 me
accountId = "me"
# 2.3 中获取到的游戏 npCommunicationId(宇宙机器人无线控制器指南)
npCommunicationId = "NPWR20188_00"
# 2.4.1 中的 trophyGroupId 获取本体、dlc 奖杯具体信息或 all 返回所有奖杯具体信息
trophyGroupId = "all"
url = f"https://m.np.playstation.com/api/trophy/v1/users/{accountId}/npCommunicationIds/{npCommunicationId}/trophyGroups/{trophyGroupId}/trophies"
# 如果是 ps3、ps4、psv 游戏需要加 npServiceName 参数
# params = {"npServiceName": "trophy","limit": "", "offset": 0}
# url += "?" + "&".join([f"{key}={value}" for key, value in params.items()])
# 1.3 及 1.4 中获取的 access_token
headers = {"Authorization": f"Bearer {access_token}"}
trophy_request = requests.get(url, headers=headers)
print(trophy_request.json())
入参说明:
参数 | 类型 | 描述 |
accountId | 字符 | 使用 me 获取本人游戏数据,或获取制定账号数据 |
npCommunicationId | 字符 | 游戏的唯一 id |
trophyGroupId | 字符(all、default、001) | 奖杯组 id,all 表示所有,defalut 一般为本体 |
npServiceName | 字符(值:trophy) | 如果是 ps3、ps4、psv 游戏必须加该参数 |
limit | 数值(最小 1,最大 400,默认所有) | 限制奖杯返回的数量 |
offset | 数值(最小 0,最大奖杯总数-1,默认 0) | 奖杯数据索引,第一个游戏为 0,最后一个为奖杯总数-1 |
{
"trophySetVersion": "01.40",
"hasTrophyGroups": true,
"lastUpdatedDateTime": "2023-02-18T11:54:37Z",
"trophies": [
{
"trophyId": 0,
"trophyHidden": false,
"earned": true,
"earnedDateTime": "2023-02-18T11:42:16Z",
"trophyType": "platinum",
"trophyRare": 0,
"trophyEarnedRate": "4.6"
},
{
"trophyId": 50,
"trophyHidden": true,
"earned": false,
"trophyType": "bronze",
"trophyRare": 0,
"trophyEarnedRate": "1.0"
}
],
"rarestTrophies": [
{
"trophyId": 44,
"trophyHidden": true,
"earned": true,
"earnedDateTime": "2023-02-18T11:52:55Z",
"trophyType": "gold",
"trophyRare": 0,
"trophyEarnedRate": "3.8"
}
],
"totalItemCount": 51
}
字段 | 类型 | 描述 |
hasTrophyGroups | 布尔值 | 是否存在多组奖杯 |
lastUpdatedDateTime | 日期对象 | 最后一个奖杯获取时间 |
trophies | json 对象 | 获得奖杯信息 |
rarestTrophies | json 对象 | 获得最珍贵奖杯信息 |
字段 | 类型 | 描述 |
trophyId | 数值 | 奖杯 id |
trophyHidden | 布尔值 | 奖杯是否隐藏 |
earned | 布尔值 | 是否获得 |
progress | 字符 | 对于支持追踪进度的奖杯,当前完成的步骤数(PS5 专属) |
progressRate | 数值 | 对于支持追踪进度的奖杯,奖杯进度百分比(PS5 专属) |
progressedDateTime | 日期对象 | 对于支持追踪进度的奖杯,上次更新奖杯进度的日期(PS5 专属) |
earnedDateTime | 日期对象 | 获得日期 |
trophyType | 字符 | 奖杯类型 |
trophyRare | 数值 | 稀有度(0:极为珍贵、1:非常珍贵、2:珍贵、3:一般) |
trophyEarnedRate | 数值 | 奖杯珍贵度百分比 |
参考:PlayStation Trophies API