Push public

This commit is contained in:
Solène 2024-09-16 13:29:02 +02:00
commit ea9f4d79b0
35 changed files with 3293 additions and 0 deletions

2
.gitattributes vendored Normal file
View file

@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto

5
apiDMTB.txt Normal file
View file

@ -0,0 +1,5 @@
Clé API
###
Jeton d'accès en lecture à l'API :
###

770
app.py Normal file
View file

@ -0,0 +1,770 @@
from flask import Flask, render_template, request
from datetime import datetime
from flask_caching import Cache
import asyncio
# IMPORT DES MODULES
from modules.date import chiffre_intoMonth, anglais_intoJourFrancais, testChiffreJour, testMoisNumero
from modules.scraping import scrap_infoFilm, get_data, cleanFilms
from modules.urlGenerator import decalageDate
app = Flask(__name__)
cache = Cache(app, config={'CACHE_TYPE': 'simple'})
@app.route('/')
@cache.cached(timeout=3600)
def home():
date = {
"jour1" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 0),
"chiffre" : testChiffreJour(datetime.today().day, 0),
"mois" : testMoisNumero(datetime.today().day, 0)
},
"jour2" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 1),
"chiffre" : testChiffreJour(datetime.today().day, 1),
"mois" : testMoisNumero(datetime.today().day, 1)
},
"jour3" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 2),
"chiffre" : testChiffreJour(datetime.today().day, 2),
"mois" : testMoisNumero(datetime.today().day, 2)
},
"jour4" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 3),
"chiffre" : testChiffreJour(datetime.today().day, 3),
"mois" : testMoisNumero(datetime.today().day, 3)
},
"jour5" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 4),
"chiffre" : testChiffreJour(datetime.today().day, 4),
"mois" : testMoisNumero(datetime.today().day, 4)
},
"jour6" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 5),
"chiffre" : testChiffreJour(datetime.today().day, 5),
"mois" : testMoisNumero(datetime.today().day, 5)
},
"jour7" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 6),
"chiffre" : testChiffreJour(datetime.today().day, 6),
"mois" : testMoisNumero(datetime.today().day, 6)
}
}
cinemas = [
{
"salle" : "Écoles Cinéma Club",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0071.html"
},
{
"salle" : "MK2 Bibliothèque",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C2954.html",
},
{
"salle" : "MK2 Beaubourg",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0050.html"
},
{
"salle" : "Épée de bois",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=W7504.html"
},
{
"salle" : "Cinéma du Panthéon",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0076.html"
},
{
"salle" : "Max Linder Panorama",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0089.html"
},
{
"salle" : "Luminor Hotel de Ville",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0013.html"
},
{
"salle" : "Le Grand Action",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0072.html"
},
{
"salle" : "MK2 Parnasse",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0099.html"
},
{
"salle" : "Le Champo",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0073.html"
},
{
"salle" : "Filmothèque du Quartier Latin",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0020.html"
},
{
"salle" : "Reflet Medicis",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0074.html"
},
{
"salle" : "UGC Ciné Cité Les Halles",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0159.html"
},
{
"salle" : "UGC Ciné Cité Bercy",
"url" : "https://www.allocine.fr/seance/salle_gen_csalle=C0026.html"
}
]
films = get_data(cinemas)
filmsClean = cleanFilms(films)
return render_template('index.html', page_actuelle='home', films=filmsClean, date=date)
@app.route('/jour1')
@cache.cached(timeout=3600)
def jour1():
date = {
"jour1" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 0),
"chiffre" : testChiffreJour(datetime.today().day, 0),
"mois" : testMoisNumero(datetime.today().day, 0)
},
"jour2" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 1),
"chiffre" : testChiffreJour(datetime.today().day, 1),
"mois" : testMoisNumero(datetime.today().day, 1)
},
"jour3" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 2),
"chiffre" : testChiffreJour(datetime.today().day, 2),
"mois" : testMoisNumero(datetime.today().day, 2)
},
"jour4" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 3),
"chiffre" : testChiffreJour(datetime.today().day, 3),
"mois" : testMoisNumero(datetime.today().day, 3)
},
"jour5" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 4),
"chiffre" : testChiffreJour(datetime.today().day, 4),
"mois" : testMoisNumero(datetime.today().day, 4)
},
"jour6" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 5),
"chiffre" : testChiffreJour(datetime.today().day, 5),
"mois" : testMoisNumero(datetime.today().day, 5)
},
"jour7" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 6),
"chiffre" : testChiffreJour(datetime.today().day, 6),
"mois" : testMoisNumero(datetime.today().day, 6)
}
}
films = []
cinemas = [
{
"salle" : "Écoles Cinéma Club",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0071.html#shwt_date=", 1)
},
{
"salle" : "MK2 Bibliothèque",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C2954.html#shwt_date=l",1)
},
{
"salle" : "MK2 Beaubourg",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0050.html#shwt_date=",1)
},
{
"salle" : "Épée de bois",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=W7504.html#shwt_date=",1)
},
{
"salle" : "Cinéma du Panthéon",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0076.html#shwt_date=",1)
},
{
"salle" : "Max Linder Panorama",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0089.html#shwt_date=",1)
},
{
"salle" : "Luminor Hotel de Ville",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0013.html#shwt_date=",1)
},
{
"salle" : "Le Grand Action",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0072.html#shwt_date=",1)
},
{
"salle" : "MK2 Parnasse",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0099.html#shwt_date=",1)
},
{
"salle" : "Le Champo",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0073.html#shwt_date=",1)
},
{
"salle" : "Filmothèque du Quartier Latin",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0020.html#shwt_date=",1)
},
{
"salle" : "Reflet Medicis",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0074.html#shwt_date=",1)
},
{
"salle" : "UGC Ciné Cité Les Halles",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0159.html#shwt_date=",1)
},
{
"salle" : "UGC Ciné Cité Bercy",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0026.html#shwt_date=",1)
}
]
films = get_data(cinemas)
filmsClean = cleanFilms(films)
return render_template('jours/jour1.html', page_actuelle='jour1', films=filmsClean, date=date)
@app.route('/jour2')
@cache.cached(timeout=3600)
def jour2():
date = {
"jour1" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 0),
"chiffre" : testChiffreJour(datetime.today().day, 0),
"mois" : testMoisNumero(datetime.today().day, 0)
},
"jour2" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 1),
"chiffre" : testChiffreJour(datetime.today().day, 1),
"mois" : testMoisNumero(datetime.today().day, 1)
},
"jour3" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 2),
"chiffre" : testChiffreJour(datetime.today().day, 2),
"mois" : testMoisNumero(datetime.today().day, 2)
},
"jour4" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 3),
"chiffre" : testChiffreJour(datetime.today().day, 3),
"mois" : testMoisNumero(datetime.today().day, 3)
},
"jour5" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 4),
"chiffre" : testChiffreJour(datetime.today().day, 4),
"mois" : testMoisNumero(datetime.today().day, 4)
},
"jour6" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 5),
"chiffre" : testChiffreJour(datetime.today().day, 5),
"mois" : testMoisNumero(datetime.today().day, 5)
},
"jour7" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 6),
"chiffre" : testChiffreJour(datetime.today().day, 6),
"mois" : testMoisNumero(datetime.today().day, 6)
}
}
films = []
cinemas = [
{
"salle" : "Écoles Cinéma Club",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0071.html#shwt_date=", 2)
},
{
"salle" : "MK2 Bibliothèque",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C2954.html#shwt_date=l",2)
},
{
"salle" : "MK2 Beaubourg",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0050.html#shwt_date=",2)
},
{
"salle" : "Épée de bois",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=W7504.html#shwt_date=",2)
},
{
"salle" : "Cinéma du Panthéon",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0076.html#shwt_date=",2)
},
{
"salle" : "Max Linder Panorama",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0089.html#shwt_date=",2)
},
{
"salle" : "Luminor Hotel de Ville",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0013.html#shwt_date=",2)
},
{
"salle" : "Le Grand Action",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0072.html#shwt_date=",2)
},
{
"salle" : "MK2 Parnasse",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0099.html#shwt_date=",2)
},
{
"salle" : "Le Champo",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0073.html#shwt_date=",2)
},
{
"salle" : "Filmothèque du Quartier Latin",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0020.html#shwt_date=",2)
},
{
"salle" : "Reflet Medicis",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0074.html#shwt_date=",2)
},
{
"salle" : "UGC Ciné Cité Les Halles",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0159.html#shwt_date=",2)
},
{
"salle" : "UGC Ciné Cité Bercy",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0026.html#shwt_date=",2)
}
]
films = get_data(cinemas)
filmsClean = cleanFilms(films)
return render_template('jours/jour2.html', page_actuelle='jour2', films=filmsClean, date=date)
@app.route('/jour3')
@cache.cached(timeout=3600)
def jour3():
date = {
"jour1" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 0),
"chiffre" : testChiffreJour(datetime.today().day, 0),
"mois" : testMoisNumero(datetime.today().day, 0)
},
"jour2" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 1),
"chiffre" : testChiffreJour(datetime.today().day, 1),
"mois" : testMoisNumero(datetime.today().day, 1)
},
"jour3" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 2),
"chiffre" : testChiffreJour(datetime.today().day, 2),
"mois" : testMoisNumero(datetime.today().day, 2)
},
"jour4" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 3),
"chiffre" : testChiffreJour(datetime.today().day, 3),
"mois" : testMoisNumero(datetime.today().day, 3)
},
"jour5" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 4),
"chiffre" : testChiffreJour(datetime.today().day, 4),
"mois" : testMoisNumero(datetime.today().day, 4)
},
"jour6" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 5),
"chiffre" : testChiffreJour(datetime.today().day, 5),
"mois" : testMoisNumero(datetime.today().day, 5)
},
"jour7" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 6),
"chiffre" : testChiffreJour(datetime.today().day, 6),
"mois" : testMoisNumero(datetime.today().day, 6)
}
}
films = []
cinemas = [
{
"salle" : "Écoles Cinéma Club",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0071.html#shwt_date=", 3)
},
{
"salle" : "MK2 Bibliothèque",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C2954.html#shwt_date=l",3)
},
{
"salle" : "MK2 Beaubourg",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0050.html#shwt_date=",3)
},
{
"salle" : "Épée de bois",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=W7504.html#shwt_date=",3)
},
{
"salle" : "Cinéma du Panthéon",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0076.html#shwt_date=",3)
},
{
"salle" : "Max Linder Panorama",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0089.html#shwt_date=",3)
},
{
"salle" : "Luminor Hotel de Ville",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0013.html#shwt_date=",3)
},
{
"salle" : "Le Grand Action",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0072.html#shwt_date=",3)
},
{
"salle" : "MK2 Parnasse",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0099.html#shwt_date=",3)
},
{
"salle" : "Le Champo",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0073.html#shwt_date=",3)
},
{
"salle" : "Filmothèque du Quartier Latin",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0020.html#shwt_date=",3)
},
{
"salle" : "Reflet Medicis",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0074.html#shwt_date=",3)
},
{
"salle" : "UGC Ciné Cité Les Halles",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0159.html#shwt_date=",3)
},
{
"salle" : "UGC Ciné Cité Bercy",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0026.html#shwt_date=",3)
}
]
films = get_data(cinemas)
filmsClean = cleanFilms(films)
return render_template('jours/jour3.html', page_actuelle='jour3', films=filmsClean, date=date)
@app.route('/jour4')
@cache.cached(timeout=3600)
def jour4():
date = {
"jour1" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 0),
"chiffre" : testChiffreJour(datetime.today().day, 0),
"mois" : testMoisNumero(datetime.today().day, 0)
},
"jour2" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 1),
"chiffre" : testChiffreJour(datetime.today().day, 1),
"mois" : testMoisNumero(datetime.today().day, 1)
},
"jour3" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 2),
"chiffre" : testChiffreJour(datetime.today().day, 2),
"mois" : testMoisNumero(datetime.today().day, 2)
},
"jour4" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 3),
"chiffre" : testChiffreJour(datetime.today().day, 3),
"mois" : testMoisNumero(datetime.today().day, 3)
},
"jour5" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 4),
"chiffre" : testChiffreJour(datetime.today().day, 4),
"mois" : testMoisNumero(datetime.today().day, 4)
},
"jour6" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 5),
"chiffre" : testChiffreJour(datetime.today().day, 5),
"mois" : testMoisNumero(datetime.today().day, 5)
},
"jour7" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 6),
"chiffre" : testChiffreJour(datetime.today().day, 6),
"mois" : testMoisNumero(datetime.today().day, 6)
}
}
films = []
cinemas = [
{
"salle" : "Écoles Cinéma Club",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0071.html#shwt_date=", 4)
},
{
"salle" : "MK2 Bibliothèque",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C2954.html#shwt_date=l",4)
},
{
"salle" : "MK2 Beaubourg",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0050.html#shwt_date=",4)
},
{
"salle" : "Épée de bois",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=W7504.html#shwt_date=",4)
},
{
"salle" : "Cinéma du Panthéon",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0076.html#shwt_date=",4)
},
{
"salle" : "Max Linder Panorama",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0089.html#shwt_date=",4)
},
{
"salle" : "Luminor Hotel de Ville",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0013.html#shwt_date=",4)
},
{
"salle" : "Le Grand Action",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0072.html#shwt_date=",4)
},
{
"salle" : "MK2 Parnasse",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0099.html#shwt_date=",4)
},
{
"salle" : "Le Champo",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0073.html#shwt_date=",4)
},
{
"salle" : "Filmothèque du Quartier Latin",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0020.html#shwt_date=",4)
},
{
"salle" : "Reflet Medicis",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0074.html#shwt_date=",4)
},
{
"salle" : "UGC Ciné Cité Les Halles",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0159.html#shwt_date=",4)
},
{
"salle" : "UGC Ciné Cité Bercy",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0026.html#shwt_date=",4)
}
]
films = get_data(cinemas)
filmsClean = cleanFilms(films)
return render_template('jours/jour4.html', page_actuelle='jour4', films=filmsClean, date=date)
@app.route('/jour5')
@cache.cached(timeout=3600)
def jour5():
date = {
"jour1" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 0),
"chiffre" : testChiffreJour(datetime.today().day, 0),
"mois" : testMoisNumero(datetime.today().day, 0)
},
"jour2" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 1),
"chiffre" : testChiffreJour(datetime.today().day, 1),
"mois" : testMoisNumero(datetime.today().day, 1)
},
"jour3" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 2),
"chiffre" : testChiffreJour(datetime.today().day, 2),
"mois" : testMoisNumero(datetime.today().day, 2)
},
"jour4" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 3),
"chiffre" : testChiffreJour(datetime.today().day, 3),
"mois" : testMoisNumero(datetime.today().day, 3)
},
"jour5" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 4),
"chiffre" : testChiffreJour(datetime.today().day, 4),
"mois" : testMoisNumero(datetime.today().day, 4)
},
"jour6" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 5),
"chiffre" : testChiffreJour(datetime.today().day, 5),
"mois" : testMoisNumero(datetime.today().day, 5)
},
"jour7" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 6),
"chiffre" : testChiffreJour(datetime.today().day, 6),
"mois" : testMoisNumero(datetime.today().day, 6)
}
}
films = []
cinemas = [
{
"salle" : "Écoles Cinéma Club",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0071.html#shwt_date=",5)
},
{
"salle" : "MK2 Bibliothèque",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C2954.html#shwt_date=l",5)
},
{
"salle" : "MK2 Beaubourg",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0050.html#shwt_date=",5)
},
{
"salle" : "Épée de bois",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=W7504.html#shwt_date=",5)
},
{
"salle" : "Cinéma du Panthéon",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0076.html#shwt_date=",5)
},
{
"salle" : "Max Linder Panorama",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0089.html#shwt_date=",5)
},
{
"salle" : "Luminor Hotel de Ville",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0013.html#shwt_date=",5)
},
{
"salle" : "Le Grand Action",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0072.html#shwt_date=",5)
},
{
"salle" : "MK2 Parnasse",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0099.html#shwt_date=",5)
},
{
"salle" : "Le Champo",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0073.html#shwt_date=",5)
},
{
"salle" : "Filmothèque du Quartier Latin",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0020.html#shwt_date=",5)
},
{
"salle" : "Reflet Medicis",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0074.html#shwt_date=",5)
},
{
"salle" : "UGC Ciné Cité Les Halles",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0159.html#shwt_date=",5)
},
{
"salle" : "UGC Ciné Cité Bercy",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0026.html#shwt_date=",5)
}
]
films = get_data(cinemas)
filmsClean = cleanFilms(films)
return render_template('jours/jour5.html', page_actuelle='jour5', films=filmsClean, date=date)
@app.route('/jour6')
@cache.cached(timeout=3600)
def jour6():
date = {
"jour1" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 0),
"chiffre" : testChiffreJour(datetime.today().day, 0),
"mois" : testMoisNumero(datetime.today().day, 0)
},
"jour2" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 1),
"chiffre" : testChiffreJour(datetime.today().day, 1),
"mois" : testMoisNumero(datetime.today().day, 1)
},
"jour3" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 2),
"chiffre" : testChiffreJour(datetime.today().day, 2),
"mois" : testMoisNumero(datetime.today().day, 2)
},
"jour4" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 3),
"chiffre" : testChiffreJour(datetime.today().day, 3),
"mois" : testMoisNumero(datetime.today().day, 3)
},
"jour5" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 4),
"chiffre" : testChiffreJour(datetime.today().day, 4),
"mois" : testMoisNumero(datetime.today().day, 4)
},
"jour6" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 5),
"chiffre" : testChiffreJour(datetime.today().day, 5),
"mois" : testMoisNumero(datetime.today().day, 5)
},
"jour7" : {
"jour" : anglais_intoJourFrancais(datetime.today().strftime("%A"), 6),
"chiffre" : testChiffreJour(datetime.today().day, 6),
"mois" : testMoisNumero(datetime.today().day, 6)
}
}
films = []
cinemas = [
{
"salle" : "Écoles Cinéma Club",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0071.html#shwt_date=", 6)
},
{
"salle" : "MK2 Bibliothèque",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C2954.html#shwt_date=l",6)
},
{
"salle" : "MK2 Beaubourg",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0050.html#shwt_date=",6)
},
{
"salle" : "Épée de bois",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=W7504.html#shwt_date=",6)
},
{
"salle" : "Cinéma du Panthéon",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0076.html#shwt_date=",6)
},
{
"salle" : "Max Linder Panorama",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0089.html#shwt_date=",6)
},
{
"salle" : "Luminor Hotel de Ville",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0013.html#shwt_date=",6)
},
{
"salle" : "Le Grand Action",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0072.html#shwt_date=",6)
},
{
"salle" : "MK2 Parnasse",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0099.html#shwt_date=",6)
},
{
"salle" : "Le Champo",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0073.html#shwt_date=",6)
},
{
"salle" : "Filmothèque du Quartier Latin",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0020.html#shwt_date=",6)
},
{
"salle" : "Reflet Medicis",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0074.html#shwt_date=",6)
},
{
"salle" : "UGC Ciné Cité Les Halles",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0159.html#shwt_date=",6)
},
{
"salle" : "UGC Ciné Cité Bercy",
"url" : decalageDate("https://www.allocine.fr/seance/salle_gen_csalle=C0026.html#shwt_date=",6)
}
]
films = get_data(cinemas)
filmsClean = cleanFilms(films)
return render_template('jours/jour6.html', page_actuelle='jour6', films=filmsClean, date=date)
"""
@app.route('/process')
def process():
# Simule un traitement long
time.sleep(5)
return jsonify(status='success', message='Traitement terminé')
"""
if __name__ == '__main__':
app.run(debug=True)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

