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
被点赞次数