石之家数据格式

Posted by TheD Blog on June 3, 2024

getUserInfo

每个账户可以通过石之家的getUserInfo接口获取基础数据,如种族、成就、展示的若干数据等。

  
url = f'https://apiff14risingstones.web.sdo.com/api/home/userInfo/getUserInfo?uuid={uuid}'
  
headers = {
  
    'Cookie': cookies,
  
    "User-Agent": user_agent,
  
    "Accept": r"*/*",
  
    "Accept-Encoding": r"gzip, deflate, br"
  
}
  
response = requests.request("GET", url, headers=headers, timeout=10)
  
data = response.json().get('data')
  
characters_values = (
  
    data.get('id'),
  
    data.get('uuid'),
  
    data.get('character_name'),
  
    data.get('area_id'),
  
    data.get('area_name'),
  
    data.get('group_id'),
  
    data.get('group_name'),
  
    data.get('avatar'),
  
    data.get('profile'),
  
    data.get('experience'),
  
    data.get('publish_tab'),
  
    data.get('achieve_tab'),
  
    datetime.now()  ## Current timestamp for create_time
  
)
  
character_id = data.get('id')
  

  
## Achievements and achieveTopInfo table
  
for achieveInfo in data.get('achieveInfo',
  
                            []) + data.get('achieveTopInfo', []):
  
  is_top = achieveInfo in data.get('achieveTopInfo', [])
  
  achievements_values = (
  
      character_id, achieveInfo.get('medal_id'),
  
      achieveInfo.get('medal_type'), achieveInfo.get('achieve_id'),
  
      achieveInfo.get('achieve_time'), achieveInfo.get('group_id'),
  
      achieveInfo.get('character_name'), achieveInfo.get('medal_type_id'),
  
      achieveInfo.get('achieve_name'), achieveInfo.get('area_id'),
  
      achieveInfo.get('achieve_detail'), achieveInfo.get('part_date'), is_top
  
  )
  

  
## CareerLevels table
  
for careerLevel in data.get('careerLevel', []):
  
  career_levels_values = (
  
      character_id, careerLevel.get('career'),
  
      careerLevel.get('character_level'), careerLevel.get('part_date'),
  
      careerLevel.get('update_date'), careerLevel.get('career_type')
  
  )
  

  
## CharacterDetails table
  
if data.get('characterDetail', []):
  
  characterDetail = data.get('characterDetail')[0]
  
  character_details_values = (
  
      character_id, characterDetail.get('create_time'),
  
      characterDetail.get('gender'), characterDetail.get('last_login_time'),
  
      characterDetail.get('race'), characterDetail.get('play_time'),
  
      characterDetail.get('house_info'), characterDetail.get('guild_name'),
  
      characterDetail.get('fc_id'), characterDetail.get('tribe'),
  
      characterDetail.get('guild_tag'), characterDetail.get('washing_num'),
  
      characterDetail.get('treasure_times'),
  
      characterDetail.get('kill_times'), characterDetail.get('newrank'),
  
      characterDetail.get('crystal_rank'), characterDetail.get('fish_times'),
  
      characterDetail.get('house_remain_day')
  
  )
  

  
## InteractionCounts table
  
followFansiNum = data.get('followFansiNum', {})
  
interaction_counts_values = (
  
    character_id, followFansiNum.get('followNum'),
  
    followFansiNum.get('fansNum'), data.get('interactNum'),
  
    data.get('beLikedNum')
  
)
  

基础信息

id

id是一个从零开始的自增主键,每一个id对应一个角色(注意不是对应一个玩家,一个玩家可以有多个角色,互相之间无法通过这个api获取到其关系)

uuid

uuid = 10001000+ id

character_name

角色名,每一个服务器唯一

area_id

大区编码

  
{
  
  "1": "陆行鸟",
  
  "6": "莫古力",
  
  "7": "猫小胖",
  
  "8": "豆豆柴"
  
}
  

area_name

大区名

group_id

服务器编码

group_name

服务器名

