Résultat Perpignan – Castres
Au Stade Aimé-Giral Perpignan, Perpignan bat Castres 43 à 12 (mi-temps: 17-7) pour le compte de la compétition top14 – 20e-journée – Poule 1
Statistiques du match:
Perpignan:
- Essais: 7
- Pénalités: 0
- Transformations: 4
- Cartons jaunes: 0
- Cartons rouges: 0
Castres:
- Essais: 2
- Pénalités: 0
- Transformations: 1
- Cartons jaunes: 1
- Cartons rouges: 0
Les équipes:
Composition Perpignan:
(1) Giorgi Tetrashvili, (2) Ignacio Ruiz, (3) Nemo Gunther Roelofse, (4) Jacobus Van Tonder, (5) Mathieu Tanguy, (6) Patrick Sobela, (7) Kelian Galletier, (8) So’otala Fa’aso’o, (9) Tom Ecochard, (10) Jake McIntyre, (11) Ali Crossdale, (12) Apisai Naqalevu, (13) Alivereti Duguivalu, (14) Tavite Veredamu, (15) Lucas Dubois, (16) Victor Montgaillard, (17) Xavier Chiocci, (18) Posolo Tuilagi, (19) Joaquin Oviedo, (20) Sadek Deghmache, (21) Jean-Pascal Barraque, (22) Mathieu Acebes, (23) Pietro Ceccarelli
Composition Castres:
(1) Quentin Walcker, (2) Pierre Colonna, (3) Henry Thomas, (4) Gauthier Maravat, (5) Thomas Staniforth, (6) Mathieu Babillot, (7) Baptiste Delaporte, (8) Abraham Papali’i, (9) Jérémy Fernandez, (10) Vilimoni Botitu, (11) Nathanaël Hulleu, (12) Jack Goodhue, (13) Adrien Seguret, (14) Filipo Nakosi, (15) Pierre Popelin, (16) Loris Zarantonello, (17) Antoine Tichit, (18) Leone Nakarawa, (19) Florent Vanverberghe, (20) Santiago Arata, (21) Joris Dupont, (22) Josaia Raisuqe, (23) Levan Chilachava
Perpignan en direct
Perpignan en direct – USAP en direct : Suivez tous vos matchs de rugby préférés à la radio ou en score live, en cliquant simplement sur le match de votre choix ci-dessous pour ouvrir le live et les radios. Vous pouvez également accéder à toutes les rencontres via les onglets “🔴 En Direct” et “Résultats”. Ne manquez rien des compétitions chaque week-end : XV de France (H/F/U20), Coupe d’Europe, Sevens, Top 14, Pro D2, Nationale, Fédérale, et bien plus encore. Plongez au cœur de l’action en un seul clic !
Chargement en cours …
Équipe Locale | Équipe Visiteuse |
---|
Sud Radio
var teamRequest = false; function getRencontreId() { let urlParams = new URLSearchParams(window.location.search); let rId = urlParams.get('id'); if (!rId) { const matchContainer = document.getElementById('match-container'); if (matchContainer) { rId = matchContainer.getAttribute('data-match-id'); } } if (!rId) { rId = findRencontreIdInComments(); } console.log(rId); return rId; } function findRencontreIdInComments() {
var urlElement = document.querySelector('dd.tribe-events-event-url a'); if (urlElement) { var href = urlElement.getAttribute('href'); var rId = new URL(href).searchParams.get('id'); return rId; } else { const matchContainer = document.getElementById('team-container'); document.getElementById('match-container'); rId = matchContainer.getAttribute('team-match-id'); teamRequest = true; return rId; } }
function fetchDataAndUpdate() { var apiUrl = '' const rencontreId = getRencontreId(); if (teamRequest) { apiUrl = `https://rugby-app-4ebacff10fda.herokuapp.com/rencontres/next_rencontre?id=${rencontreId}` } else { apiUrl = `https://rugby-app-4ebacff10fda.herokuapp.com/rencontres/${rencontreId}` } fetch(apiUrl) .then(response => response.json()) .then(allData => { const data = allData[0]; if (data.rencontre_resultat_locale && data.rencontre_resultat_visiteuse) { createChart(data); updateLists(data); } updateActions(data); updateScoreAndTeams(data); creerTableau(data); const contentDisplay = document.getElementById('content-display'); if (data.content) { contentDisplay.innerHTML = data.content; // Insérer le contenu dans l'élément } const radioContainer = document.querySelector('.refresh-button-container'); radioContainer.innerHTML = ''; // Clear previous buttons if any const radios = (data.local_team.radios || []).concat(data.visitor_team.radios || []); const uniqueRadios = Array.from(new Set(radios.map(radio => radio.id))) .map(id => radios.find(radio => radio.id === id)); if (radios && radios.length > 0) { uniqueRadios.forEach(radio => { const radioButton = document.createElement('button'); radioButton.textContent = `Ecouter sur ${radio.name}`; radioButton.classList.add('radio-button'); radioButton.onclick = function () { playRadio(radio.name, radio.link, radio.logo); }; radioContainer.appendChild(radioButton); }); } else { radioContainer.style.display = 'none'; } if (data.youtube_link) { const youtubeContainer = document.querySelector('.youtube-container'); const youtubeIframe = document.getElementById('youtube-video'); youtubeIframe.src = data.youtube_link; youtubeContainer.style.display = 'block'; } const liveFbLink = data.fb_live const container_fb = document.getElementById('fb-live-container'); if (liveFbLink && liveFbLink.includes('?v=')) { const videoId = liveFbLink.split('?v=')[1]; const videoUrlEncoded = encodeURIComponent(`https://www.facebook.com/facebook/videos/${videoId}/`); const iframeSrc = `https://www.facebook.com/plugins/video.php?href=${videoUrlEncoded}&width=560&height=314&show_text=false&appId&mute=0`; const iframe = document.createElement('iframe'); iframe.src = iframeSrc; iframe.width = '560'; // Définir la largeur iframe.height = '314'; // Définir la hauteur iframe.style.border = 'none'; iframe.style.overflow = 'hidden'; iframe.scrolling = 'no'; iframe.setAttribute('frameborder', '0'); iframe.setAttribute('allowfullscreen', 'true'); iframe.setAttribute('allow', 'autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share'); container_fb.style.display = 'block'; container_fb.appendChild(iframe); }
if (data.etat === 'termine' || radios.length === 0) { radioContainer.style.display = 'none'; } else { resetTimer(); } }); }
function creerTableau(statsData) { const table = document.getElementById('matchTable'); table.innerHTML = ''; // Nettoyer le tableau existant let headerRow = `
`; table.insertAdjacentHTML('beforeend', headerRow); const labels = { "classement_actuel": "Classement actuel", "victoires_domicile": "Victoires domicile", "victoires_exterieur": "Victoires extérieur", "points_domicile": "Points domicile", "points_exterieur": "Points extérieur", "essais_marques_domicile": "Essais marqués domicile", "essais_marques_exterieur": "Essais marqués extérieur", "essais_encaisses_domicile": "Essais encaissés domicile", "essais_encaisses_exterieur": "Essais encaissés extérieur", "tendance_globale": "Tendance globale", "penalites_encaissees_domicile": "Pénalités encaissées domicile", "penalites_encaissees_exterieur": "Pénalités encaissées extérieur" }; Object.keys(labels).forEach(key => { let row = `
`; table.insertAdjacentHTML('beforeend', row); }); }
function formatData(data) { if (typeof data === 'string' && data.match(/V|N|D/)) { let formattedData = data.split(' ').map(el => { switch (el) { case 'V': return '' + el + ''; case 'N': return '' + el + ''; case 'D': return '' + el + ''; default: return el; } }).join(' '); return formattedData; } else { return data; } }
function createTimelineItem(action, actionTeamName, isLocalTeam, actionTeam) { const li = document.createElement('li');
// Si le type est "comment", créer un style spécial pour une bulle au centre de la page if (action.type === 'comment') {
li.className = 'timeline-item timeline-comment'; li.style = "width: 100%;" li.innerHTML = `
`; return li; }
// Si ce n'est pas un commentaire, on procède normalement li.className = 'timeline-item ' + (isLocalTeam ? 'local' : 'visitor'); let sousTypeString = ''; let minute = action.minutes + ' minutes';
if (action.type === 'CARD') { sousTypeString = action.sousType || ''; }
const img = document.createElement('img'); img.src = `https://vibrez-rugby.com/wp-content/uploads/2024/08/${action.type_traduit ? action.type_traduit.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/\s+/g, '') : ''}${sousTypeString}.png`; img.className = 'action-icon';
let teamContent = ''; let actionsVar = '';
if (action.type !== 'Start' && action.type !== 'Stop' && action.type !== 'MT') { teamContent = `
`; actionsVar = action.type_traduit; } else { minute = ''; if (action.type == 'Start') { actionsVar = 'Début'; } else { actionsVar = 'Fin'; } }
li.innerHTML = `
${teamContent}
${actionsVar}
${action.Joueur1 ? `
${action.Joueur1.Personne.nom}
` : ''} ${action.Joueur2 ? `
${action.Joueur2.Personne.nom}
` : ''}
`;
li.querySelector('.timeline-marker').appendChild(img); return li; }
function updateActions(data) { const timeline = document.querySelector('.timeline'); timeline.innerHTML = ''; if (data.etat !== 'A venir' && data.etat !== 'avenir') { if (Array.isArray(data.actions)) { for (const action of data.actions) { const isLocalTeam = String(action.competitionEquipeId) === String(data.local_team.id); const actionTeam = isLocalTeam ? data.local_team : data.visitor_team; const actionTeamName = actionTeam.img_url; const item = createTimelineItem(action, actionTeamName, isLocalTeam, actionTeam); timeline.appendChild(item); } } } if (!data.compositon_equipe_local) return; const table = document.querySelector(".custom-composition-table"); while (table.rows.length > 1) table.deleteRow(1);
const sortedEquipeLocal = data.compositon_equipe_local.sort((a, b) => a.numero - b.numero); const sortedEquipeVisiteur = data.compositon_equipe_visiteur.sort((a, b) => a.numero - b.numero);
for (const [i, joueurLocal] of sortedEquipeLocal.entries()) { const joueurVisiteur = sortedEquipeVisiteur[i]; const row = table.insertRow(); row.insertCell(0).innerHTML = `${joueurLocal.numero}${joueurLocal.nom} ${joueurLocal.estCapitaine ? "C" : ""}`; row.insertCell(1).innerHTML = joueurVisiteur ? `${joueurVisiteur.numero}${joueurVisiteur.nom} ${joueurVisiteur.estCapitaine ? "C" : ""}` : ''; } } function getFormeHtml(equipe) { let formeArray = equipe.forme; return formeArray.map(val => { if (val === 'V') { return ''; } else if (val === 'N') { return ''; } else if (val === 'D') { return ''; } }).join(' '); }
function updateScoreAndTeams(data) { const scoreContainer = document.querySelector(".custom-score-container"); const emblemeLocal = document.querySelector(".custom-emblem-local"); const dateContainer = document.querySelector(".custom_date"); const nomLocal = document.querySelector(".custom-local-name"); const formeLocal = document.querySelector(".circle"); const emblemeVisiteur = document.querySelector(".custom-emblem-visitor"); const nomVisiteur = document.querySelector(".custom-visitor-name"); const summary = document.querySelector(".match-summary"); const h1Container = document.querySelector(".custom-h1");
emblemeLocal.src = data.local_team.img_url;
let formeEquipeLocale = getFormeHtml(data.local_team);
let formeEquipeVisiteuse = getFormeHtml(data.visitor_team);
nomLocal.innerHTML = data.local_team.name + '
' + formeEquipeLocale;
emblemeVisiteur.src = data.visitor_team.img_url;
nomVisiteur.innerHTML = data.visitor_team.name + '
' + formeEquipeVisiteuse;
const gameStatus = data.etat === 'endirect' || data.etat === 'avenir' ? 'en Direct' : '';
const gameFinish = data.etat === 'termine' ? 'Résultat' : '';
h1Container.textContent = `${gameFinish} ${data.local_team.name} - ${data.visitor_team.name} ${gameStatus}`;
const date = new Date(data.date);
const dateFormatted = `${date.toLocaleDateString('fr-FR', {
year: 'numeric',
month: 'long',
day: 'numeric',
})}`;
const heureFormatted = `${date.toLocaleTimeString('fr-FR', {
hour: '2-digit',
minute: '2-digit',
})}`;
let day = data.day.replace(/(\d+e)-journee/g, "$1 journée")
.replace(/(\b\d+\b)/g, "$1e journée");
// Supprimer l'ancien div avec la classe 'date' s'il existe const existingDiv = summary.querySelector('.date'); if (existingDiv) { summary.removeChild(existingDiv); }
// Créer un nouveau div pour la date let newDiv = document.createElement('div'); newDiv.classList.add('date'); newDiv.innerHTML = `
${data.competition} - ${day}
${dateFormatted}
`;
if (data.rencontre_resultat_locale && data.etat === "termine") { summary.insertBefore(newDiv, summary.firstChild); scoreContainer.innerHTML = `
`;
if (dateContainer) dateContainer.remove(); } else if (data.etat === 'endirect') { summary.insertBefore(newDiv, summary.firstChild); scoreContainer.innerHTML = `
`;
if (dateContainer) dateContainer.remove(); summary.classList.remove('hide'); } else { summary.classList.add('hide'); dateContainer.innerHTML = `
`; } }
function updateLists(data) { const summaryTable = document.querySelector('.summary-table'); summaryTable.innerHTML = ''; const orderedKeys = ['MI-TEMPS', 'ESSAI', 'TRANSFORMATION', 'PENALITE', 'DROP', 'CARTON_JAUNE', 'CARTON_ROUGE'];
const localeStats = data?.stats?.locale || {}; const extStats = data?.stats?.ext || {};
orderedKeys.forEach((key, index) => { const localKey = key.toLowerCase(); const visitorKey = key.toLowerCase();
let localValue = localeStats.hasOwnProperty(localKey) ? localeStats[localKey] : 0; let visitorValue = extStats.hasOwnProperty(visitorKey) ? extStats[visitorKey] : 0;
if (key === 'MI-TEMPS') { localValue = localeStats.hasOwnProperty(localKey) ? localeStats[localKey] : null; visitorValue = extStats.hasOwnProperty(visitorKey) ? extStats[visitorKey] : null; }
if (localValue !== null || visitorValue !== null) { const tr = document.createElement('tr'); const tdLocal = document.createElement('td'); tdLocal.textContent = localValue; const tdKey = document.createElement('td'); tdKey.textContent = key; const tdVisitor = document.createElement('td'); tdVisitor.textContent = visitorValue; tr.appendChild(tdLocal); tr.appendChild(tdKey); tr.appendChild(tdVisitor); // if (index >= 3) tr.classList.add('hide'); summaryTable.appendChild(tr); } }); } function showTab(id) { document.querySelectorAll('.tab-content').forEach(el => el.classList.remove('active')); document.querySelectorAll('.tab').forEach(el => el.classList.remove('active')); document.getElementById(id).classList.add('active'); document.querySelector(`.tab[onclick="showTab('${id}')"]`).classList.add('active'); }
let myChart; function createChart(data) { const chartData = data.chart; if (chartData) { const labels = Array.from({ length: 80 }, (_, i) => i); const teams = { [data.local_team.id]: { name: data.local_team.name, color: 'orange' }, [data.visitor_team.id]: { name: data.visitor_team.name, color: 'blue' } };
const datasets = Object.keys(teams).map(teamId => { const rawTeamData = chartData .filter(item => item.team === teamId) .map(item => ({ x: item.minutes, y: item.score })); return { label: teams[teamId].name, data: rawTeamData, borderColor: teams[teamId].color, borderWidth: 2, tension: 0.1, fill: false, pointRadius: 0, }; });
const localTeamDataset = datasets.find(dataset => dataset.label === teams[data.local_team.id].name); const sortedDatasets = [localTeamDataset].concat(datasets.filter(dataset => dataset !== localTeamDataset));
if (myChart) { myChart.destroy(); }
if (document.getElementById('myChart')) { const ctx = document.getElementById('myChart').getContext('2d'); myChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: sortedDatasets }, options: { plugins: { legend: { display: true, position: 'top', labels: { usePointStyle: true } } }, scales: { x: { display: true, title: { display: true, text: 'Minutes' }, type: 'linear', position: 'bottom', min: 0, max: 80, // Assurez-vous de définir la valeur maximale en fonction de la durée du match }, y: { display: true } }, } }); } } }
let refreshTimeout = null;
function resetTimer() { if (refreshTimeout) { clearTimeout(refreshTimeout); } refreshTimeout = setTimeout(() => { fetchDataAndUpdate(); }, 60000); }
function playRadio(name, url, logo) { const playerContainer = document.querySelector('.spotify-style-player'); const audioTitle = playerContainer.querySelector('.audio-title'); const audioSource = playerContainer.querySelector('audio source'); const audioPlayer = playerContainer.querySelector('audio'); const logoImg = playerContainer.querySelector('.radio-logo'); const closeButton = playerContainer.querySelector('.close-button');
const adUrl = 'https://vibrez-rugby.com/wp-content/uploads/2024/10/pub-delpit-services.mp3';
closeButton.addEventListener('click', function () { playerContainer.style.display = 'none'; audioPlayer.pause(); });
function playAdAndThenRadio() { audioTitle.innerHTML = `Publicité...`; audioSource.src = adUrl; logoImg.src = logo; audioPlayer.load(); playerContainer.style.display = 'flex'; audioPlayer.play().then(() => { audioPlayer.onended = function () {
audioTitle.innerHTML = `Vous écoutez ${name}`; audioSource.src = url; // Lien de la radio logoImg.src = logo; audioPlayer.load(); audioPlayer.play().catch(error => { console.error("Autoplay blocked by the browser: ", error); }); }; }).catch(error => { console.error("Autoplay blocked by the browser: ", error); }); }
playAdAndThenRadio(); }
window.onload = function () { fetchDataAndUpdate(); };
Perpignan en direct : Vivez les matchs de l’USAP en temps réel
Retrouvez en direct chaque match de l’USAP Perpignan, et plongez au cœur de l’action ! Que vous suiviez le score ou écoutiez les commentaires, ne manquez aucun moment du rugby de Perpignan.
Accédez aux matchs de Perpignan en direct
Notre service vous permet de suivre le match en direct, couvrant chaque grande compétition comme le Top 14 et la Coupe du Monde de Rugby. Avec notre menu simple, rejoignez en un clic l’onglet « 🔴EN DIRECT » pour suivre le match de Perpignan en temps réel.
Commentaires et analyses en direct de l’USAP
Nos experts de l’USAP vous accompagnent pour vivre chaque essai, chaque pénalité et les moments clés du match. Nos analyses, statistiques et anecdotes sur les joueurs enrichiront votre expérience, comme si vous y étiez.
Scores de Perpignan en temps réel
Suivez en temps réel les performances de Perpignan grâce à notre mise à jour de score en direct. Un aperçu clair des résultats et de l’évolution des scores vous permet de rester informé à chaque instant.
Écoutez Perpignan en direct où que vous soyez
Sur la route ou chez vous, restez connecté avec notre diffusion radio en direct. Les commentaires vous plongent au cœur de chaque match de l’USAP, et notre application mobile vous permet de suivre le match en direct, où que vous soyez.
Suivez toute l’action de Perpignan en direct
Grâce à notre couverture complète, ne manquez aucun moment du rugby de Perpignan. Que ce soit pour le suivi des scores ou l’écoute des commentaires, rejoignez-nous pour vivre l’intensité des matchs de l’USAP.
Pour résumer, avec notre service, suivez le match en direct et plongez dans l’univers de l’USAP rugby. Rejoignez-nous pour vivre chaque minute des matchs de Perpignan en temps réel.
${action.text}