diff --git a/README.md b/README.md index b5cc965..383d97f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,9 @@ -bienvenue sur le projet utilisant l'API de league of legends +Bienvenue sur le projet utilisant l'API de league of legends +Ce site flask est un projet dont le but est d'afficher le classement des meilleurs joueurs de league of legends en utilisant l'API de Riot Games pour avoir des données en temps réel +Vous pouvez choisir une région et le nombre de joueur à afficher puis le site se charge du reste +Pour utiliser le projet il faut : +- Cloner le depot +- Créer un environnement virtuel puis faire : pip install -r requirements.txt +- Changer la clé d'API si elle n'est plus valide (24h) sur https://developer.riotgames.com/ elle se trouve dans appli/fonctions.py +- Se rendre à l'URL http://localhost:5000/ diff --git a/app.py b/app.py index f9633ba..737eec8 100644 --- a/app.py +++ b/app.py @@ -5,6 +5,7 @@ from PIL import Image from appli import models import os from appli.fonctions import main +from appli.models import Player template_dir=os.path.abspath("./appli/templates") app = Flask(__name__, template_folder=template_dir, static_folder='appli/static') @@ -14,14 +15,15 @@ app.config['SECRET_KEY'] = 'ma_cle_secrete' @app.route("/", methods=["GET", "POST"]) def index(): form = RegionForm() - data_list = [] + players=[] if form.validate_on_submit(): region = form.region.data player_count = form.player_count.data - data_list = main(region, player_count) + players = main(region, player_count) or [] - return render_template("index.html", form=form, data_list=data_list) + return render_template("index.html", form=form, players=players) if __name__ == "__main__": - app.run(debug=True) \ No newline at end of file + app.run(debug=True) + diff --git a/appli/fonctions.py b/appli/fonctions.py index 31cbd60..a968da7 100644 --- a/appli/fonctions.py +++ b/appli/fonctions.py @@ -3,56 +3,60 @@ from wtforms import StringField, SubmitField from wtforms.validators import DataRequired, Regexp import requests from flask import Flask, render_template, redirect, url_for, flash, request +import sys +import os +sys.path.append(os.path.dirname(os.path.abspath(__file__))) #sans cette ligne le fichier ne trouve pas models.py je ne sais pas pourquoi +from models import Player +import requests +from models import Player def main(region, player_count): - regionapi=region - nbjoueur = player_count - api_key = 'RGAPI-526e580d-b331-4bb0-a343-4f33fa30988c' - data_list = [] - time = 1 #utiliser pour le timeout dans les requetes api - #les pages mettent beaucoup de temps à charger mais si on réduit le timeout les pages ne chargeront pas - + + api_key = 'RGAPI-121baff0-66be-475c-bd41-086e01ce3678' #/!\ IMPORTANT la clé change toutes les 24h - # Dernière clé activé : valide jusqu'au 14/02 à 12h26 + # Dernière clé activé : valide jusqu'au 15/02 à 13h00 # veuillez la recréer sur le site riot games developer + time = 1 #utiliser pour le timeout dans les requetes api + #les pages mettent beaucoup de temps à charger mais si on réduit le timeout les pages ne chargeront peut être pas + #Cette url permet de récupérer : leagueId, queueType, tier, rank, summonerId, leaguePoints, #wins, losses, veteran, inactive,freshBlood, hotstreak, #on va avoir besoin des leaguePoints pour faire un classement, et des summonerId pour retrouver les pseudos des joueurs plus tard - api_url2 = (f"https://{regionapi}.api.riotgames.com/lol/league-exp/v4/entries/RANKED_SOLO_5x5/CHALLENGER/I?page=1&api_key={api_key}") + api_url2 = (f"https://{region}.api.riotgames.com/lol/league-exp/v4/entries/RANKED_SOLO_5x5/CHALLENGER/I?page=1&api_key={api_key}") resp2 = requests.get(api_url2, timeout=time) player_info = resp2.json() - summoner_ids = [entry['summonerId'] for entry in player_info] - lp = [entry['leaguePoints'] for entry in player_info] - for i in range(nbjoueur): - - summoner_id = summoner_ids[i] - api_summonerid = summoner_ids[i] - league_points = lp[i] - #print(f"SummonerId: {summoner_id}") - #cette api utilise le summonerid et retourne le puuid qui sera utile plus tard pour récupérer les pseudos et tag - api_url5 = (f"https://{regionapi}.api.riotgames.com/lol/summoner/v4/summoners/{api_summonerid}?api_key={api_key}") + players = [] + for entry in player_info[:player_count]: + summoner_id = entry.get('summonerId') + league_points = entry.get('leaguePoints') + players.append({ + 'summoner_id': summoner_id, + 'league_points': league_points, + }) + + #cette api utilise le summonerid et retourne le puuid qui sera utile plus tard pour récupérer les pseudos et tag + for player in players: + summoner_id = player['summoner_id'] + api_url5 = f"https://{region}.api.riotgames.com/lol/summoner/v4/summoners/{summoner_id}?api_key={api_key}" resp5 = requests.get(api_url5, timeout=time) player_data = resp5.json() - player_puuid = player_data.get('puuid') + player['puuid'] = player_data.get('puuid') + + #cette api utilise le puuid et retourne les pseudos et tag + for player in players: + if player['puuid']: + api_url6 = f"https://europe.api.riotgames.com/riot/account/v1/accounts/by-puuid/{player['puuid']}?api_key={api_key}" + resp6 = requests.get(api_url6, timeout=time) + data = resp6.json() + player['name'] = data.get('gameName') + player['tag'] = data.get('tagLine') - #cette api utilise le puuid et retourne les pseudos et tag - api_url6 = (f"https://europe.api.riotgames.com/riot/account/v1/accounts/by-puuid/{player_puuid}?api_key={api_key}") - resp6 = requests.get(api_url6, timeout=time) - data = resp6.json() - Name = data.get('gameName') - Tag = data.get('tagLine') + final_players = [] + for i, player in enumerate(players): + final_players.append(Player(name=player['name'],tag=player['tag'],league_points=player['league_points'],rank=i + 1,summoner_id=player['summoner_id'])) - #boucle pour l'affichage du rang - i = 1 - for player in data_list: - player["rang"] = i - i += 1 - - #ajout des données dans data_list - data_list.append({"Name": Name, "Tag": Tag, "league_points": league_points, "rang": i}) - - return data_list + return final_players diff --git a/appli/models.py b/appli/models.py index e69de29..b8a46ab 100644 --- a/appli/models.py +++ b/appli/models.py @@ -0,0 +1,10 @@ +class Player: + def __init__(self, name, tag, league_points, rank, summoner_id): + self.name = name + self.tag = tag + self.league_points = league_points + self.rank = rank + self.summoner_id = summoner_id + + def __repr__(self): + return f"Player(Name={self.name}, Tag={self.tag}, LP={self.league_points}, Rank={self.rank}, summoner_id={self.summoner_id})" diff --git a/appli/static/img/favicon.ico b/appli/static/img/favicon.ico new file mode 100644 index 0000000..d681cc3 Binary files /dev/null and b/appli/static/img/favicon.ico differ diff --git a/appli/templates/base.html b/appli/templates/base.html index 8f805c3..19a4744 100644 --- a/appli/templates/base.html +++ b/appli/templates/base.html @@ -2,14 +2,12 @@ - - - {% block title %}Mon Site{% endblock %} - + + {% block title %}LoL Classement{% endblock %} -
+ @@ -18,7 +16,6 @@

