石之家数据格式

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

被点赞次数