2026-03-30 14:47:09 +02:00
|
|
|
export function buildURL(query, limit = 20, offset = 0, filters = {}) {
|
2026-03-18 12:45:44 +01:00
|
|
|
let url =
|
2026-03-18 14:54:01 +01:00
|
|
|
"https://data.enseignementsup-recherche.gouv.fr/api/explore/v2.1/catalog/datasets/fr-esr-parcoursup/records?"
|
|
|
|
|
|
|
|
|
|
url += "limit=" + limit
|
|
|
|
|
url += "&offset=" + offset
|
2026-03-18 12:45:44 +01:00
|
|
|
|
2026-03-30 14:47:09 +02:00
|
|
|
var conditions = []
|
|
|
|
|
|
2026-03-18 12:45:44 +01:00
|
|
|
if (query && query.trim() !== "") {
|
2026-03-30 14:47:09 +02:00
|
|
|
conditions.push("search(lib_for_voe_ins, '" + query + "')")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (filters.filiere && filters.filiere !== "") {
|
|
|
|
|
conditions.push("fili='" + filters.filiere + "'")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (filters.selectivite && filters.selectivite !== "") {
|
|
|
|
|
conditions.push("select_form='" + filters.selectivite + "'")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (filters.region && filters.region !== "") {
|
|
|
|
|
conditions.push("region_etab_aff='" + filters.region + "'")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (filters.tauxMin && filters.tauxMin > 0) {
|
|
|
|
|
conditions.push("taux_acces_ens>=" + filters.tauxMin)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (filters.tauxMax && filters.tauxMax < 100) {
|
|
|
|
|
conditions.push("taux_acces_ens<=" + filters.tauxMax)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (conditions.length > 0) {
|
|
|
|
|
url += "&where=" + conditions.join(" AND ")
|
2026-03-17 17:34:34 +01:00
|
|
|
}
|
2026-03-18 12:45:44 +01:00
|
|
|
|
|
|
|
|
return url
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-30 14:47:09 +02:00
|
|
|
export async function fetchFormations(query, limit = 20, offset = 0, filters = {}) {
|
|
|
|
|
const url = buildURL(query, limit, offset, filters)
|
2026-03-18 12:45:44 +01:00
|
|
|
const response = await fetch(url)
|
|
|
|
|
|
|
|
|
|
if (!response.ok) {
|
|
|
|
|
throw new Error("Erreur HTTP")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return await response.json()
|
2026-03-30 14:47:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function fetchFormationHistory(codUai, nomFormation) {
|
|
|
|
|
var datasets = {
|
|
|
|
|
2020: "fr-esr-parcoursup_2020",
|
|
|
|
|
2021: "fr-esr-parcoursup_2021",
|
|
|
|
|
2022: "fr-esr-parcoursup_2022",
|
|
|
|
|
2023: "fr-esr-parcoursup_2023",
|
|
|
|
|
2024: "fr-esr-parcoursup_2024",
|
|
|
|
|
2025: "fr-esr-parcoursup"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var history = []
|
|
|
|
|
var searchName = nomFormation.substring(0, 40).replace(/'/g, "\\'")
|
|
|
|
|
var years = [2020, 2021, 2022, 2023, 2024, 2025]
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < years.length; i++) {
|
|
|
|
|
var year = years[i]
|
|
|
|
|
var dataset = datasets[year]
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
var url = "https://data.enseignementsup-recherche.gouv.fr/api/explore/v2.1/catalog/datasets/"
|
|
|
|
|
+ dataset + "/records?"
|
|
|
|
|
+ "limit=5"
|
|
|
|
|
+ "&where=cod_uai%3D'" + codUai + "' AND search(lib_for_voe_ins, '" + searchName + "')"
|
|
|
|
|
+ "&select=cod_uai,lib_for_voe_ins,voe_tot,acc_tot,pct_sansmention,pct_ab,pct_b,pct_tb,pct_tbf,pct_bg,pct_bt,pct_bp"
|
|
|
|
|
|
|
|
|
|
var response = await fetch(url)
|
|
|
|
|
|
|
|
|
|
if (response.ok) {
|
|
|
|
|
var data = await response.json()
|
|
|
|
|
|
|
|
|
|
if (data.results && data.results.length > 0) {
|
|
|
|
|
var r = data.results[0]
|
|
|
|
|
var taux = 0
|
|
|
|
|
|
|
|
|
|
if (r.voe_tot && r.voe_tot > 0) {
|
|
|
|
|
taux = Math.round((r.acc_tot / r.voe_tot) * 100)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
history.push({
|
|
|
|
|
annee: year,
|
|
|
|
|
tauxAcces: taux,
|
|
|
|
|
candidats: r.voe_tot || 0,
|
|
|
|
|
admis: r.acc_tot || 0,
|
|
|
|
|
pctSansMention: r.pct_sansmention || 0,
|
|
|
|
|
pctAB: r.pct_ab || 0,
|
|
|
|
|
pctB: r.pct_b || 0,
|
|
|
|
|
pctTB: r.pct_tb || 0,
|
|
|
|
|
pctTBF: r.pct_tbf || 0,
|
|
|
|
|
pctGeneral: r.pct_bg || 0,
|
|
|
|
|
pctTechno: r.pct_bt || 0,
|
|
|
|
|
pctPro: r.pct_bp || 0
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.warn("Erreur pour " + year + ":", e)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return history
|
|
|
|
|
}
|