200
modules/date.py Normal file
View file

@ -0,0 +1,200 @@
import time
from datetime import datetime
# Converti les mois en chiffre en lettres
def chiffre_intoMonth(month):
match month:
case 1:
return 'janvier'
case 2:
return 'février'
case 3:
return 'mars'
case 4:
return 'avril'
case 5:
return 'mai'
case 6:
return 'juin'
case 7:
return 'juillet'
case 8:
return 'août'
case 9:
return 'septembre'
case 10:
return 'octobre'
case 11:
return 'novembre'
case 12:
return 'décembre'
case _:
return 'invalid month'
# Calcule le décallage des jours et traduits en lettres
def anglais_intoJourFrancais(jour, decalage):
if decalage == 0:
match jour:
case "Monday":
return 'lun'
case 'Tuesday':
return 'mar'
case 'Wednesday':
return 'mer'
case 'Thursday':
return 'jeu'
case 'Friday':
return 'ven'
case 'Saturday':
return 'sam'
case 'Sunday':
return 'dim'
case _:
return 'invalid jour'
elif decalage == 1:
match jour:
case "Monday":
return 'mar'
case 'Tuesday':
return 'mer'
case 'Wednesday':
return 'jeu'
case 'Thursday':
return 'ven'
case 'Friday':
return 'sam'
case 'Saturday':
return 'dim'
case 'Sunday':
return 'lun'
case _:
return 'invalid jour'
elif decalage == 2:
match jour:
case "Monday":
return 'mer'
case 'Tuesday':
return 'jeu'
case 'Wednesday':
return 'ven'
case 'Thursday':
return 'sam'
case 'Friday':
return 'dim'
case 'Saturday':
return 'lun'
case 'Sunday':
return 'mar'
case _:
return 'invalid jour'
elif decalage == 3:
match jour:
case "Monday":
return 'jeu'
case 'Tuesday':
return 'ven'
case 'Wednesday':
return 'sam'
case 'Thursday':
return 'dim'
case 'Friday':
return 'lun'
case 'Saturday':
return 'mar'
case 'Sunday':
return 'mer'
case _:
return 'invalid jour'
elif decalage == 4:
match jour:
case "Monday":
return 'ven'
case 'Tuesday':
return 'sam'
case 'Wednesday':
return 'dim'
case 'Thursday':
return 'lun'
case 'Friday':
return 'mar'
case 'Saturday':
return 'mer'
case 'Sunday':
return 'jeu'
case _:
return 'invalid jour'
elif decalage == 5:
match jour:
case "Monday":
return 'sam'
case 'Tuesday':
return 'dim'
case 'Wednesday':
return 'lun'
case 'Thursday':
return 'mar'
case 'Friday':
return 'mer'
case 'Saturday':
return 'jeu'
case 'Sunday':
return 'ven'
case _:
return 'invalid jour'
elif decalage == 6:
match jour:
case "Monday":
return 'dim'
case 'Tuesday':
return 'lun'
case 'Wednesday':
return 'mar'
case 'Thursday':
return 'mer'
case 'Friday':
return 'jeu'
case 'Saturday':
return 'ven'
case 'Sunday':
return 'sam'
case _:
return 'invalid jour'
def testChiffreJour(chiffre, decalage):
today = datetime.today()
month = today.month
if month in [1, 3, 5, 7, 8, 10, 12]:
max_days = 31
elif month == 2:
if (today.year % 4 == 0 and today.year % 100 != 0) or (today.year % 400 == 0):
max_days = 29
else:
max_days = 28
else:
max_days = 30
if chiffre + decalage > max_days:
return chiffre + decalage - max_days
else:
return chiffre + decalage
def testMoisNumero(chiffre, decalage):
today = datetime.today()
month = today.month
if month in [1, 3, 5, 7, 8, 10, 12]:
max_days = 31
elif month == 2:
if (today.year % 4 == 0 and today.year % 100 != 0) or (today.year % 400 == 0):
max_days = 29
else:
max_days = 28
else:
max_days = 30
if chiffre + decalage > max_days:
next_month = month + 1 if month < 12 else 1
return chiffre_intoMonth(next_month)
else:
return chiffre_intoMonth(month)