avatar

头像

profile

个性签名

experience

社区经验

publish_tab

展示页信息,逗号分隔的字符串数组

achieve_tab

成就页信息,逗号分隔的整数数组,没有具体的成就达成时间,但可以查看这人获取了哪些成就。可由本人手动修改选择不展示

create_time

爬取该条数据的时间

成就信息

medal_id

成就编号,每个成就编号和成就唯一对应

achieve_id

没搞懂干啥用的,可能和medal_id一一对应吧

achieve_time

成就达成时间,不知道是哪个时区的,大概率是北京时间

group_id

成就属于哪个分类

achieve_name

成就名称

achieve_detail

成就描述

  
{
  
"MedalDetails": [
  
{
  
"medal_id" : "14",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 5,
  
"achieve_name" : "遍识之贤者",
  
"achieve_detail" : "将采矿工、园艺工和捕鱼人都升到90级。"
  
},
  
{
  
"medal_id" : "19",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 3,
  
"achieve_name" : "十八重之道的探究者",
  
"achieve_detail" : "战斗职业都升到90级。"
  
},
  
{
  
"medal_id" : "13",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 4,
  
"achieve_name" : "博心之巧者",
  
"achieve_detail" : "将刻木匠、锻铁匠、铸甲匠、雕金匠、制革匠、裁衣匠、炼金术士和烹调师都升到90级。"
  
},
  
{
  
"medal_id" : "24",
  
"medal_type" : "剧情通关",
  
"medal_type_id" : 2,
  
"achieve_name" : "晓月之终途",
  
"achieve_detail" : "完成任务“晓月之终途”。"
  
},
  
{
  
"medal_id" : "33",
  
"medal_type" : "导随",
  
"medal_type_id" : 11,
  
"achieve_name" : "可靠的前辈6",
  
"achieve_detail" : "参加并完成累计2000次随机任务:指导者任务。"
  
},
  
{
  
"medal_id" : "18",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 3,
  
"achieve_name" : "十六重之道的探究者",
  
"achieve_detail" : "战斗职业都升到80级。"
  
},
  
{
  
"medal_id" : "17",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 3,
  
"achieve_name" : "十四重之道的探究者",
  
"achieve_detail" : "战斗职业都升到70级。"
  
},
  
{
  
"medal_id" : "16",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 3,
  
"achieve_name" : "十二重之道的探究者",
  
"achieve_detail" : "战斗职业都升到60级。"
  
},
  
{
  
"medal_id" : "15",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 3,
  
"achieve_name" : "八重之道的探究者",
  
"achieve_detail" : "战斗职业都升到50级。"
  
},
  
{
  
"medal_id" : "11",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 4,
  
"achieve_name" : "博物之巧者",
  
"achieve_detail" : "将刻木匠、锻铁匠、铸甲匠、雕金匠、制革匠、裁衣匠、炼金术士、烹调师都升到80级。"
  
},
  
{
  
"medal_id" : "12",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 5,
  
"achieve_name" : "饱识之贤者",
  
"achieve_detail" : "将采矿工、园艺工、捕鱼人的职业都升到80级。"
  
},
  
{
  
"medal_id" : "10",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 5,
  
"achieve_name" : "渊识之贤者",
  
"achieve_detail" : "将采矿工、园艺工、捕鱼人的职业都升到70级。"
  
},
  
{
  
"medal_id" : "8",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 5,
  
"achieve_name" : "强识之贤者",
  
"achieve_detail" : "将采矿工、园艺工、捕鱼人的职业都升到60级。"
  
},
  
{
  
"medal_id" : "9",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 4,
  
"achieve_name" : "博志之巧者",
  
"achieve_detail" : "将刻木匠、锻铁匠、铸甲匠、雕金匠、制革匠、裁衣匠、炼金术士、烹调师都升到70级。"
  
},
  
{
  
"medal_id" : "6",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 5,
  
"achieve_name" : "广识之贤者",
  
"achieve_detail" : "将采矿工、园艺工、捕鱼人的职业都升到50级。"
  
},
  
{
  
"medal_id" : "7",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 4,
  
"achieve_name" : "博闻之巧者",
  
"achieve_detail" : "将刻木匠、锻铁匠、铸甲匠、雕金匠、制革匠、裁衣匠、炼金术士、烹调师都升到60级。"
  
},
  
{
  
"medal_id" : "5",
  
"medal_type" : "职业满级",
  
"medal_type_id" : 4,
  
"achieve_name" : "博学之巧者",
  
"achieve_detail" : "将刻木匠、锻铁匠、铸甲匠、雕金匠、制革匠、裁衣匠、炼金术士、烹调师都升到50级。"
  
},
  
{
  
"medal_id" : "23",
  
"medal_type" : "剧情通关",
  
"medal_type_id" : 2,
  
"achieve_name" : "暗影之逆焰",
  
"achieve_detail" : "完成任务“暗影之逆焰”。"
  
},
  
{
  
"medal_id" : "22",
  
"medal_type" : "剧情通关",
  
"medal_type_id" : 2,
  
"achieve_name" : "红莲之狂潮",
  
"achieve_detail" : "完成任务“红莲之狂潮”。"
  
},
  
{
  
"medal_id" : "21",
  
"medal_type" : "剧情通关",
  
"medal_type_id" : 2,
  
"achieve_name" : "苍穹之禁城",
  
"achieve_detail" : "完成任务“苍穹之禁城”。"
  
},
  
{
  
"medal_id" : "20",
  
"medal_type" : "剧情通关",
  
"medal_type_id" : 2,
  
"achieve_name" : "光之战士",
  
"achieve_detail" : "完成任务“超越幻想,究极神兵”。"
  
},
  
{
  
"medal_id" : "3",
  
"medal_type" : "绝本通关",
  
"medal_type_id" : 1,
  
"achieve_name" : "征服绝境·亚历山大",
  
"achieve_detail" : "在亚历山大绝境战中战胜亚历山大。"
  
},
  
{
  
"medal_id" : "2",
  
"medal_type" : "绝本通关",
  
"medal_type_id" : 1,
  
"achieve_name" : "征服绝境·究极神兵",
  
"achieve_detail" : "在究极神兵绝境战中成功讨伐究极神兵。"
  
},
  
{
  
"medal_id" : "31",
  
"medal_type" : "PVP",
  
"medal_type_id" : 9,
  
"achieve_name" : "战场的支配者",
  
"achieve_detail" : "在纷争前线中击倒5000名敌兵。"
  
},
  
{
  
"medal_id" : "25",
  
"medal_type" : "绝本通关",
  
"medal_type_id" : 1,
  
"achieve_name" : "征服绝境·欧米茄",
  
"achieve_detail" : "在欧米茄绝境验证战中完成欧米茄的检测。"
  
},
  
{
  
"medal_id" : "4",
  
"medal_type" : "绝本通关",
  
"medal_type_id" : 1,
  
"achieve_name" : "征服绝境·龙诗战争",
  
"achieve_detail" : "在幻想龙诗绝境战中成功平定龙诗战争。"
  
},
  
{
  
"medal_id" : "30",
  
"medal_type" : "PVP",
  
"medal_type_id" : 8,
  
"achieve_name" : "狼王狂啸",
  
"achieve_detail" : "在群狼困斗、群狼盛宴或水晶冲突中累计取胜5000次。"
  
},
  
{
  
"medal_id" : "36",
  
"medal_type" : "捕鱼人",
  
"medal_type_id" : 14,
  
"achieve_name" : "太公仙路",
  
"achieve_detail" : "达成“愿者上钩16”“净界太公5”成就。"
  
},
  
{
  
"medal_id" : "35",
  
"medal_type" : "金碟游乐场",
  
"medal_type_id" : 13,
  
"achieve_name" : "狂热幻卡收藏家",
  
"achieve_detail" : "获得编号第1至第312号的九宫幻卡。"
  
},
  
{
  
"medal_id" : "1",
  
"medal_type" : "绝本通关",
  
"medal_type_id" : 1,
  
"achieve_name" : "征服绝境·巴哈姆特",
  
"achieve_detail" : "在巴哈姆特绝境战中战胜至尊巴哈姆特。"
  
},
  
{
  
"medal_id" : "29",
  
"medal_type" : "迷宫探险",
  
"medal_type_id" : 7,
  
"achieve_name" : "崇高的挑战者2",
  
"achieve_detail" : "单人从地下1层进入正统优雷卡,并到达地下100层。"
  
},
  
{
  
"medal_id" : "27",
  
"medal_type" : "迷宫探险",
  
"medal_type_id" : 7,
  
"achieve_name" : "孤独的挑战者3",
  
"achieve_detail" : "单人从地下1层进入死者宫殿,并到达地下200层。"
  
},
  
{
  
"medal_id" : "34",
  
"medal_type" : "金碟游乐场",
  
"medal_type_id" : 12,
  
"achieve_name" : "纸醉金迷",
  
"achieve_detail" : "完成“鸟到成功”、“人定胜天”、“算无遗策”、“命运临门3”、“神闪避3”、“仙风道骨”、“奇光异彩”7种成就。"
  
},
  
{
  
"medal_id" : "28",
  
"medal_type" : "迷宫探险",
  
"medal_type_id" : 7,
  
"achieve_name" : "孤高的挑战者2",
  
"achieve_detail" : "单人从第1层进入天之御柱,并到达第100层。"
  
},
  
{
  
"medal_id" : "26",
  
"medal_type" : "危命任务",
  
"medal_type_id" : 6,
  
"achieve_name" : "命运中的危机6",
  
"achieve_detail" : "成功完成10000次危命任务。"
  
},
  
{
  
"medal_id" : "32",
  
"medal_type" : "PVP",
  
"medal_type_id" : 10,
  
"achieve_name" : "凯旋之翼5",
  
"achieve_detail" : "在烈羽争锋中取胜1000次。"
  
}
  
]}
  

  