Classement League of Legends

-
{% block content %}{% endblock %}
diff --git a/appli/templates/form.html b/appli/templates/form.html index 30cce85..997e5bc 100644 --- a/appli/templates/form.html +++ b/appli/templates/form.html @@ -1,20 +1,12 @@ {% extends "base.html" %} - {% block title %}Formulaire{% endblock %} - {% block content %} - -
{{ form.hidden_tag() }} -
- {{ form.region.label }}
- {{ form.region() }} -
-
+ {{ form.region.label }}
+ {{ form.region() }}
{{ form.submit() }}
-
{% endblock %} diff --git a/appli/templates/index.html b/appli/templates/index.html index 695d391..6817bf1 100644 --- a/appli/templates/index.html +++ b/appli/templates/index.html @@ -1,4 +1,3 @@ - {% extends "base.html" %} {% block content %}
@@ -14,8 +13,7 @@
{{ form.submit() }}
- - {% if data_list %} + {% if players %}

classement :

@@ -27,11 +25,11 @@ - {% for player in data_list %} + {% for player in players %} - - - + + + {% endfor %} diff --git a/requirements.txt b/requirements.txt index 7f503c1..a953dc7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Flask=3.1.0 -requests=2.32.3 +Flask==3.1.0 +requests==2.32.3 Flask-WTF WTForms==3.2.1
{{ player.rang }}{{ player.Name }}#{{ player.Tag }}{{ player.rank }}{{ player.name }}#{{ player.tag }} {{ player.league_points }}