73
modules/firebase.py Normal file
View file

@ -0,0 +1,73 @@
import firebase_admin
from firebase_admin import credentials, db
import urllib.parse
cred = credentials.Certificate('static/firebase/firebase_grainParisArt.json')
firebase_admin.initialize_app(cred, {
'databaseURL': '###'
})
ref = db.reference('/')
film = {
'titre': "L'I.A. du mal",
'realisateur': 'Luca Guadagnino',
'casting': [' Zendaya', "Josh O'Connor", 'Mike Faist'],
'genres': ['Drame', 'Romance'],
'duree': {'heure': 2, 'minute': 12},
'affiche': 'https://fr.web.img2.acsta.net/c_310_420/pictures/24/01/15/10/08/2202044.jpg',
'synopsis': '\nDurant leurs études, Patrick et Art, tombent amoureux de Tashi. À la fois amis, amants et rivaux, ils voient tous les trois leurs chemins se recroiser des années plus tard. Leur passé et leur présent sentrechoquent et des tensions jusque-là inavouées refont surface.\n',
'horaires': [{'cinema': 'MK2 Parnasse', 'seances': ['20:45']}]
}
def encode_node_name(name):
replacements = {
'.': '__dot__',
'$': '__dollar__',
'#': '__hash__',
'[': '__lbrack__',
']': '__rbrack__',
'/': '__slash__'
}
for char, replacement in replacements.items():
name = name.replace(char, replacement)
return name
def enregistrementFilm(film):
cleaned_movie_name = encode_node_name(film['titre'])
movie_ref = ref.child(cleaned_movie_name)
movie_ref.set({
'titre': film['titre'],
'realisateur': film['realisateur'],
'casting': film['casting'],
'genres': film['genres'],
'duree': film['duree'],
'affiche': film['affiche'],
'synopsis': film['synopsis']
})
print(f"Node '{film['titre']}' created successfully with details!")
def recupererDataFilm(nomFilm, realisateur):
cleaned_movie_name = encode_node_name(nomFilm)
print(cleaned_movie_name)
movie_ref = ref.child(cleaned_movie_name)
# Lire les données du nœud
movie_data = movie_ref.get()
if movie_data:
# Vérifier si le réalisateur correspond
if movie_data.get('realisateur') == realisateur:
return movie_data
else:
return 0
else:
return 0
def supprimerTousLesFilms():
root_ref = ref
root_ref.delete()
print("Tous les films ont été supprimés.")

153
modules/scraping.py Normal file
View file