角色详细信息

create_time

角色创建时间,这是在游戏里的创建时间而非社区的

last_login_time

上一次登陆时间

race

种族

  
{
  
  "1": "人族",
  
  "2": "精灵族",
  
  "3": "拉拉菲尔族",
  
  "4": "猫魅族",
  
  "5": "鲁加族",
  
  "6": "敖龙族",
  
  "7": "硌狮族",
  
  "8": "维埃拉族"
  
}
  

gender

性别,0男1女

play_time

游玩时间

  
## 用于将 "xx天xx小时xx分" 格式的字符串转换为总小时数的函数
  
def parse_play_time(play_time_str):
  
  if pd.isna(play_time_str):
  
    return None
  
  days, hours, minutes = 0, 0, 0
  
  day_match = re.search(r'(\d+)天', play_time_str)
  
  hour_match = re.search(r'(\d+)小时', play_time_str)
  
  minute_match = re.search(r'(\d+)分', play_time_str)
  

  
  if day_match:
  
    days = int(day_match.group(1))
  
  if hour_match:
  
    hours = int(hour_match.group(1))
  
  if minute_match:
  
    minutes = int(minute_match.group(1))
  

  
  total_hours = days * 24 + hours + minutes / 60
  
  return total_hours
  

house_info

房屋信息,只有房型没有位置,demo:白银乡-L

guild_name

部队名

fc_id

部队id

tribe

不知道

guild_tag

部队标签

treasure_times

称霸宝物库次数

washing_num

幻想药使用次数

kill_times

纷争前线击倒数

crystal_rank

水晶冲突最高段位

fish_times

钓鱼抛竿次数

newrank

无人岛开拓等级

house_remain_day

房屋状态,正常是空值,等到要炸房的前十五天会开始有提示,例:(剩余10天)

关注

follow_num

关注数

fans_num

粉丝数

be_liked_num

被点赞次数