Skip to content

Commit

Permalink
minor fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
extreme4all committed Oct 26, 2024
1 parent 6d626ed commit 84ffc0c
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 101 deletions.
92 changes: 22 additions & 70 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,78 +1,30 @@
# The project
The goal is to make a wrapper around the varius runescape related api's.
The goal is to make a wrapper around the various oldschool runescape api's.

# Runelite
## prices
Runelite prices api: https://prices.runescape.wiki/api/v1/osrs/
you must provide some identification to tell who you are, preferably with a discord tag or email
```
from osrs import runelite
# osrs hiscores
```py
import asyncio

api = runelite.RunelitePrices(identification='extreme4all#6455')
```
to get a mapping of item names, id, low & high alch values etc
```
print(api.items())
```
to get latest prices averaging over an interval or from a specific timestamp
```
intervals = [
'5m',
'10m',
'30m',
'1h',
'6h',
'24h'
]
print(api.prices(interval='24h'))
print(api.prices(interval='24h', timestamp=1628380800))
```
to get a timeseries of the 300 values averaged over interval by item id or item name
```
print(api.timeseries(interval='5m', id=2))
print(api.timeseries(interval='5m', name='Cannonball'))
```
from aiohttp import ClientSession

to get the latest prices of items
```
print(api.latest())
```
# OSRS
The osrs endpoints, these endpoints are heavily rate limited
## osrsPrices
```
from osrs import osrs
from osrs.async_api.osrs.hiscores import Mode, PlayerStats, Hiscore, RateLimiter
from osrs.exceptions import PlayerDoesNotExist

api = osrs.OsrsPrices(identification='extreme4all#6456')
```
OSRS has only one category, with all the items, here you get each alpha or letter and howmany items are in it
```
print(api.category())
```
The items endpoint is paginated and will return 12 items for each page
```
print(api.items(letter='a', page=0))
```
You can get the itemDetails for a specific item, based on item_id
```
print(api.itemDetail(item_id=4151))
```
You can get the item price as a timeseries based on item_id
```
print(api.timeseries(item_id=4151))
```
## hiscores
return the hiscore for a player
```
from osrs import osrs

api = osrs.Hiscores(identification='extreme4all#6456')
modes = [
'hiscore_oldschool', 'hiscore_oldschool_ironman', 'hiscore_oldschool_hardcore_ironman',
'hiscore_oldschool_ultimate','hiscore_oldschool_deadman','hiscore_oldschool_seasonal',
'hiscore_oldschool_tournament'
]
async def main():
# 100 calls per minute
limiter = RateLimiter(calls_per_interval=100, interval=60)
hiscore_instance = Hiscore(proxy="", rate_limiter=limiter)

print(api.player(player_name='extreme4all', mode='hiscore_oldschool'))
```
async with ClientSession() as session:
player_stats = await hiscore_instance.get(
mode=Mode.OLDSCHOOL,
player="extreme4all",
session=session,
)
print(player_stats)


loop = asyncio.get_running_loop()
await loop.create_task(main())
```
27 changes: 0 additions & 27 deletions notes.md

This file was deleted.

2 changes: 2 additions & 0 deletions osrs/async_api/osrs/hiscores.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ async def get(self, mode: Mode, player: str, session: ClientSession) -> PlayerSt
ClientResponseError: For other HTTP errors.
Undefined: For anything else that is not a 200
"""
await self.rate_limiter.check()

logger.info(f"Performing hiscores lookup on {player}")
url = f"{self.BASE_URL}/m={mode.value}/index_lite.json"
params = {"player": player}
Expand Down
Empty file removed osrs/utils/.gitkeep
Empty file.
6 changes: 3 additions & 3 deletions osrs/utils/ratelimiter.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@


class RateLimiter:
def __init__(self, calls_per: int = 60, inteval: int = 60) -> None:
self.history = deque(maxlen=calls_per)
self.interval = inteval
def __init__(self, calls_per_interval: int = 60, interval: int = 60) -> None:
self.history = deque(maxlen=calls_per_interval)
self.interval = interval

async def check(self):
"""
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "osrs"
version = "0.0.8"
version = "0.0.9"
authors = [
{ name="extreme4all"},
]
Expand Down

0 comments on commit 84ffc0c

Please sign in to comment.