Module runescapeapi.runemetrics.monthly_xp
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 MonthData:
xp_gain: int
timestamp: datetime
rank: int
@dataclass
class MonthlyXpGain:
skill_id: int
total_xp: int
average_xp_gain: int
total_gain: int
month_data: List[MonthData]
@staticmethod
def url(user_name: str, skill: str) -> str:
return (
f"{RUNEMETRICS_BASE}xp-monthly?searchName={user_name}"
f"&skillid={SKILL_NAMES.index(skill)}"
)
@staticmethod
def from_responce(raw_response: str) -> "MonthlyXpGain":
j = json.loads(raw_response)["monthlyXpGain"][0]
return MonthlyXpGain(
skill_id=j["skillId"],
total_xp=j["totalXp"],
average_xp_gain=j["averageXpGain"],
total_gain=j["totalGain"],
month_data=[
MonthData(
xp_gain=month["xpGain"],
timestamp=datetime.fromtimestamp(
month["timestamp"] // 1000
),
rank=month["rank"],
)
for month in j["monthData"]
],
)
@classmethod
def try_fetch(cls, user_name: str, skill: str) -> "MonthlyXpGain":
r = requests.get(cls.url(user_name, skill)).text
return cls.from_responce(r)
Classes
class MonthData (xp_gain: int, timestamp: datetime.datetime, rank: int)
-
MonthData(xp_gain: int, timestamp: datetime.datetime, rank: int)
Expand source code
@dataclass class MonthData: xp_gain: int timestamp: datetime rank: int
Class variables
var rank : int
var timestamp : datetime.datetime
var xp_gain : int
class MonthlyXpGain (skill_id: int, total_xp: int, average_xp_gain: int, total_gain: int, month_data: List[MonthData])
-
MonthlyXpGain(skill_id: int, total_xp: int, average_xp_gain: int, total_gain: int, month_data: List[runescapeapi.runemetrics.monthly_xp.MonthData])
Expand source code
@dataclass class MonthlyXpGain: skill_id: int total_xp: int average_xp_gain: int total_gain: int month_data: List[MonthData] @staticmethod def url(user_name: str, skill: str) -> str: return ( f"{RUNEMETRICS_BASE}xp-monthly?searchName={user_name}" f"&skillid={SKILL_NAMES.index(skill)}" ) @staticmethod def from_responce(raw_response: str) -> "MonthlyXpGain": j = json.loads(raw_response)["monthlyXpGain"][0] return MonthlyXpGain( skill_id=j["skillId"], total_xp=j["totalXp"], average_xp_gain=j["averageXpGain"], total_gain=j["totalGain"], month_data=[ MonthData( xp_gain=month["xpGain"], timestamp=datetime.fromtimestamp( month["timestamp"] // 1000 ), rank=month["rank"], ) for month in j["monthData"] ], ) @classmethod def try_fetch(cls, user_name: str, skill: str) -> "MonthlyXpGain": r = requests.get(cls.url(user_name, skill)).text return cls.from_responce(r)
Class variables
var average_xp_gain : int
var month_data : List[MonthData]
var skill_id : int
var total_gain : int
var total_xp : int
Static methods
def from_responce(raw_response: str) ‑> MonthlyXpGain
-
Expand source code
@staticmethod def from_responce(raw_response: str) -> "MonthlyXpGain": j = json.loads(raw_response)["monthlyXpGain"][0] return MonthlyXpGain( skill_id=j["skillId"], total_xp=j["totalXp"], average_xp_gain=j["averageXpGain"], total_gain=j["totalGain"], month_data=[ MonthData( xp_gain=month["xpGain"], timestamp=datetime.fromtimestamp( month["timestamp"] // 1000 ), rank=month["rank"], ) for month in j["monthData"] ], )
def try_fetch(user_name: str, skill: str) ‑> MonthlyXpGain
-
Expand source code
@classmethod def try_fetch(cls, user_name: str, skill: str) -> "MonthlyXpGain": r = requests.get(cls.url(user_name, skill)).text return cls.from_responce(r)
def url(user_name: str, skill: str) ‑> str
-
Expand source code
@staticmethod def url(user_name: str, skill: str) -> str: return ( f"{RUNEMETRICS_BASE}xp-monthly?searchName={user_name}" f"&skillid={SKILL_NAMES.index(skill)}" )