@ -0,0 +1,153 @@
from bs4 import BeautifulSoup
import requests
import requests_cache
from datetime import timedelta
from modules.firebase import enregistrementFilm, recupererDataFilm
requests_cache.install_cache('film_cache', expire_after=timedelta(minutes=5))
# Récolte les données
def scrap_infoFilm(url, cinema):
films = []
response = requests.get(url)
reponse_text = response.text
soupReponse = BeautifulSoup(reponse_text, 'html.parser')
# films_list = soupReponse.find('div', class_="showtimes-list-holder").find_all('div', class_="card entity-card entity-card-list movie-card-theater cf hred")
films_list_container = soupReponse.find('div', class_="showtimes-list-holder")
if films_list_container:
films_list = films_list_container.find_all('div', class_="card entity-card entity-card-list movie-card-theater cf hred")
for film in films_list:
titre = film.find("div", class_="meta").find('h2', class_="meta-title").find("a").get_text()
realisateur_section = film.find("div", class_="meta-body-item meta-body-direction")
if realisateur_section:
realisateur = realisateur_section.find('span', class_="dark-grey-link").get_text()
else:
realisateur = "Réalisateur non trouvé"
dataFilm_firebase = recupererDataFilm(titre, realisateur)
if dataFilm_firebase == 0:
# Extraction de l'image
thumbnail_img = film.find('img', class_='thumbnail-img')
if thumbnail_img and not thumbnail_img['src'].startswith('data:image'):
img_url = thumbnail_img['src']
else:
urlAffiche = "https://www.allocine.fr" + film.find("div", class_="meta").find('h2', class_="meta-title").find("a")['href']
responseAffiche = requests.get(urlAffiche)
pageFilm = BeautifulSoup(responseAffiche.text, 'html.parser')
thumbnail_img = pageFilm.find('img', class_='thumbnail-img')
img_url = thumbnail_img['src'] if thumbnail_img and not thumbnail_img['src'].startswith('data:image') else 'Image de la vignette non trouvée'
synopsis = film.find('div', class_="synopsis").find('div', class_="content-txt").get_text() if film.find('div', class_="synopsis") else "synopsis non trouvé"
acteur_container = film.find("div", class_="meta-body-item meta-body-actor")
acteurs = [acteur.get_text() for acteur in acteur_container.find_all("span", class_="dark-grey-link")] if acteur_container else ["acteurs non trouvés"]
horaire_sections = film.find_all("div", class_="showtimes-hour-block")
horaires = [horaire_section.find('span', class_="showtimes-hour-item-value").get_text() for horaire_section in horaire_sections if horaire_section.find('span', class_="showtimes-hour-item-value")] or ["Horaire non trouvé"]
genre_container = film.find("div", class_="meta-body-item meta-body-info")
genres = [span.get_text().strip() for span in genre_container.find_all("span") if 'class' in span.attrs and not span.attrs['class'][0].startswith('spacer') and 'nationality' not in span.attrs['class']] if genre_container else ["Genre non trouvé"]
if genres: genres.pop(0)
# Récupération de la durée du film
url = "https://api.themoviedb.org/3/search/movie?query=" + titre
headers = {
"accept": "application/json",
"Authorization": "###"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
if data['results']:
film_id = data['results'][0]['id']
url = "https://api.themoviedb.org/3/movie/" + str(film_id)
response = requests.get(url, headers=headers)
data = response.json()
duree_film = data['runtime']
heure = duree_film // 60
minute = duree_film % 60
else:
heure = 0
minute = 0
else:
heure = 0
minute = 0
film_data = {
"titre": titre,
"realisateur": realisateur,
"casting": acteurs,
"genres": genres,
"duree": {"heure": heure, "minute": minute},
"affiche": img_url,
"synopsis": synopsis,
"horaires": [
{
"cinema": cinema,
"seances": horaires
}
]
}
enregistrementFilm(film_data)
print(f"{film_data['titre']} : enregistré dans la db")
else:
horaire_sections = film.find_all("div", class_="showtimes-hour-block")
horaires = [horaire_section.find('span', class_="showtimes-hour-item-value").get_text() for horaire_section in horaire_sections if horaire_section.find('span', class_="showtimes-hour-item-value")] or ["Horaire non trouvé"]
film_data = {
"titre": dataFilm_firebase['titre'],
"realisateur": dataFilm_firebase['realisateur'],
"casting": dataFilm_firebase['casting'],
'genres': ['Drame', 'Romance'],
"duree": dataFilm_firebase['duree'],
"affiche": dataFilm_firebase['affiche'],
"synopsis": dataFilm_firebase['synopsis'],
"horaires": [
{
"cinema": cinema,
"seances": horaires
}
]
}
print(f"{film_data['titre']} : récupéré dans la db")
# Ajout du film s'il n'existe pas déjà
existing_film = next((f for f in films if f["titre"] == titre), None)
if existing_film:
existing_film["horaires"].append({
"cinema": cinema,
"seances": horaires
})
else:
films.append(film_data)
else:
print(f"L'élément 'showtimes-list-holder' n'a pas été trouvé pour l'URL {url}")
films_list = []
return films
def get_data(cinemas):
films = []
for cinema in cinemas:
result = scrap_infoFilm(cinema["url"], cinema["salle"])
films.extend(result)
return films
def cleanFilms(films):
filmsClean = []
for film in films:
existing_film = next((f for f in filmsClean if f["titre"] == film["titre"]), None)
if existing_film:
existing_film["horaires"].append({
"cinema": film["horaires"][0]["cinema"],
"seances": film["horaires"][0]["seances"]
})
else:
filmsClean.append(film)
return filmsClean

40
modules/urlGenerator.py Normal file
View file

@ -0,0 +1,40 @@
import time
from datetime import datetime
import datetime
def decalageDate(baseURL, decalage):
today = datetime.datetime.today()
day = today.day
year = today.year
month = today.month
if month in [1, 3, 5, 7, 8, 10, 12]:
max_days = 31
elif month == 2:
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
max_days = 29
else:
max_days = 28
else:
max_days = 30
if day + decalage > max_days:
if month + 1 > 12:
year = year + 1
month = 1
day = day + decalage - max_days
url = baseURL + str(year) + "-" + str(month).zfill(2) + "-" + str(day).zfill(2)
print(url)
return url
else:
day = day + decalage - max_days
url = baseURL + str(year) + "-" + str(month).zfill(2) + "-" + str(day).zfill(2)
print(url)
return url
else:
day = day + decalage
url = baseURL + str(year) + "-" + str(month).zfill(2) + "-" + str(day).zfill(2)
print(url)
return url

52
requirements.txt Normal file
View file

@ -0,0 +1,52 @@
attrs==24.2.0
beautifulsoup4==4.12.3
blinker==1.8.2
bs4==0.0.2
CacheControl==0.14.0
cachelib==0.9.0
cachetools==5.4.0
cattrs==23.2.3
certifi==2024.7.4
cffi==1.17.0
charset-normalizer==3.3.2
click==8.1.7
cryptography==43.0.0
firebase-admin==6.5.0
Flask==3.0.3
Flask-Caching==2.3.0
google-api-core==2.19.1
google-api-python-client==2.140.0
google-auth==2.33.0
google-auth-httplib2==0.2.0
google-cloud-core==2.4.1
google-cloud-firestore==2.17.1
google-cloud-storage==2.18.2
google-crc32c==1.5.0
google-resumable-media==2.7.2
googleapis-common-protos==1.63.2
grpcio==1.65.4
grpcio-status==1.62.3
httplib2==0.22.0
idna==3.7
itsdangerous==2.2.0
Jinja2==3.1.4
MarkupSafe==2.1.5
msgpack==1.0.8
mysql-connector-python==9.0.0
platformdirs==4.2.2
proto-plus==1.24.0
protobuf==4.25.4
pyasn1==0.6.0
pyasn1_modules==0.4.0
pycparser==2.22
PyJWT==2.9.0
pyparsing==3.1.2
requests==2.32.3
requests-cache==1.2.1
rsa==4.9
six==1.16.0
soupsieve==2.5
uritemplate==4.1.1
url-normalize==1.4.3
urllib3==2.2.2
Werkzeug==3.0.3

BIN
static/.DS_Store vendored Normal file

Binary file not shown.

519
static/css/main.css Normal file
View file

@ -0,0 +1,519 @@
@font-face {
font-family: 'healTheWebA';
src: url("../font/HealTheWebA-Regular.otf");
}
@font-face {
font-family: 'healTheWebB';
src: url("../font/HealTheWebB-Regular.otf");
}
@font-face {
font-family: 'Raleway-Black';
src: url("../font/Raleway-Black.ttf");
}
@font-face {
font-family: 'Montserrat-ExtraBold';
src: url("../font/montserrat_extrabold.ttf");
}
body {
margin: 0;
font-family: 'healTheWebA', sans-serif;
}
h1 h2 h3 {
font-family: 'healTheWebB', sans-serif;
}
h3 {
font-size: 24px;
}
.background_svg {
position: fixed;
top: -30%;
left: -10%;
z-index: -2;
width: 150vw;
}
p {
font-size: 20;
font-family: 'healTheWebA', sans-serif;
}
.divHeader {
margin-left: 10%;
margin-right: 10%;
display: flex;
flex-direction: row;
align-items: baseline;
justify-content: space-between;
}
#map {
margin-left: 10%;
margin-right: 10%;
height: 500px;
border-radius: 10px;
}
.custom-marker {
background-color: #444cf7;
border: 2px solid #fff;
border-radius: 50%;
width: 15px;
height: 15px;
box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
}
/* 444cf7 */
.container_titrePlanning,
.container_infoFilm {
margin-left: 10%;
margin-right: 10%;
}
.line {
width: 100%;
height: 2px;
background-image: linear-gradient(90deg, rgba(68, 76, 247, 1) 0%, rgba(9, 9, 121, 1) 35%, rgba(2, 0, 36, 1) 100%);
margin-top: 10px;
margin-bottom: 20px;
}
.container_titrePlanning {
margin-top: 50px;
}
.affiche {
width: 200px;
height: 288px;
border-radius: 5px;
padding-right: 30px;
}
.container_infoFilm {
position: relative;
display: flex;
flex-direction: row;
}
.blur-background {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.3);
backdrop-filter: blur(20px);
z-index: -1;
border-radius: 20px;
filter: drop-shadow(0 -6mm 4mm rgba(2, 2, 2, 0.2));
filter: drop-shadow(2mm 6mm 6mm rgba(2, 2, 2, 0.2));
}
.info-content {
position: relative;
z-index: 1;
}
.realisateur,
.duree,
.casting,
.genre {
margin-top: -20px;
}
.date {
display: flex;
flex-direction: column;
align-items: center;
border-radius: 10px;
width: 80px;
height: 100px;
justify-content: center;
}
.date-selectionne {
display: flex;
flex-direction: column;
align-items: center;
background-color: #444cf7;
color: white;
border-radius: 10px;
width: 80px;
height: 100px;
justify-content: center;
filter: drop-shadow(2mm 6mm 6mm rgba(2, 2, 2, 0.2));
}
.mois {
margin-bottom: 20px;
}
.calendrier {
width: 600px;
position: relative;
display: flex;
flex-direction: row;
justify-content: space-between;
}
.chiffre {
font-family: 'Montserrat-ExtraBold';
font-size: 42px;
margin-top: -20px;
margin-bottom: -20px;
}
.duree {
margin-bottom: 45px;
}
.cinema {
background-color: #444cf7;
border-radius: 5px;
height: 40px;
width: 200px;
color: white;
padding-left: 10px;
box-sizing: border-box;
align-items: center;
display: flex;
align-items: center;
filter: drop-shadow(2mm 6mm 6mm rgba(2, 2, 2, 0.2));
flex-shrink: 0;
flex-grow: 0;
}
.horaire_container {
background-color: white;
}
.seance_container {
margin-right: 10%;
margin-left: 10%;
display: flex;
flex-direction: row;
}
.horaires_container {
display: flex;
flex-direction: row;
max-width: 80% - 200px;
overflow-x: auto;
}
.horaire {
background-color: white;
border-radius: 5px;
height: 40px;
width: 100px;
color: #444cf7;
box-sizing: border-box;
align-items: center;
display: flex;
align-items: center;
justify-content: center;
margin-left: 10px;
filter: drop-shadow(2mm 6mm 6mm rgba(2, 2, 2, 0.2));
flex-shrink: 0;
flex-grow: 0;
}
footer {
background-color: white;
}
.container_footer {
margin-right: 10%;
margin-left: 10%;
display: flex;
flex-direction: row;
justify-content: space-between;
}
.contenu_edt {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.txt_edt {
position: relative;
top: 50px;
}
.synopsis_container {
max-width: 800px;
margin-right: 10%;
}
.synopsis {
opacity: 0.8;
}
.date:hover {
display: flex;
flex-direction: column;
align-items: center;
background-color: #444cf7;
color: white;
border-radius: 10px;
width: 80px;
height: 100px;
justify-content: center;
filter: drop-shadow(2mm 6mm 6mm rgba(2, 2, 2, 0.2));
transition: all 0.2s ease-in-out;
}
a {
text-decoration: none;
color: black;
}
#loader {
min-width: 100vw;
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
#loader div.box {
width: 3rem;
height: 3rem;
position: relative;
margin: 0 1rem 0 1rem;
}
#loader div.box::after {
content: "";
position: absolute;
background: #444cf7;
height: 3rem;
;
width: 3rem;
border-radius: 50%;
animation: move 1s ease alternate infinite;
opacity: 0;
}
#loader div.box:nth-child(2)::after {
animation-delay: 0.25s;
}
#loader div.box:nth-child(3)::after {
animation-delay: 0.5s;
}
@keyframes move {
0% {
bottom: -1.5rem;
opacity: 0;
}
100% {
bottom: 1.5rem;
opacity: 1;
}
}
.goTop {
width: 50px;
height: 50px;
background-color: #444cf7;
border: #fff solid 5px;
border-radius: 50%;
position: fixed;
bottom: 20px;
right: 20px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
filter: drop-shadow(2mm 6mm 6mm rgba(2, 2, 2, 0.2));
}
html {
scroll-behavior: smooth;
}
.responsive-div {
height: 90px;
}
.responsive-petite-div {
height: 10px;
}
@media (max-width: 576px) {
.contenu_edt {
display: flex;
flex-direction: column;
}
#map {
max-width: 100vw;
height: 400px;
/* width: 350px; */
border-radius: 5px;
}
body {
margin: 0;
padding: 0;
overflow-y: auto;
}
.divHeader {
flex-direction: column;
max-width: 80vw;
}
h1 {
margin-block-start: 15px;
margin-block-end: 0;
}
p{
font-size: 12px;
margin-block-start: -5px;
}
.date {
width: 40px;
height: 50px;
}
.date-selectionne {
width: 50px;
height: 50px;
}
.mois {
margin-bottom: 20px;
font-size: 10px;
}
.calendrier {
max-width: 80vw;
width: 350px;
}
.chiffre {
font-size: 20px;
margin-top: 15px;
margin-bottom: 0;
}
.jour {
display: none;
}
.txt_edt {
display: none;
}
.line {
max-width: 80vw;
width: 350px;
}
.affiche {
width: 100px;
height: 144px;
padding-right: 10px;
}
.titreFilm{
font-size: 18px;
margin-block-start: 5px;
margin-block-end: 5px;
}
.realisateur,
.duree,
.casting,
.genre {
margin-block-start: 0;
margin-block-end: 0;
font-size: 10px;
margin-right: 5px;
}
.synopsis{
display: none;
}
.cinema {
height: 30px;
width: 100px;
color: white;
padding-right: 5px;
}
.horaires_container {
max-width: 250px;
}
.horaire {
height: 30px;
width: 45px;
border-radius: 5px;
margin-left: 5px;
}
.cinema p,
.horaire p{
font-size: 10px;
margin-block-start: 1em;
}
.container_titrePlanning,
.container_infoFilm {
max-width: 80vw;
width: 350px;
}
.responsive-div {
height: 30px;
}
.responsive-petite-div {
height: 5px;
}
.goTop {
z-index: 2;
bottom: 10px;
right: 10px;
width: 50px;
height: 50px;
background-color: #444cf7;
border: #fff solid 4px;
}
.goTop p{
font-size: 20px;
margin-block-start: 1em;
margin-block-end: 1em;
}
.background_svg {
position: fixed;
bottom: 0;
top: auto;
right: 0;
z-index: -2;
transform: scale(2);
}
.blur-background {
background: rgba(255, 255, 255, 0.3);
backdrop-filter: blur(20px);
z-index: -1;
border-radius: 5px;
filter: drop-shadow(0 -6mm 4mm rgba(2, 2, 2, 0.2));
filter: drop-shadow(2mm 6mm 6mm rgba(2, 2, 2, 0.4));
}
footer {
background-color: white;
padding-top: 10px;
}
.container_footer {
max-width: 80vw;
}
.container_footer p{
font-size: 10px;
}
*:not(.affiche) {
box-sizing: border-box;
}
.date:hover {
width: 40px;
height: 50px;
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 KiB

BIN
static/images/aftersun.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 MiB

View file

@ -0,0 +1,31 @@
<svg class="background_svg" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="b" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feGaussianBlur in="SourceGraphic" stdDeviation="50" />
</filter>
<filter id="a" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feFlood flood-color="#fff" result="neutral-gray" />
<feTurbulence type="fractalNoise" baseFrequency="2.5" numOctaves="100" stitchTiles="stitch"
result="noise" />
<feColorMatrix in="noise" type="saturate" values="0" result="destaturatedNoise" />
<feComponentTransfer in="desaturatedNoise" result="theNoise">
<feFuncA type="table" tableValues="0 0 0.1 0" />
</feComponentTransfer>
<feBlend in="SourceGraphic" in2="theNoise" mode="soft-light" result="noisy-image" />
</filter>
<radialGradient id="c" cx="50%" cy="50%" r="50%" fx="20%" fy="40%">
<stop offset="0%" stop-color="#444cf7" />
<stop offset="100%" stop-color="rgba(194,68,247,0.2)" />
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#fff" />
<g filter="url(#a)">
<g filter="url(#b)">
<svg width="800" height="800" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"
transform="translate(140.997 117.996)">
<path fill="url(#c)"
d="M993.5 849.5Q888 1099 622 1061T226.5 811.5Q97 600 220 377t362.5-192q239.5 31 378 223t33 441.5Z" />
</svg>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/images/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
static/images/old.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 974 KiB

View file

@ -0,0 +1,32 @@
var isLoading = false;
var page = 1;
function fetchCinemaSessions() {
if (isLoading) return;
isLoading = true;
var loadingContainer = document.getElementById('loading-container');
loadingContainer.innerHTML = '<img src="{{ url_for("static", filename="loading.gif") }}" alt="Loading...">';
fetch('/?page=' + page)
.then(function(response) {
return response.text();
})
.then(function(html) {
var cinemaContainer = document.getElementById('cinema-container');
cinemaContainer.insertAdjacentHTML('beforeend', html);
isLoading = false;
page += 1;
})
.catch(function() {
isLoading = false;
});
}
window.addEventListener('scroll', function() {
if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 100 && !isLoading) {
fetchCinemaSessions();
}
});
fetchCinemaSessions();

