Module runescapeapi.runemetrics.profile
Expand source code
import json
from dataclasses import dataclass
from datetime import datetime
from typing import List
import requests
from runescapeapi.runemetrics import RUNEMETRICS_BASE, SKILL_NAMES
@dataclass
class Activity:
date: datetime
details: str
text: str
@dataclass
class Skill:
name: str
level: int
xp: int
rank: int
id: int
@dataclass
class QuestsSummary:
started: int
complete: int
not_started: int
@dataclass
class Profile:
name: str
rank: int
total_skill: int
total_xp: int
combat_level: int
magic: int
melee: int
ranged: int
quests_summary: QuestsSummary
activities: List[Activity]
skill_values: List[Skill]
logged_in: bool
@staticmethod
def url(user_name: str) -> str:
return (
f"{RUNEMETRICS_BASE}profile/profile?user={user_name}&activities=20"
)
@staticmethod
def from_responce(raw_response: str) -> "Profile":
j = json.loads(raw_response)
return Profile(
name=j["name"],
rank=int(j["rank"].replace(",", "")),
total_skill=j["totalskill"],
total_xp=j["totalxp"],
combat_level=j["combatlevel"],
magic=j["magic"],
melee=j["melee"],
ranged=j["ranged"],
quests_summary=QuestsSummary(
started=j["questsstarted"],
complete=j["questscomplete"],
not_started=j["questsnotstarted"],
),
activities=[
Activity(
date=datetime.strptime(act["date"], "%d-%b-%Y %H:%M"),
details=act["details"],
text=act["text"],
)
for act in j["activities"]
],
skill_values=[
Skill(
name=SKILL_NAMES[skill["id"]],
level=skill["level"],
xp=skill["xp"] / 10,
rank=skill["rank"],
id=skill["id"],
)
for skill in j["skillvalues"]
],
logged_in=j["loggedIn"],
)
@classmethod
def try_fetch(cls, user_name: str) -> "Profile":
r = requests.get(cls.url(user_name)).text
return cls.from_responce(r)
Classes
class Activity (date: datetime.datetime, details: str, text: str)
-
Activity(date: datetime.datetime, details: str, text: str)
Expand source code
@dataclass class Activity: date: datetime details: str text: str
Class variables
var date : datetime.datetime
var details : str
var text : str
class Profile (name: str, rank: int, total_skill: int, total_xp: int, combat_level: int, magic: int, melee: int, ranged: int, quests_summary: QuestsSummary, activities: List[Activity], skill_values: List[Skill], logged_in: bool)
-
Profile(name: str, rank: int, total_skill: int, total_xp: int, combat_level: int, magic: int, melee: int, ranged: int, quests_summary: runescapeapi.runemetrics.profile.QuestsSummary, activities: List[runescapeapi.runemetrics.profile.Activity], skill_values: List[runescapeapi.runemetrics.profile.Skill], logged_in: bool)
Expand source code
@dataclass class Profile: name: str rank: int total_skill: int total_xp: int combat_level: int magic: int melee: int ranged: int quests_summary: QuestsSummary activities: List[Activity] skill_values: List[Skill] logged_in: bool @staticmethod def url(user_name: str) -> str: return ( f"{RUNEMETRICS_BASE}profile/profile?user={user_name}&activities=20" ) @staticmethod def from_responce(raw_response: str) -> "Profile": j = json.loads(raw_response) return Profile( name=j["name"], rank=int(j["rank"].replace(",", "")), total_skill=j["totalskill"], total_xp=j["totalxp"], combat_level=j["combatlevel"], magic=j["magic"], melee=j["melee"], ranged=j["ranged"], quests_summary=QuestsSummary( started=j["questsstarted"], complete=j["questscomplete"], not_started=j["questsnotstarted"], ), activities=[ Activity( date=datetime.strptime(act["date"], "%d-%b-%Y %H:%M"), details=act["details"], text=act["text"], ) for act in j["activities"] ], skill_values=[ Skill( name=SKILL_NAMES[skill["id"]], level=skill["level"], xp=skill["xp"] / 10, rank=skill["rank"], id=skill["id"], ) for skill in j["skillvalues"] ], logged_in=j["loggedIn"], ) @classmethod def try_fetch(cls, user_name: str) -> "Profile": r = requests.get(cls.url(user_name)).text return cls.from_responce(r)
Class variables
var activities : List[Activity]
var combat_level : int
var logged_in : bool
var magic : int
var melee : int
var name : str
var quests_summary : QuestsSummary
var ranged : int
var rank : int
var skill_values : List[Skill]
var total_skill : int
var total_xp : int
Static methods
def from_responce(raw_response: str) ‑> Profile
-
Expand source code
@staticmethod def from_responce(raw_response: str) -> "Profile": j = json.loads(raw_response) return Profile( name=j["name"], rank=int(j["rank"].replace(",", "")), total_skill=j["totalskill"], total_xp=j["totalxp"], combat_level=j["combatlevel"], magic=j["magic"], melee=j["melee"], ranged=j["ranged"], quests_summary=QuestsSummary( started=j["questsstarted"], complete=j["questscomplete"], not_started=j["questsnotstarted"], ), activities=[ Activity( date=datetime.strptime(act["date"], "%d-%b-%Y %H:%M"), details=act["details"], text=act["text"], ) for act in j["activities"] ], skill_values=[ Skill( name=SKILL_NAMES[skill["id"]], level=skill["level"], xp=skill["xp"] / 10, rank=skill["rank"], id=skill["id"], ) for skill in j["skillvalues"] ], logged_in=j["loggedIn"], )
def try_fetch(user_name: str) ‑> Profile
-
Expand source code
@classmethod def try_fetch(cls, user_name: str) -> "Profile": r = requests.get(cls.url(user_name)).text return cls.from_responce(r)
def url(user_name: str) ‑> str
-
Expand source code
@staticmethod def url(user_name: str) -> str: return ( f"{RUNEMETRICS_BASE}profile/profile?user={user_name}&activities=20" )
class QuestsSummary (started: int, complete: int, not_started: int)
-
QuestsSummary(started: int, complete: int, not_started: int)
Expand source code
@dataclass class QuestsSummary: started: int complete: int not_started: int
Class variables
var complete : int
var not_started : int
var started : int
class Skill (name: str, level: int, xp: int, rank: int, id: int)
-
Skill(name: str, level: int, xp: int, rank: int, id: int)
Expand source code
@dataclass class Skill: name: str level: int xp: int rank: int id: int
Class variables
var id : int
var level : int
var name : str
var rank : int
var xp : int