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)}"
    )