Created
November 30, 2023 12:14
-
-
Save cba85/183d76074f064e8484b02639b9251495 to your computer and use it in GitHub Desktop.
TV Maze JS - TSTN2A IPI Toulouse 2023-2024
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const form = document.querySelector("form"); | |
form.addEventListener("submit", async (e) => { | |
e.preventDefault(); | |
document.querySelector("#results").textContent = ""; | |
const q = form.q.value; | |
if (!q) { | |
const error = document.querySelector(".error"); | |
error.textContent = "Erreur : veuillez entrer une série"; | |
error.style.display = "block"; | |
return; | |
} | |
document.querySelector(".error").style.display = "none"; | |
const response = await fetch(`https://api.tvmaze.com/search/shows?q=${q}`); | |
const shows = await response.json(); | |
if (!shows.length) { | |
const error = document.querySelector(".error"); | |
error.textContent = "Aucun résultat"; | |
error.style.display = "block"; | |
return; | |
} | |
for (const show of shows) { | |
console.log(show); | |
let html = `<h2>${show.show.name}</h2>`; | |
if (show.show.image) { | |
html += `<img | |
src="${show.show.image.medium}" | |
alt="${show.show.name}" | |
/>`; | |
} | |
/* | |
html += `<p>Genres : `; | |
for (const genre of show.show.genres) { | |
html += `${genre} `; | |
} | |
*/ | |
if (show.show.genres.length) { | |
const genres = show.show.genres.join(", "); | |
html += `<p>Genres : ${genres}</p>`; | |
} | |
html += `<p><strong>⭐️ ${ | |
show.show.rating.average ? show.show.rating.average : "<em>-</em>" | |
}</strong></p>`; | |
if (show.show.summary) { | |
html += `<blockquote>${show.show.summary}</blockquote>`; | |
} | |
if (show.show.status === "Ended") { | |
html += `<mark>Terminé</mark>`; | |
} | |
html += `<ul>`; | |
if (show.show.averageRuntime) { | |
html += `<li>Durée moyenne des épisodes : ${show.show.averageRuntime} min</li>`; | |
} | |
if (show.show.premiered) { | |
const premiered = new Date(show.show.premiered); | |
html += `<li>Début : ${premiered.toLocaleDateString("fr-FR")}</li>`; | |
} | |
if (show.show.ended) { | |
const ended = new Date(show.show.ended); | |
html += `<li>Fin : ${ended.toLocaleDateString("fr-FR")}</li>`; | |
} | |
if (show.show.officialSite) { | |
html += `<li><a href="${show.show.officialSite}">Site officiel</a></li>`; | |
} | |
html += `</ul>`; | |
const showElement = document.createElement("div"); | |
showElement.innerHTML = html; | |
document.querySelector("#results").appendChild(showElement); | |
} | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="fr"> | |
<head> | |
<meta charset="UTF-8" /> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
<title>TV Maze</title> | |
<script src="app.js" defer></script> | |
<link | |
rel="stylesheet" | |
href="https://cdn.jsdelivr.net/npm/holiday.css@0.11.2" | |
/> | |
<style> | |
form { | |
margin-bottom: 1em; | |
} | |
.show { | |
margin-top: 1em; | |
padding: 1em; | |
border: 1px solid lightgray; | |
border-radius: 4px; | |
} | |
</style> | |
</head> | |
<body> | |
<h1>TV Maze</h1> | |
<form> | |
<label for="q">Recherchez une série</label> | |
<input type="text" name="q" id="q" /> | |
<footer> | |
<button type="submit">Rechercher</button> | |
</footer> | |
</form> | |
<code class="error" style="display: none"></code> | |
<div id="results"></div> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment