Initial push
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import json
|
||||
import requests
|
||||
import re
|
||||
import random
|
||||
|
||||
import aiohttp
|
||||
import asyncio
|
||||
|
||||
|
||||
class Champion:
|
||||
Name: str
|
||||
Role: [str]
|
||||
|
||||
def __init__(self, name: str, roles: [str]):
|
||||
self.Name = name
|
||||
self.Role = roles
|
||||
|
||||
Lanes = ["Top", "Mid", "Bot", "Support", "Jgl"]
|
||||
|
||||
async def fetch_champion(session, url_entry):
|
||||
try:
|
||||
async with session.get(url_entry, timeout=5) as resp:
|
||||
data = await resp.json()
|
||||
if data.get("name") == "None":
|
||||
return None
|
||||
return Champion(data["name"], data["roles"])
|
||||
except Exception as e:
|
||||
print(f'Could not get {url_entry}: {e}')
|
||||
return None
|
||||
|
||||
|
||||
async def get_champions_async(base_url: str, sub_urls: [str]) -> [Champion]:
|
||||
champions = []
|
||||
async with aiohttp.ClientSession() as session:
|
||||
tasks = []
|
||||
for entry in sub_urls:
|
||||
full_url = f'{base_url}/{entry}'
|
||||
tasks.append(fetch_champion(session, full_url))
|
||||
results = await asyncio.gather(*tasks)
|
||||
for champ in results:
|
||||
if champ is not None:
|
||||
champions.append(champ)
|
||||
return champions
|
||||
|
||||
|
||||
def get_player_list() -> [Champion]:
|
||||
url = "https://raw.communitydragon.org/latest/plugins/rcp-be-lol-game-data/global/default/v1/champions"
|
||||
response = requests.get(url)
|
||||
data = response.text
|
||||
|
||||
data = data[data.index('id="list"')::]
|
||||
data = data[data.index("<tr><td") + 1::]
|
||||
data = data[:data.index('</main>')]
|
||||
data = data[:data.rindex('</td></tr>')]
|
||||
|
||||
datalist = data.split("\r\n")
|
||||
|
||||
champions: [Champion] = []
|
||||
sub_urls = []
|
||||
|
||||
regex_pattern = re.compile(r'-?\d+\.json', re.IGNORECASE)
|
||||
|
||||
for line in datalist:
|
||||
match = regex_pattern.search(line)
|
||||
if match:
|
||||
sub_urls.append(match.group(0))
|
||||
|
||||
champions = asyncio.run(get_champions_async(url, sub_urls))
|
||||
|
||||
return champions
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
champions: [Champion] = get_player_list()
|
||||
champ: Champion = random.choice(champions)
|
||||
|
||||
print(f'You will play:\n\tChampion: {champ.Name}\n\tRole: {random.choice(champ.Role)}\n\tLane: {random.choice(Lanes)}')
|
||||
Reference in New Issue
Block a user