ajout d'un formulaire simple

This commit is contained in:
Mahel Fonteneau 2025-02-12 16:59:43 +01:00
parent cfb78a1342
commit 812c748cd8
10 changed files with 178 additions and 42 deletions

58
app.py
View File

@ -1,52 +1,26 @@
from flask import Flask, render_template, redirect, url_for, flash
from flask import Flask, render_template, redirect, url_for, flash, request
from appli.forms import RegionForm
import requests
from PIL import Image
from app.forms import ContactForm
from appli import models
import os
from appli.fonctions import main
app = Flask(__name__)
template_dir=os.path.abspath("./appli/templates")
app = Flask(__name__, template_folder=template_dir, static_folder='appli/static')
app.config['SECRET_KEY'] = 'ma_cle_secrete'
#app = Flask(__name__, template_folder="appli/templates", static_folder='appli/static')
@app.route('/', methods=['GET'])
@app.route('/', methods=['GET', 'POST'])
def index():
data_list = []
title = "Bienvenue sur le site utilisant l'API de league of legends"
api_key = 'RGAPI-492b6dec-600b-4ede-81d8-808d4b2b366a'
#/!\ IMPORTANT la clé change toutes les 24h
# veuillez la recréer sur le site riot games developer
form = RegionForm() # Création d'une instance du formulaire
message = "" # Initialisation du message
#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://euw1.api.riotgames.com/lol/league-exp/v4/entries/RANKED_SOLO_5x5/CHALLENGER/I?page=1&api_key={api_key}")
resp2 = requests.get(api_url2)
player_info = resp2.json()
summoner_ids = [entry['summonerId'] for entry in player_info]
lp = [entry['leaguePoints'] for entry in player_info]
if form.validate_on_submit(): # Vérifie si le formulaire a été soumis et validé
region = form.region.data # Récupération de la région sélectionnée
message = main(region) # Appel de la fonction principale
for i in range(10):
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://euw1.api.riotgames.com/lol/summoner/v4/summoners/{api_summonerid}?api_key={api_key}")
resp5 = requests.get(api_url5)
player_data = resp5.json()
player_puuid = player_data.get('puuid')
#print(f"puuid = {player_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}")
resp6 = requests.get(api_url6)
data = resp6.json()
Name = data.get('gameName')
Tag = data.get('tagLine')
print(f"Pseudo: {Name}#{Tag}")
print(f"LeaguePoints: {league_points}")
print("\n")
return render_template('app/templates/index.html', data_list=data_list)
return render_template("form.html", form=form, message=message)
if __name__ == "__main__":
app.run(debug=True)

64
appli/fonctions.py Normal file
View File

@ -0,0 +1,64 @@
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, Regexp
import requests
from flask import Flask, render_template, redirect, url_for, flash, request
def main(region):
region='euw1'
region2='europe'
api_key = 'RGAPI-c51d09b9-7d0b-47c1-8ef8-02fd68e01279'
#/!\ IMPORTANT la clé change toutes les 24h
# Dernière clé activé : valide jusqu'au 13/02 à 12h26
# veuillez la recréer sur le site riot games developer
#voici le code pour changer de région : euw1 (europe ouest), kr (corée), na1 (amérique du nord), br1 (brésil), etc voir la doc de riot...
#region='euw1'
#il faut aussi changer le continent quand on change la région pour la dernière api: 'europe', 'americas', 'asia'
#region2='europe'
#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://{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)
player_info = resp2.json()
summoner_ids = [entry['summonerId'] for entry in player_info]
lp = [entry['leaguePoints'] for entry in player_info]
data_list = []
for i in range(2):
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://{region}.api.riotgames.com/lol/summoner/v4/summoners/{api_summonerid}?api_key={api_key}")
resp5 = requests.get(api_url5)
player_data = resp5.json()
player_puuid = player_data.get('puuid')
#cette api utilise le puuid et retourne les pseudos et tag
api_url6 = (f"https://{region2}.api.riotgames.com/riot/account/v1/accounts/by-puuid/{player_puuid}?api_key={api_key}")
resp6 = requests.get(api_url6, timeout=0.5)
data = resp6.json()
Name = data.get('gameName')
Tag = data.get('tagLine')
print(f"Pseudo: {Name}#{Tag}")
print(f"LeaguePoints: {league_points}")
print("\n")
#gestion de l'affichage du rang
for index, player in enumerate(data_list, start=1):
player["rang"] = index
#ajout des données dans data_list
data_list.append({"Name": Name, "Tag": Tag, "league_points": league_points, "rang": i})
return render_template('index.html', data_list=data_list)

12
appli/forms.py Normal file
View File

@ -0,0 +1,12 @@
from flask_wtf import FlaskForm
from wtforms import SelectField, SubmitField
from wtforms.validators import DataRequired
class RegionForm(FlaskForm):
region = SelectField(
"Choisissez une région :",
choices=[("euw1", "Europe (EUW1)"), ("kr", "Corée (KR)"), ("na1", "Amérique du Nord (NA1)")],
validators=[DataRequired()]
)
submit = SubmitField("Choisir cette région")

0
appli/models.py Normal file
View File

5
appli/routes.py Normal file
View File

@ -0,0 +1,5 @@
from flask import render_template
@app.route('/')
def index():
return render_template('index.html')

View File

BIN
appli/static/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 KiB

24
appli/templates/base.html Normal file
View File

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
<title>{% block title %}Mon Site{% endblock %}</title>
</head>
<body>
<header>
<h1>Bienvenue sur mon site</h1>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>&copy; 2025 Mon Site. Tous droits réservés.</p>
</footer>
</body>
</html>

23
appli/templates/form.html Normal file
View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Choisir une région</title>
</head>
<body>
<h2>Choisissez une région :</h2>
<form method="POST">
{{ form.hidden_tag() }}
<p>{{ form.region.label }} {{ form.region() }}</p>
<p>{{ form.submit() }}</p>
</form>
{% if message %}
<h3>{{ message }}</h3>
{% endif %}
</body>
</html>

View File

@ -0,0 +1,34 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>api_lol</title>
</head>
<body>
<header>
<h1>Classement des 10 meilleurs joueurs</h1>
<p>europe</p>
{#
<!-- marche pas encore
<img src="{{ url_for('static', filename='img/logo.png') }}" alt="Logo">
<img src="{{ url_for('static', filename='img/logo.png') }}" alt="Logo">
-->#}
</header>
<main>
{#
<!-- <p><strong>{{ resultat }}</strong></p> -->
<!-- <a href="{{ url_for('form') }}">Revenir au formulaire</a> -->#}
<ul>
{% for player in data_list %}
<p>
<strong>Rang :</strong> {{ loop.index |safe}}<br>
<strong>Pseudo :</strong> {{ player.Name }}#{{ player.Tag |safe}}<br>
<strong>League Points :</strong> {{ player.league_points |safe}}<br>
</p>
{% endfor %}
</ul>
</main>
</body>
</html>