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 import requests
from PIL import Image 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(): def index():
data_list = [] form = RegionForm() # Création d'une instance du formulaire
title = "Bienvenue sur le site utilisant l'API de league of legends" message = "" # Initialisation du message
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
#Cette url permet de récupérer : leagueId, queueType, tier, rank, summonerId, leaguePoints, if form.validate_on_submit(): # Vérifie si le formulaire a été soumis et validé
#wins, losses, veteran, inactive,freshBlood, hotstreak, region = form.region.data # Récupération de la région sélectionnée
#on va avoir besoin des leaguePoints pour faire un classement, et des summonerId pour retrouver les pseudos des joueurs plus tard message = main(region) # Appel de la fonction principale
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]
for i in range(10): return render_template("form.html", form=form, message=message)
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)
if __name__ == "__main__": if __name__ == "__main__":
app.run(debug=True) 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>