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_summaryQuestsSummary
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