utilisation des classes et dernières modifications
This commit is contained in:
parent
f477cfaf99
commit
c1ec22fbb2
@ -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
8
app.py
@ -5,6 +5,7 @@ from PIL import Image
|
|||||||
from appli import models
|
from appli import models
|
||||||
import os
|
import os
|
||||||
from appli.fonctions import main
|
from appli.fonctions import main
|
||||||
|
from appli.models import Player
|
||||||
|
|
||||||
template_dir=os.path.abspath("./appli/templates")
|
template_dir=os.path.abspath("./appli/templates")
|
||||||
app = Flask(__name__, template_folder=template_dir, static_folder='appli/static')
|
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"])
|
@app.route("/", methods=["GET", "POST"])
|
||||||
def index():
|
def index():
|
||||||
form = RegionForm()
|
form = RegionForm()
|
||||||
data_list = []
|
players=[]
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
region = form.region.data
|
region = form.region.data
|
||||||
player_count = form.player_count.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__":
|
if __name__ == "__main__":
|
||||||
app.run(debug=True)
|
app.run(debug=True)
|
||||||
|
|
||||||
|
|||||||
@ -3,56 +3,60 @@ from wtforms import StringField, SubmitField
|
|||||||
from wtforms.validators import DataRequired, Regexp
|
from wtforms.validators import DataRequired, Regexp
|
||||||
import requests
|
import requests
|
||||||
from flask import Flask, render_template, redirect, url_for, flash, request
|
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):
|
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
|
#/!\ 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
|
# 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,
|
#Cette url permet de récupérer : leagueId, queueType, tier, rank, summonerId, leaguePoints,
|
||||||
#wins, losses, veteran, inactive,freshBlood, hotstreak,
|
#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
|
#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)
|
resp2 = requests.get(api_url2, timeout=time)
|
||||||
player_info = resp2.json()
|
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]
|
#cette api utilise le summonerid et retourne le puuid qui sera utile plus tard pour récupérer les pseudos et tag
|
||||||
api_summonerid = summoner_ids[i]
|
for player in players:
|
||||||
league_points = lp[i]
|
summoner_id = player['summoner_id']
|
||||||
#print(f"SummonerId: {summoner_id}")
|
api_url5 = f"https://{region}.api.riotgames.com/lol/summoner/v4/summoners/{summoner_id}?api_key={api_key}"
|
||||||
#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}")
|
|
||||||
resp5 = requests.get(api_url5, timeout=time)
|
resp5 = requests.get(api_url5, timeout=time)
|
||||||
player_data = resp5.json()
|
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
|
final_players = []
|
||||||
api_url6 = (f"https://europe.api.riotgames.com/riot/account/v1/accounts/by-puuid/{player_puuid}?api_key={api_key}")
|
for i, player in enumerate(players):
|
||||||
resp6 = requests.get(api_url6, timeout=time)
|
final_players.append(Player(name=player['name'],tag=player['tag'],league_points=player['league_points'],rank=i + 1,summoner_id=player['summoner_id']))
|
||||||
data = resp6.json()
|
|
||||||
Name = data.get('gameName')
|
|
||||||
Tag = data.get('tagLine')
|
|
||||||
|
|
||||||
#boucle pour l'affichage du rang
|
return final_players
|
||||||
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
|
|
||||||
|
|||||||
@ -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})"
|
||||||
BIN
appli/static/img/favicon.ico
Normal file
BIN
appli/static/img/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@ -2,14 +2,12 @@
|
|||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/styles.css') }}">
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
|
||||||
|
<title>{% block title %}LoL Classement{% endblock %}</title>
|
||||||
<title>{% block title %}Mon Site{% endblock %}</title>
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<header>
|
<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/logo.png') }}" class="logosite">
|
||||||
<img src="{{ url_for('static', filename='/img/europelogo.png') }}" class="logo">
|
<img src="{{ url_for('static', filename='/img/europelogo.png') }}" class="logo">
|
||||||
<img src="{{ url_for('static', filename='/img/nalogo.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">
|
<img src="{{ url_for('static', filename='/img/japonlogo.png') }}" class="logo">
|
||||||
<h1>Classement League of Legends</h1>
|
<h1>Classement League of Legends</h1>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@ -1,20 +1,12 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block title %}Formulaire{% endblock %}
|
{% block title %}Formulaire{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="container">
|
|
||||||
<form method="POST">
|
<form method="POST">
|
||||||
{{ form.hidden_tag() }}
|
{{ form.hidden_tag() }}
|
||||||
<div>
|
{{ form.region.label }}<br>
|
||||||
{{ form.region.label }}<br>
|
{{ form.region() }}<br>
|
||||||
{{ form.region() }}
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
{{ form.submit() }}
|
{{ form.submit() }}
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/styles.css') }}">
|
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<form method="POST">
|
<form method="POST">
|
||||||
@ -14,8 +13,7 @@
|
|||||||
<br>
|
<br>
|
||||||
{{ form.submit() }}
|
{{ form.submit() }}
|
||||||
</form>
|
</form>
|
||||||
|
{% if players %}
|
||||||
{% if data_list %}
|
|
||||||
<h2>classement :</h2>
|
<h2>classement :</h2>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
@ -27,11 +25,11 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for player in data_list %}
|
{% for player in players %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ player.rang }}</td>
|
<td>{{ player.rank }}</td>
|
||||||
<td>{{ player.Name }}</td>
|
<td>{{ player.name }}</td>
|
||||||
<td>#{{ player.Tag }}</td>
|
<td>#{{ player.tag }}</td>
|
||||||
<td>{{ player.league_points }}</td>
|
<td>{{ player.league_points }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
Flask=3.1.0
|
Flask==3.1.0
|
||||||
requests=2.32.3
|
requests==2.32.3
|
||||||
Flask-WTF
|
Flask-WTF
|
||||||
WTForms==3.2.1
|
WTForms==3.2.1
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user