utilisation des classes et dernières modifications

This commit is contained in:
Mahel Fonteneau 2025-02-14 16:54:10 +01:00
parent f477cfaf99
commit c1ec22fbb2
9 changed files with 76 additions and 66 deletions

View File

@ -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/

8
app.py
View File

@ -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)

View File

@ -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):
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,
})
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}")
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
api_url6 = (f"https://europe.api.riotgames.com/riot/account/v1/accounts/by-puuid/{player_puuid}?api_key={api_key}")
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()
Name = data.get('gameName')
Tag = data.get('tagLine')
player['name'] = data.get('gameName')
player['tag'] = data.get('tagLine')
#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})
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']))
return data_list
return final_players

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -2,14 +2,12 @@
<html lang="fr">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/styles.css') }}">
<title>{% block title %}Mon Site{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
<title>{% block title %}LoL Classement{% endblock %}</title>
</head>
<body>
<header>
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='img/favicon.ico') }}">
<img src="{{ url_for('static', filename='/img/logo.png') }}" class="logosite">
<img src="{{ url_for('static', filename='/img/europelogo.png') }}" class="logo">
<img src="{{ url_for('static', filename='/img/nalogo.png') }}" class="logo">
@ -18,7 +16,6 @@
<img src="{{ url_for('static', filename='/img/japonlogo.png') }}" class="logo">
<h1>Classement League of Legends</h1>
</header>
<main>
{% block content %}{% endblock %}
</main>

View File

@ -1,20 +1,12 @@
{% extends "base.html" %}
{% block title %}Formulaire{% endblock %}
{% block content %}
<div class="container">
<form method="POST">
{{ form.hidden_tag() }}
<div>
{{ form.region.label }}<br>
{{ form.region() }}
</div>
<br>
{{ form.region() }}<br>
{{ form.submit() }}
</form>
</div>
{% endblock %}

View File

@ -1,4 +1,3 @@
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/styles.css') }}">
{% extends "base.html" %}
{% block content %}
<form method="POST">
@ -14,8 +13,7 @@
<br>
{{ form.submit() }}
</form>
{% if data_list %}
{% if players %}
<h2>classement :</h2>
<table>
<thead>
@ -27,11 +25,11 @@
</tr>
</thead>
<tbody>
{% for player in data_list %}
{% for player in players %}
<tr>
<td>{{ player.rang }}</td>
<td>{{ player.Name }}</td>
<td>#{{ player.Tag }}</td>
<td>{{ player.rank }}</td>
<td>{{ player.name }}</td>
<td>#{{ player.tag }}</td>
<td>{{ player.league_points }}</td>
</tr>
{% endfor %}

View File

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