29
templates/base.html Normal file
View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{{url_for('static', filename='css/main.css')}}">
<link href='https://api.mapbox.com/mapbox-gl-js/v2.8.1/mapbox-gl.css' rel='stylesheet' />
<script src='https://api.mapbox.com/mapbox-gl-js/v2.8.1/mapbox-gl.js'></script>
<link rel="shortcut icon" type="image/png" href="static/images/favicon.png"/>
{% block head %} {% endblock %}
</head>
<header id="headerTop">
<div class="divHeader">
<h1 class="textLogo_header">GrainParisArt</h1>
<p>Quand ça va pas, y aura toujours le cinéma</p>
</div>
</header>
<body>
{% block body %} {% endblock %}
</body>
<footer>
<div class="container_footer">
<p>Fait avec amour par Solène Derniaux</p>
<p>©Tous droits réservés</p>
</div>
</footer>
</html>

204
templates/index.html Normal file
View file

@ -0,0 +1,204 @@
{% extends 'base.html' %}
{% block head %}
{% endblock %}
{% block body %}
<!--
<div id="loader">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
-->
<a href="#headerTop">
<div class="goTop">
<p>🍿</p>
</div>
</a>
<!--
<svg class="background_svg" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="b" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feGaussianBlur in="SourceGraphic" stdDeviation="50" />
</filter>
<filter id="a" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feFlood flood-color="#fff" result="neutral-gray" />
<feTurbulence type="fractalNoise" baseFrequency="2.5" numOctaves="100" stitchTiles="stitch"
result="noise" />
<feColorMatrix in="noise" type="saturate" values="0" result="destaturatedNoise" />
<feComponentTransfer in="desaturatedNoise" result="theNoise">
<feFuncA type="table" tableValues="0 0 0.1 0" />
</feComponentTransfer>
<feBlend in="SourceGraphic" in2="theNoise" mode="soft-light" result="noisy-image" />
</filter>
<radialGradient id="c" cx="50%" cy="50%" r="50%" fx="20%" fy="40%">
<stop offset="0%" stop-color="#444cf7" />
<stop offset="100%" stop-color="rgba(194,68,247,0.2)" />
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#fff" />
<g filter="url(#a)">
<g filter="url(#b)">
<svg width="800" height="800" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"
transform="translate(140.997 117.996)">
<path fill="url(#c)"
d="M993.5 849.5Q888 1099 622 1061T226.5 811.5Q97 600 220 377t362.5-192q239.5 31 378 223t33 441.5Z" />
</svg>
</g>
</g>
</svg>
-->
<img src="../static/images/background.png" class="background_svg">
<div id="map"></div>
<div class="planning">
<div class="container_titrePlanning">
<div class="contenu_edt">
<h2 class="txt_edt">Emploi du temps</h2>
<div class="calendrier">
<div class="date-selectionne">
<p class="jour">{{date.jour1.jour}}</p>
<p class="chiffre">{{date.jour1.chiffre}}</p>
<p class="mois">{{date.jour1.mois}}</p>
</div>
<a href="{{ url_for('jour1')}}">
<div class="date">
<p class="jour">{{date.jour2.jour}}</p>
<p class="chiffre">{{date.jour2.chiffre}}</p>
<p class="mois">{{date.jour2.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour2')}}">
<div class="date">
<p class="jour">{{date.jour3.jour}}</p>
<p class="chiffre">{{date.jour3.chiffre}}</p>
<p class="mois">{{date.jour3.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour3')}}">
<div class="date">
<p class="jour">{{date.jour4.jour}}</p>
<p class="chiffre">{{date.jour4.chiffre}}</p>
<p class="mois">{{date.jour4.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour4')}}">
<div class="date">
<p class="jour">{{date.jour5.jour}}</p>
<p class="chiffre">{{date.jour5.chiffre}}</p>
<p class="mois">{{date.jour5.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour5')}}">
<div class="date">
<p class="jour">{{date.jour6.jour}}</p>
<p class="chiffre">{{date.jour6.chiffre}}</p>
<p class="mois">{{date.jour6.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour6')}}">
<div class="date">
<p class="jour">{{date.jour7.jour}}</p>
<p class="chiffre">{{date.jour7.chiffre}}</p>
<p class="mois">{{date.jour7.mois}}</p>
</div>
</a>
</div>
</div>
<div class="line"></div>
</div>
{% for film in films %}
<div class="container_infoFilm">
<img src={{film.affiche}} class="affiche" />
<div class="infoFilm">
<div class="blur-background"></div>
<div>
<h3 class="titreFilm">{{film.titre}}</h3>
<div class="info-content">
<p class="realisateur">Réalisateur : {{film.realisateur}}</p>
<p class="casting">Casting : {% for acteur in film.casting %}{{acteur}}, {% endfor %}</p>
<p class="genre">Genre : {% for genre in film.genres %}{{genre}}, {% endfor %}</p>
<p class="duree">Durée : {{film.duree.heure}}h{{film.duree.minute}}</p>
</div>
<div class="synopsis_container">
<p class="synopsis">
{{film.synopsis}}
</p>
</div>
</div>
</div>
</div>
<div style="height: 10px;"></div>
{% for horaire in film.horaires %}
<div class="seance_container">
<div class="cinema">
<p>{{horaire.cinema}}</p>
</div>
<div class="horaires_container">
{% for seance in horaire.seances %}
<div class="horaire">
<p>{{seance}}</p>
</div>
{% endfor %}
</div>
</div>
<div class="responsive-petite-div"></div>
{% endfor %}
<div class="responsive-div"></div>
{% endfor %}
</div>
<script>
mapboxgl.accessToken = '###';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [2.3522, 48.8566],
zoom: 12
});
map.addControl(new mapboxgl.NavigationControl());
var locations = [
{ coordinates: [2.348973, 48.848363], description: "Écoles Cinéma club" },
{ coordinates: [2.546596, 48.840113], description: "UGC Ciné Cité Noisy-le-Grand" },
{ coordinates: [2.343014, 48.849777], description: "UGC Ciné Cité les Halles" },
{ coordinates: [2.342790, 48.849510], description: "Reflet Medicis" },
{ coordinates: [2.342790, 48.849510], description: "Fimothèque du quartier Latin" },
{ coordinates: [2.343223, 48.849980], description: "Le Champo" },
{ coordinates: [2.330526, 48.842813], description: "MK2 Parnasse" },
{ coordinates: [2.352129, 48.847530], description: "Le Grand Action" },
{ coordinates: [2.353602, 48.858676], description: "Luminor Hotel de Ville" },
{ coordinates: [2.344856, 48.871370], description: "Max Linder Panorama" },
{ coordinates: [2.342385, 48.847488], description: "Cinéma du Panthéon" },
{ coordinates: [2.349555, 48.841300], description: "Épée de bois" },
{ coordinates: [2.375488, 48.832448], description: "MK2 Bibliothèque" },
{ coordinates: [2.352312, 48.861584], description: "MK2 Beaubourg" }
];
locations.forEach(function (location) {
var el = document.createElement('div');
el.className = 'custom-marker';
var popup = new mapboxgl.Popup({ offset: 25 }).setText(location.description);
new mapboxgl.Marker(el)
.setLngLat(location.coordinates)
.setPopup(popup)
.addTo(map);
});
</script>
{% endblock %}

199
templates/jours/jour1.html Normal file
View file

@ -0,0 +1,199 @@
{% extends 'base.html' %}
{% block head %}
{% endblock %}
{% block body %}
<a href="#headerTop">
<div class="goTop">
<p>🍿</p>
</div>
</a>
<!--
<svg class="background_svg" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="b" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feGaussianBlur in="SourceGraphic" stdDeviation="50" />
</filter>
<filter id="a" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feFlood flood-color="#fff" result="neutral-gray" />
<feTurbulence type="fractalNoise" baseFrequency="2.5" numOctaves="100" stitchTiles="stitch"
result="noise" />
<feColorMatrix in="noise" type="saturate" values="0" result="destaturatedNoise" />
<feComponentTransfer in="desaturatedNoise" result="theNoise">
<feFuncA type="table" tableValues="0 0 0.1 0" />
</feComponentTransfer>
<feBlend in="SourceGraphic" in2="theNoise" mode="soft-light" result="noisy-image" />
</filter>
<radialGradient id="c" cx="50%" cy="50%" r="50%" fx="20%" fy="40%">
<stop offset="0%" stop-color="#444cf7" />
<stop offset="100%" stop-color="rgba(194,68,247,0.2)" />
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#fff" />
<g filter="url(#a)">
<g filter="url(#b)">
<svg width="800" height="800" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"
transform="translate(140.997 117.996)">
<path fill="url(#c)"
d="M993.5 849.5Q888 1099 622 1061T226.5 811.5Q97 600 220 377t362.5-192q239.5 31 378 223t33 441.5Z" />
</svg>
</g>
</g>
</svg>
-->
<img src="../static/images/background.png" class="background_svg">
<div id="map"></div>
<div class="planning">
<div class="container_titrePlanning">
<div class="contenu_edt">
<h2 class="txt_edt">Emploi du temps</h2>
<div class="calendrier">
<a href="{{ url_for('home')}}">
<div class="date {% if page_actuelle == 'home' %}date-selectionne{% endif %}">
<p class="jour">{{date.jour1.jour}}</p>
<p class="chiffre">{{date.jour1.chiffre}}</p>
<p class="mois">{{date.jour1.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour1')}}">
<div class="date {% if page_actuelle == 'jour1' %}date-selectionne{% endif %}">
<p class="jour">{{date.jour2.jour}}</p>
<p class="chiffre">{{date.jour2.chiffre}}</p>
<p class="mois">{{date.jour2.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour2')}}">
<div class="date {% if page_actuelle == 'jour2' %}date-selectionne{% endif %}">
<p class="jour">{{date.jour3.jour}}</p>
<p class="chiffre">{{date.jour3.chiffre}}</p>
<p class="mois">{{date.jour3.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour3')}}">
<div class="date {% if page_actuelle == 'jour3' %}date-selectionne{% endif %}">
<p class="jour">{{date.jour4.jour}}</p>
<p class="chiffre">{{date.jour4.chiffre}}</p>
<p class="mois">{{date.jour4.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour4')}}">
<div class="date {% if page_actuelle == 'jour4' %}date-selectionne{% endif %}">
<p class="jour">{{date.jour5.jour}}</p>
<p class="chiffre">{{date.jour5.chiffre}}</p>
<p class="mois">{{date.jour5.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour5')}}">
<div class="date {% if page_actuelle == 'jour5' %}date-selectionne{% endif %}">
<p class="jour">{{date.jour6.jour}}</p>
<p class="chiffre">{{date.jour6.chiffre}}</p>
<p class="mois">{{date.jour6.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour6')}}">
<div class="date {% if page_actuelle == 'jour6' %}date-selectionne{% endif %}">
<p class="jour">{{date.jour7.jour}}</p>
<p class="chiffre">{{date.jour7.chiffre}}</p>
<p class="mois">{{date.jour7.mois}}</p>
</div>
</a>
</div>
</div>
<div class="line"></div>
</div>
{% for film in films %}
<div class="container_infoFilm">
<img src={{film.affiche}} class="affiche" />
<div class="infoFilm">
<div class="blur-background"></div>
<div>
<h3 class="titreFilm">{{film.titre}}</h3>
<div class="info-content">
<p class="realisateur">Réalisateur : {{film.realisateur}}</p>
<p class="casting">Casting : {% for acteur in film.casting %}{{acteur}}, {% endfor %}</p>
<p class="genre">Genre : {% for genre in film.genres %}{{genre}}, {% endfor %}</p>
<p class="duree">Durée : {{film.duree.heure}}h{{film.duree.minute}}</p>
</div>
<div class="synopsis_container">
<p class="synopsis">
{{film.synopsis}}
</p>
</div>
</div>
</div>
</div>
<div style="height: 10px;"></div>
{% for horaire in film.horaires %}
<div class="seance_container">
<div class="cinema">
<p>{{horaire.cinema}}</p>
</div>
<div class="horaires_container">
{% for seance in horaire.seances %}
<div class="horaire">
<p>{{seance}}</p>
</div>
{% endfor %}
</div>
</div>
<div class="responsive-petite-div"></div>
{% endfor %}
<div class="responsive-div"></div>
{% endfor %}
</div>
<script>
mapboxgl.accessToken = '###';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [2.3522, 48.8566],
zoom: 12
});
map.addControl(new mapboxgl.NavigationControl());
var locations = [
{ coordinates: [2.348973, 48.848363], description: "Écoles Cinéma club" },
{ coordinates: [2.546596, 48.840113], description: "UGC Ciné Cité Noisy-le-Grand" },
{ coordinates: [2.343014, 48.849777], description: "UGC Ciné Cité les Halles" },
{ coordinates: [2.342790, 48.849510], description: "Reflet Medicis" },
{ coordinates: [2.342790, 48.849510], description: "Fimothèque du quartier Latin" },
{ coordinates: [2.343223, 48.849980], description: "Le Champo" },
{ coordinates: [2.330526, 48.842813], description: "MK2 Parnasse" },
{ coordinates: [2.352129, 48.847530], description: "Le Grand Action" },
{ coordinates: [2.353602, 48.858676], description: "Luminor Hotel de Ville" },
{ coordinates: [2.344856, 48.871370], description: "Max Linder Panorama" },
{ coordinates: [2.342385, 48.847488], description: "Cinéma du Panthéon" },
{ coordinates: [2.349555, 48.841300], description: "Épée de bois" },
{ coordinates: [2.375488, 48.832448], description: "MK2 Bibliothèque" },
{ coordinates: [2.352312, 48.861584], description: "MK2 Beaubourg" }
];
locations.forEach(function (location) {
var el = document.createElement('div');
el.className = 'custom-marker';
var popup = new mapboxgl.Popup({ offset: 25 }).setText(location.description);
new mapboxgl.Marker(el)
.setLngLat(location.coordinates)
.setPopup(popup)
.addTo(map);
});
</script>
{% endblock %}

198
templates/jours/jour2.html Normal file
View file

@ -0,0 +1,198 @@
{% extends 'base.html' %}
{% block head %}
{% endblock %}
{% block body %}
<a href="#headerTop">
<div class="goTop">
<p>🍿</p>
</div>
</a>
<!--
<svg class="background_svg" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="b" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feGaussianBlur in="SourceGraphic" stdDeviation="50" />
</filter>
<filter id="a" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feFlood flood-color="#fff" result="neutral-gray" />
<feTurbulence type="fractalNoise" baseFrequency="2.5" numOctaves="100" stitchTiles="stitch"
result="noise" />
<feColorMatrix in="noise" type="saturate" values="0" result="destaturatedNoise" />
<feComponentTransfer in="desaturatedNoise" result="theNoise">
<feFuncA type="table" tableValues="0 0 0.1 0" />
</feComponentTransfer>
<feBlend in="SourceGraphic" in2="theNoise" mode="soft-light" result="noisy-image" />
</filter>
<radialGradient id="c" cx="50%" cy="50%" r="50%" fx="20%" fy="40%">
<stop offset="0%" stop-color="#444cf7" />
<stop offset="100%" stop-color="rgba(194,68,247,0.2)" />
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#fff" />
<g filter="url(#a)">
<g filter="url(#b)">
<svg width="800" height="800" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"
transform="translate(140.997 117.996)">
<path fill="url(#c)"
d="M993.5 849.5Q888 1099 622 1061T226.5 811.5Q97 600 220 377t362.5-192q239.5 31 378 223t33 441.5Z" />
</svg>
</g>
</g>
</svg>
-->
<img src="../static/images/background.png" class="background_svg">
<div id="map"></div>
<div class="planning">
<div class="container_titrePlanning">
<div class="contenu_edt">
<h2 class="txt_edt">Emploi du temps</h2>
<div class="calendrier">
<a href="{{ url_for('home')}}">
<div class="date">
<p class="jour">{{date.jour1.jour}}</p>
<p class="chiffre">{{date.jour1.chiffre}}</p>
<p class="mois">{{date.jour1.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour1')}}">
<div class="date">
<p class="jour">{{date.jour2.jour}}</p>
<p class="chiffre">{{date.jour2.chiffre}}</p>
<p class="mois">{{date.jour2.mois}}</p>
</div>
</a>
<a>
<div class="date-selectionne">
<p class="jour">{{date.jour3.jour}}</p>
<p class="chiffre">{{date.jour3.chiffre}}</p>
<p class="mois">{{date.jour3.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour3')}}">
<div class="date">
<p class="jour">{{date.jour4.jour}}</p>
<p class="chiffre">{{date.jour4.chiffre}}</p>
<p class="mois">{{date.jour4.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour4')}}">
<div class="date">
<p class="jour">{{date.jour5.jour}}</p>
<p class="chiffre">{{date.jour5.chiffre}}</p>
<p class="mois">{{date.jour5.mois}}</p>
</div>
</a>
<a>
<div class="date">
<p class="jour">{{date.jour6.jour}}</p>
<p class="chiffre">{{date.jour6.chiffre}}</p>
<p class="mois">{{date.jour6.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour6')}}">
<div class="date">
<p class="jour">{{date.jour7.jour}}</p>
<p class="chiffre">{{date.jour7.chiffre}}</p>
<p class="mois">{{date.jour7.mois}}</p>
</div>
</a>
</div>
</div>
<div class="line"></div>
</div>
{% for film in films %}
<div class="container_infoFilm">
<img src={{film.affiche}} class="affiche" />
<div class="infoFilm">
<div class="blur-background"></div>
<div>
<h3 class="titreFilm">{{film.titre}}</h3>
<div class="info-content">
<p class="realisateur">Réalisateur : {{film.realisateur}}</p>
<p class="casting">Casting : {% for acteur in film.casting %}{{acteur}}, {% endfor %}</p>
<p class="genre">Genre : {% for genre in film.genres %}{{genre}}, {% endfor %}</p>
<p class="duree">Durée : {{film.duree.heure}}h{{film.duree.minute}}</p>
</div>
<div class="synopsis_container">
<p class="synopsis">
{{film.synopsis}}
</p>
</div>
</div>
</div>
</div>
<div style="height: 10px;"></div>
{% for horaire in film.horaires %}
<div class="seance_container">
<div class="cinema">
<p>{{horaire.cinema}}</p>
</div>
<div class="horaires_container">
{% for seance in horaire.seances %}
<div class="horaire">
<p>{{seance}}</p>
</div>
{% endfor %}
</div>
</div>
<div class="responsive-petite-div"></div>
{% endfor %}
<div class="responsive-div"></div>
{% endfor %}
</div>
<script>
mapboxgl.accessToken = '###';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [2.3522, 48.8566],
zoom: 12
});
map.addControl(new mapboxgl.NavigationControl());
var locations = [
{ coordinates: [2.348973, 48.848363], description: "Écoles Cinéma club" },
{ coordinates: [2.546596, 48.840113], description: "UGC Ciné Cité Noisy-le-Grand" },
{ coordinates: [2.343014, 48.849777], description: "UGC Ciné Cité les Halles" },
{ coordinates: [2.342790, 48.849510], description: "Reflet Medicis" },
{ coordinates: [2.342790, 48.849510], description: "Fimothèque du quartier Latin" },
{ coordinates: [2.343223, 48.849980], description: "Le Champo" },
{ coordinates: [2.330526, 48.842813], description: "MK2 Parnasse" },
{ coordinates: [2.352129, 48.847530], description: "Le Grand Action" },
{ coordinates: [2.353602, 48.858676], description: "Luminor Hotel de Ville" },
{ coordinates: [2.344856, 48.871370], description: "Max Linder Panorama" },
{ coordinates: [2.342385, 48.847488], description: "Cinéma du Panthéon" },
{ coordinates: [2.349555, 48.841300], description: "Épée de bois" },
{ coordinates: [2.375488, 48.832448], description: "MK2 Bibliothèque" },
{ coordinates: [2.352312, 48.861584], description: "MK2 Beaubourg" }
];
locations.forEach(function (location) {
var el = document.createElement('div');
el.className = 'custom-marker';
var popup = new mapboxgl.Popup({ offset: 25 }).setText(location.description);
new mapboxgl.Marker(el)
.setLngLat(location.coordinates)
.setPopup(popup)
.addTo(map);
});
</script>
{% endblock %}

196
templates/jours/jour3.html Normal file
View file

@ -0,0 +1,196 @@
{% extends 'base.html' %}
{% block head %}
{% endblock %}
{% block body %}
<a href="#headerTop">
<div class="goTop">
<p>🍿</p>
</div>
</a>
<!--
<svg class="background_svg" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="b" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feGaussianBlur in="SourceGraphic" stdDeviation="50" />
</filter>
<filter id="a" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feFlood flood-color="#fff" result="neutral-gray" />
<feTurbulence type="fractalNoise" baseFrequency="2.5" numOctaves="100" stitchTiles="stitch"
result="noise" />
<feColorMatrix in="noise" type="saturate" values="0" result="destaturatedNoise" />
<feComponentTransfer in="desaturatedNoise" result="theNoise">
<feFuncA type="table" tableValues="0 0 0.1 0" />
</feComponentTransfer>
<feBlend in="SourceGraphic" in2="theNoise" mode="soft-light" result="noisy-image" />
</filter>
<radialGradient id="c" cx="50%" cy="50%" r="50%" fx="20%" fy="40%">
<stop offset="0%" stop-color="#444cf7" />
<stop offset="100%" stop-color="rgba(194,68,247,0.2)" />
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#fff" />
<g filter="url(#a)">
<g filter="url(#b)">
<svg width="800" height="800" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"
transform="translate(140.997 117.996)">
<path fill="url(#c)"
d="M993.5 849.5Q888 1099 622 1061T226.5 811.5Q97 600 220 377t362.5-192q239.5 31 378 223t33 441.5Z" />
</svg>
</g>
</g>
</svg>
-->
<img src="../static/images/background.png" class="background_svg">
<div id="map"></div>
<div class="planning">
<div class="container_titrePlanning">
<div class="contenu_edt">
<h2 class="txt_edt">Emploi du temps</h2>
<div class="calendrier">
<a href="{{ url_for('home')}}">
<div class="date">
<p class="jour">{{date.jour1.jour}}</p>
<p class="chiffre">{{date.jour1.chiffre}}</p>
<p class="mois">{{date.jour1.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour1')}}">
<div class="date">
<p class="jour">{{date.jour2.jour}}</p>
<p class="chiffre">{{date.jour2.chiffre}}</p>
<p class="mois">{{date.jour2.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour2')}}">
<div class="date">
<p class="jour">{{date.jour3.jour}}</p>
<p class="chiffre">{{date.jour3.chiffre}}</p>
<p class="mois">{{date.jour3.mois}}</p>
</div>
</a>
<a>
<div class="date-selectionne">
<p class="jour">{{date.jour4.jour}}</p>
<p class="chiffre">{{date.jour4.chiffre}}</p>
<p class="mois">{{date.jour4.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour4')}}">
<div class="date">
<p class="jour">{{date.jour5.jour}}</p>
<p class="chiffre">{{date.jour5.chiffre}}</p>
<p class="mois">{{date.jour5.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour5')}}">
<div class="date">
<p class="jour">{{date.jour6.jour}}</p>
<p class="chiffre">{{date.jour6.chiffre}}</p>
<p class="mois">{{date.jour6.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour6')}}">
<div class="date">
<p class="jour">{{date.jour7.jour}}</p>
<p class="chiffre">{{date.jour7.chiffre}}</p>
<p class="mois">{{date.jour7.mois}}</p>
</div>
</a>
</div>
</div>
<div class="line"></div>
</div>
{% for film in films %}
<div class="container_infoFilm">
<img src={{film.affiche}} class="affiche" />
<div class="infoFilm">
<div class="blur-background"></div>
<div>
<h3 class="titreFilm">{{film.titre}}</h3>
<div class="info-content">
<p class="realisateur">Réalisateur : {{film.realisateur}}</p>
<p class="casting">Casting : {% for acteur in film.casting %}{{acteur}}, {% endfor %}</p>
<p class="genre">Genre : {% for genre in film.genres %}{{genre}}, {% endfor %}</p>
<p class="duree">Durée : {{film.duree.heure}}h{{film.duree.minute}}</p>
</div>
<div class="synopsis_container">
<p class="synopsis">
{{film.synopsis}}
</p>
</div>
</div>
</div>
</div>
<div style="height: 10px;"></div>
{% for horaire in film.horaires %}
<div class="seance_container">
<div class="cinema">
<p>{{horaire.cinema}}</p>
</div>
<div class="horaires_container">
{% for seance in horaire.seances %}
<div class="horaire">
<p>{{seance}}</p>
</div>
{% endfor %}
</div>
</div>
<div class="responsive-petite-div"></div>
{% endfor %}
<div class="responsive-div"></div>
{% endfor %}
</div>
<script>
mapboxgl.accessToken = '###';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [2.3522, 48.8566],
zoom: 12
});
map.addControl(new mapboxgl.NavigationControl());
var locations = [
{ coordinates: [2.348973, 48.848363], description: "Écoles Cinéma club" },
{ coordinates: [2.546596, 48.840113], description: "UGC Ciné Cité Noisy-le-Grand" },
{ coordinates: [2.343014, 48.849777], description: "UGC Ciné Cité les Halles" },
{ coordinates: [2.342790, 48.849510], description: "Reflet Medicis" },
{ coordinates: [2.342790, 48.849510], description: "Fimothèque du quartier Latin" },
{ coordinates: [2.343223, 48.849980], description: "Le Champo" },
{ coordinates: [2.330526, 48.842813], description: "MK2 Parnasse" },
{ coordinates: [2.352129, 48.847530], description: "Le Grand Action" },
{ coordinates: [2.353602, 48.858676], description: "Luminor Hotel de Ville" },
{ coordinates: [2.344856, 48.871370], description: "Max Linder Panorama" },
{ coordinates: [2.342385, 48.847488], description: "Cinéma du Panthéon" },
{ coordinates: [2.349555, 48.841300], description: "Épée de bois" },
{ coordinates: [2.375488, 48.832448], description: "MK2 Bibliothèque" },
{ coordinates: [2.352312, 48.861584], description: "MK2 Beaubourg" }
];
locations.forEach(function (location) {
var el = document.createElement('div');
el.className = 'custom-marker';
var popup = new mapboxgl.Popup({ offset: 25 }).setText(location.description);
new mapboxgl.Marker(el)
.setLngLat(location.coordinates)
.setPopup(popup)
.addTo(map);
});
</script>
{% endblock %}

196
templates/jours/jour4.html Normal file
View file

@ -0,0 +1,196 @@
{% extends 'base.html' %}
{% block head %}
{% endblock %}
{% block body %}
<a href="#headerTop">
<div class="goTop">
<p>🍿</p>
</div>
</a>
<!--
<svg class="background_svg" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="b" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feGaussianBlur in="SourceGraphic" stdDeviation="50" />
</filter>
<filter id="a" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feFlood flood-color="#fff" result="neutral-gray" />
<feTurbulence type="fractalNoise" baseFrequency="2.5" numOctaves="100" stitchTiles="stitch"
result="noise" />
<feColorMatrix in="noise" type="saturate" values="0" result="destaturatedNoise" />
<feComponentTransfer in="desaturatedNoise" result="theNoise">
<feFuncA type="table" tableValues="0 0 0.1 0" />
</feComponentTransfer>
<feBlend in="SourceGraphic" in2="theNoise" mode="soft-light" result="noisy-image" />
</filter>
<radialGradient id="c" cx="50%" cy="50%" r="50%" fx="20%" fy="40%">
<stop offset="0%" stop-color="#444cf7" />
<stop offset="100%" stop-color="rgba(194,68,247,0.2)" />
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#fff" />
<g filter="url(#a)">
<g filter="url(#b)">
<svg width="800" height="800" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"
transform="translate(140.997 117.996)">
<path fill="url(#c)"
d="M993.5 849.5Q888 1099 622 1061T226.5 811.5Q97 600 220 377t362.5-192q239.5 31 378 223t33 441.5Z" />
</svg>
</g>
</g>
</svg>
-->
<img src="../static/images/background.png" class="background_svg">
<div id="map"></div>
<div class="planning">
<div class="container_titrePlanning">
<div class="contenu_edt">
<h2 class="txt_edt">Emploi du temps</h2>
<div class="calendrier">
<a href="{{ url_for('home')}}">
<div class="date">
<p class="jour">{{date.jour1.jour}}</p>
<p class="chiffre">{{date.jour1.chiffre}}</p>
<p class="mois">{{date.jour1.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour1')}}">
<div class="date">
<p class="jour">{{date.jour2.jour}}</p>
<p class="chiffre">{{date.jour2.chiffre}}</p>
<p class="mois">{{date.jour2.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour2')}}">
<div class="date">
<p class="jour">{{date.jour3.jour}}</p>
<p class="chiffre">{{date.jour3.chiffre}}</p>
<p class="mois">{{date.jour3.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour2')}}">
<div class="date">
<p class="jour">{{date.jour4.jour}}</p>
<p class="chiffre">{{date.jour4.chiffre}}</p>
<p class="mois">{{date.jour4.mois}}</p>
</div>
</a>
<a>
<div class="date-selectionne">
<p class="jour">{{date.jour5.jour}}</p>
<p class="chiffre">{{date.jour5.chiffre}}</p>
<p class="mois">{{date.jour5.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour5')}}">
<div class="date">
<p class="jour">{{date.jour6.jour}}</p>
<p class="chiffre">{{date.jour6.chiffre}}</p>
<p class="mois">{{date.jour6.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour6')}}">
<div class="date">
<p class="jour">{{date.jour7.jour}}</p>
<p class="chiffre">{{date.jour7.chiffre}}</p>
<p class="mois">{{date.jour7.mois}}</p>
</div>
</a>
</div>
</div>
<div class="line"></div>
</div>
{% for film in films %}
<div class="container_infoFilm">
<img src={{film.affiche}} class="affiche" />
<div class="infoFilm">
<div class="blur-background"></div>
<div>
<h3 class="titreFilm">{{film.titre}}</h3>
<div class="info-content">
<p class="realisateur">Réalisateur : {{film.realisateur}}</p>
<p class="casting">Casting : {% for acteur in film.casting %}{{acteur}}, {% endfor %}</p>
<p class="genre">Genre : {% for genre in film.genres %}{{genre}}, {% endfor %}</p>
<p class="duree">Durée : {{film.duree.heure}}h{{film.duree.minute}}</p>
</div>
<div class="synopsis_container">
<p class="synopsis">
{{film.synopsis}}
</p>
</div>
</div>
</div>
</div>
<div style="height: 10px;"></div>
{% for horaire in film.horaires %}
<div class="seance_container">
<div class="cinema">
<p>{{horaire.cinema}}</p>
</div>
<div class="horaires_container">
{% for seance in horaire.seances %}
<div class="horaire">
<p>{{seance}}</p>
</div>
{% endfor %}
</div>
</div>
<div class="responsive-petite-div"></div>
{% endfor %}
<div class="responsive-div"></div>
{% endfor %}
</div>
<script>
mapboxgl.accessToken = '###';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [2.3522, 48.8566],
zoom: 12
});
map.addControl(new mapboxgl.NavigationControl());
var locations = [
{ coordinates: [2.348973, 48.848363], description: "Écoles Cinéma club" },
{ coordinates: [2.546596, 48.840113], description: "UGC Ciné Cité Noisy-le-Grand" },
{ coordinates: [2.343014, 48.849777], description: "UGC Ciné Cité les Halles" },
{ coordinates: [2.342790, 48.849510], description: "Reflet Medicis" },
{ coordinates: [2.342790, 48.849510], description: "Fimothèque du quartier Latin" },
{ coordinates: [2.343223, 48.849980], description: "Le Champo" },
{ coordinates: [2.330526, 48.842813], description: "MK2 Parnasse" },
{ coordinates: [2.352129, 48.847530], description: "Le Grand Action" },
{ coordinates: [2.353602, 48.858676], description: "Luminor Hotel de Ville" },
{ coordinates: [2.344856, 48.871370], description: "Max Linder Panorama" },
{ coordinates: [2.342385, 48.847488], description: "Cinéma du Panthéon" },
{ coordinates: [2.349555, 48.841300], description: "Épée de bois" },
{ coordinates: [2.375488, 48.832448], description: "MK2 Bibliothèque" },
{ coordinates: [2.352312, 48.861584], description: "MK2 Beaubourg" }
];
locations.forEach(function (location) {
var el = document.createElement('div');
el.className = 'custom-marker';
var popup = new mapboxgl.Popup({ offset: 25 }).setText(location.description);
new mapboxgl.Marker(el)
.setLngLat(location.coordinates)
.setPopup(popup)
.addTo(map);
});
</script>
{% endblock %}

197
templates/jours/jour5.html Normal file
View file

@ -0,0 +1,197 @@
{% extends 'base.html' %}
{% block head %}
{% endblock %}
{% block body %}
<a href="#headerTop">
<div class="goTop">
<p>🍿</p>
</div>
</a>
<!--
<svg class="background_svg" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="b" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feGaussianBlur in="SourceGraphic" stdDeviation="50" />
</filter>
<filter id="a" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feFlood flood-color="#fff" result="neutral-gray" />
<feTurbulence type="fractalNoise" baseFrequency="2.5" numOctaves="100" stitchTiles="stitch"
result="noise" />
<feColorMatrix in="noise" type="saturate" values="0" result="destaturatedNoise" />
<feComponentTransfer in="desaturatedNoise" result="theNoise">
<feFuncA type="table" tableValues="0 0 0.1 0" />
</feComponentTransfer>
<feBlend in="SourceGraphic" in2="theNoise" mode="soft-light" result="noisy-image" />
</filter>
<radialGradient id="c" cx="50%" cy="50%" r="50%" fx="20%" fy="40%">
<stop offset="0%" stop-color="#444cf7" />
<stop offset="100%" stop-color="rgba(194,68,247,0.2)" />
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#fff" />
<g filter="url(#a)">
<g filter="url(#b)">
<svg width="800" height="800" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"
transform="translate(140.997 117.996)">
<path fill="url(#c)"
d="M993.5 849.5Q888 1099 622 1061T226.5 811.5Q97 600 220 377t362.5-192q239.5 31 378 223t33 441.5Z" />
</svg>
</g>
</g>
</svg>
-->
<img src="../static/images/background.png" class="background_svg">
<div id="map"></div>
<div class="planning">
<div class="container_titrePlanning">
<div class="contenu_edt">
<h2 class="txt_edt">Emploi du temps</h2>
<div class="calendrier">
<a href="{{ url_for('home')}}">
<div class="date">
<p class="jour">{{date.jour1.jour}}</p>
<p class="chiffre">{{date.jour1.chiffre}}</p>
<p class="mois">{{date.jour1.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour1')}}">
<div class="date">
<p class="jour">{{date.jour2.jour}}</p>
<p class="chiffre">{{date.jour2.chiffre}}</p>
<p class="mois">{{date.jour2.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour2')}}">
<div class="date">
<p class="jour">{{date.jour3.jour}}</p>
<p class="chiffre">{{date.jour3.chiffre}}</p>
<p class="mois">{{date.jour3.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour3')}}">
<div class="date">
<p class="jour">{{date.jour4.jour}}</p>
<p class="chiffre">{{date.jour4.chiffre}}</p>
<p class="mois">{{date.jour4.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour4')}}">
<div class="date">
<p class="jour">{{date.jour5.jour}}</p>
<p class="chiffre">{{date.jour5.chiffre}}</p>
<p class="mois">{{date.jour5.mois}}</p>
</div>
</a>
<a>
<div class="date-selectionne">
<p class="jour">{{date.jour6.jour}}</p>
<p class="chiffre">{{date.jour6.chiffre}}</p>
<p class="mois">{{date.jour6.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour6')}}">
<div class="date">
<p class="jour">{{date.jour7.jour}}</p>
<p class="chiffre">{{date.jour7.chiffre}}</p>
<p class="mois">{{date.jour7.mois}}</p>
</div>
</a>
</div>
</div>
<div class="line"></div>
</div>
{% for film in films %}
<div class="container_infoFilm">
<img src={{film.affiche}} class="affiche" />
<div class="infoFilm">
<div class="blur-background"></div>
<div>
<h3 class="titreFilm">{{film.titre}}</h3>
<div class="info-content">
<p class="realisateur">Réalisateur : {{film.realisateur}}</p>
<p class="casting">Casting : {% for acteur in film.casting %}{{acteur}}, {% endfor %}</p>
<p class="genre">Genre : {% for genre in film.genres %}{{genre}}, {% endfor %}</p>
<p class="duree">Durée : {{film.duree.heure}}h{{film.duree.minute}}</p>
</div>
<div class="synopsis_container">
<p class="synopsis">
{{film.synopsis}}
</p>
</div>
</div>
</div>
</div>
<div style="height: 10px;"></div>
{% for horaire in film.horaires %}
<div class="seance_container">
<div class="cinema">
<p>{{horaire.cinema}}</p>
</div>
<div class="horaires_container">
{% for seance in horaire.seances %}
<div class="horaire">
<p>{{seance}}</p>
</div>
{% endfor %}
</div>
</div>
<div class="responsive-petite-div"></div>
{% endfor %}
<div class="responsive-div"></div>
{% endfor %}
</div>
<script>
mapboxgl.accessToken = '###';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [2.3522, 48.8566],
zoom: 12
});
map.addControl(new mapboxgl.NavigationControl());
var locations = [
{ coordinates: [2.348973, 48.848363], description: "Écoles Cinéma club" },
{ coordinates: [2.546596, 48.840113], description: "UGC Ciné Cité Noisy-le-Grand" },
{ coordinates: [2.343014, 48.849777], description: "UGC Ciné Cité les Halles" },
{ coordinates: [2.342790, 48.849510], description: "Reflet Medicis" },
{ coordinates: [2.342790, 48.849510], description: "Fimothèque du quartier Latin" },
{ coordinates: [2.343223, 48.849980], description: "Le Champo" },
{ coordinates: [2.330526, 48.842813], description: "MK2 Parnasse" },
{ coordinates: [2.352129, 48.847530], description: "Le Grand Action" },
{ coordinates: [2.353602, 48.858676], description: "Luminor Hotel de Ville" },
{ coordinates: [2.344856, 48.871370], description: "Max Linder Panorama" },
{ coordinates: [2.342385, 48.847488], description: "Cinéma du Panthéon" },
{ coordinates: [2.349555, 48.841300], description: "Épée de bois" },
{ coordinates: [2.375488, 48.832448], description: "MK2 Bibliothèque" },
{ coordinates: [2.352312, 48.861584], description: "MK2 Beaubourg" }
];
locations.forEach(function (location) {
var el = document.createElement('div');
el.className = 'custom-marker';
var popup = new mapboxgl.Popup({ offset: 25 }).setText(location.description);
new mapboxgl.Marker(el)
.setLngLat(location.coordinates)
.setPopup(popup)
.addTo(map);
});
</script>
{% endblock %}

197
templates/jours/jour6.html Normal file
View file

@ -0,0 +1,197 @@
{% extends 'base.html' %}
{% block head %}
{% endblock %}
{% block body %}
<a href="#headerTop">
<div class="goTop">
<p>🍿</p>
</div>
</a>
<!--
<svg class="background_svg" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="b" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feGaussianBlur in="SourceGraphic" stdDeviation="50" />
</filter>
<filter id="a" x="-500" y="-500" width="2000" height="2000" filterUnits="userSpaceOnUse">
<feFlood flood-color="#fff" result="neutral-gray" />
<feTurbulence type="fractalNoise" baseFrequency="2.5" numOctaves="100" stitchTiles="stitch"
result="noise" />
<feColorMatrix in="noise" type="saturate" values="0" result="destaturatedNoise" />
<feComponentTransfer in="desaturatedNoise" result="theNoise">
<feFuncA type="table" tableValues="0 0 0.1 0" />
</feComponentTransfer>
<feBlend in="SourceGraphic" in2="theNoise" mode="soft-light" result="noisy-image" />
</filter>
<radialGradient id="c" cx="50%" cy="50%" r="50%" fx="20%" fy="40%">
<stop offset="0%" stop-color="#444cf7" />
<stop offset="100%" stop-color="rgba(194,68,247,0.2)" />
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#fff" />
<g filter="url(#a)">
<g filter="url(#b)">
<svg width="800" height="800" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"
transform="translate(140.997 117.996)">
<path fill="url(#c)"
d="M993.5 849.5Q888 1099 622 1061T226.5 811.5Q97 600 220 377t362.5-192q239.5 31 378 223t33 441.5Z" />
</svg>
</g>
</g>
</svg>
-->
<img src="../static/images/background.png" class="background_svg">
<div id="map"></div>
<div class="planning">
<div class="container_titrePlanning">
<div class="contenu_edt">
<h2 class="txt_edt">Emploi du temps</h2>
<div class="calendrier">
<a href="{{ url_for('home')}}">
<div class="date">
<p class="jour">{{date.jour1.jour}}</p>
<p class="chiffre">{{date.jour1.chiffre}}</p>
<p class="mois">{{date.jour1.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour1')}}">
<div class="date">
<p class="jour">{{date.jour2.jour}}</p>
<p class="chiffre">{{date.jour2.chiffre}}</p>
<p class="mois">{{date.jour2.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour2')}}">
<div class="date">
<p class="jour">{{date.jour3.jour}}</p>
<p class="chiffre">{{date.jour3.chiffre}}</p>
<p class="mois">{{date.jour3.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour3')}}">
<div class="date">
<p class="jour">{{date.jour4.jour}}</p>
<p class="chiffre">{{date.jour4.chiffre}}</p>
<p class="mois">{{date.jour4.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour4')}}">
<div class="date">
<p class="jour">{{date.jour5.jour}}</p>
<p class="chiffre">{{date.jour5.chiffre}}</p>
<p class="mois">{{date.jour5.mois}}</p>
</div>
</a>
<a href="{{ url_for('jour5')}}">
<div class="date">
<p class="jour">{{date.jour6.jour}}</p>
<p class="chiffre">{{date.jour6.chiffre}}</p>
<p class="mois">{{date.jour6.mois}}</p>
</div>
</a>
<a>
<div class="date-selectionne">
<p class="jour">{{date.jour7.jour}}</p>
<p class="chiffre">{{date.jour7.chiffre}}</p>
<p class="mois">{{date.jour7.mois}}</p>
</div>
</a>
</div>
</div>
<div class="line"></div>
</div>
{% for film in films %}
<div class="container_infoFilm">
<img src={{film.affiche}} class="affiche" />
<div class="infoFilm">
<div class="blur-background"></div>
<div>
<h3 class="titreFilm">{{film.titre}}</h3>
<div class="info-content">
<p class="realisateur">Réalisateur : {{film.realisateur}}</p>
<p class="casting">Casting : {% for acteur in film.casting %}{{acteur}}, {% endfor %}</p>
<p class="genre">Genre : {% for genre in film.genres %}{{genre}}, {% endfor %}</p>
<p class="duree">Durée : {{film.duree.heure}}h{{film.duree.minute}}</p>
</div>
<div class="synopsis_container">
<p class="synopsis">
{{film.synopsis}}
</p>
</div>
</div>
</div>
</div>
<div style="height: 10px;"></div>
{% for horaire in film.horaires %}
<div class="seance_container">
<div class="cinema">
<p>{{horaire.cinema}}</p>
</div>
<div class="horaires_container">
{% for seance in horaire.seances %}
<div class="horaire">
<p>{{seance}}</p>
</div>
{% endfor %}
</div>
</div>
<div class="responsive-petite-div"></div>
{% endfor %}
<div class="responsive-div"></div>
{% endfor %}
</div>
<script>
mapboxgl.accessToken = '###';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [2.3522, 48.8566],
zoom: 12
});
map.addControl(new mapboxgl.NavigationControl());
var locations = [
{ coordinates: [2.348973, 48.848363], description: "Écoles Cinéma club" },
{ coordinates: [2.546596, 48.840113], description: "UGC Ciné Cité Noisy-le-Grand" },
{ coordinates: [2.343014, 48.849777], description: "UGC Ciné Cité les Halles" },
{ coordinates: [2.342790, 48.849510], description: "Reflet Medicis" },
{ coordinates: [2.342790, 48.849510], description: "Fimothèque du quartier Latin" },
{ coordinates: [2.343223, 48.849980], description: "Le Champo" },
{ coordinates: [2.330526, 48.842813], description: "MK2 Parnasse" },
{ coordinates: [2.352129, 48.847530], description: "Le Grand Action" },
{ coordinates: [2.353602, 48.858676], description: "Luminor Hotel de Ville" },
{ coordinates: [2.344856, 48.871370], description: "Max Linder Panorama" },
{ coordinates: [2.342385, 48.847488], description: "Cinéma du Panthéon" },
{ coordinates: [2.349555, 48.841300], description: "Épée de bois" },
{ coordinates: [2.375488, 48.832448], description: "MK2 Bibliothèque" },
{ coordinates: [2.352312, 48.861584], description: "MK2 Beaubourg" }
];
locations.forEach(function (location) {
var el = document.createElement('div');
el.className = 'custom-marker';
var popup = new mapboxgl.Popup({ offset: 25 }).setText(location.description);
new mapboxgl.Marker(el)
.setLngLat(location.coordinates)
.setPopup(popup)
.addTo(map);
});
</script>
{% endblock %}