Salut les codeurs et bienvenue sur LM-Code ! 🎉 Aujourd’hui, nous allons réaliser un super projet : un moteur de recherche qui permet de chercher du texte sur Wikipedia et des images sur Unsplash. 🖼️ Pour cela, nous allons utiliser HTML, CSS et JavaScript.
Le tout sera simple, amusant et interactif. Alors, mettez votre casquette de développeur et plongeons dans le code ! 🚀
🚀 Étape 1 : Préparer votre environnement
Avant de commencer, assurez-vous d’avoir les outils suivants installés :
- Un éditeur de code : Visual Studio Code, Sublime Text, ou autre.
- Un navigateur : Chrome, Firefox, etc.
- Connexion Internet pour les API.
Créez un fichier nommé navigateur.html et un autre nav.js.


🖌️ Étape 2 : Le fichier HTML (l’interface)
C’est ici que nous construisons l’interface utilisateur ! On utilise HTML et Bootstrap pour que tout soit joli sans effort. 💅
Voici le contenu du fichier navigateur.html :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Recherche Texte et Images</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<style>
body {
padding-top: 50px;
background-color: rgb(245, 251, 252);
color: black;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.content {
flex: 1;
}
.search-results, #search-result {
margin-top: 20px;
}
#search-result {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 20px;
}
#search-result img {
width: 100%;
height: auto;
object-fit: cover;
border-radius: 5px;
}
#show-more-btn {
display: none;
margin-top: 20px;
}
.nav-tabs {
margin-bottom: 20px;
}
footer {
background-color: #f8f9fa;
padding: 20px 0;
text-align: center;
border-top: 1px solid #ddd;
}
footer a {
color: #007bff;
text-decoration: none;
margin: 0 10px;
}
footer a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<div class="content">
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<h3>Application de recherche de Texte Wikipédia et d'Images</h3>
<div id="image-container" class="mb-5 d-flex justify-content-center">
<img id="image" src="logo1.png" alt="Logo" class="img-fluid">
</div>
<!-- Formulaire de recherche -->
<form id="searchForm">
<div class="input-group mb-3">
<input type="text" class="form-control" id="searchQuery" placeholder="Entrez votre recherche">
<div class="input-group-append">
<button class="btn btn-primary" type="submit">Rechercher</button>
</div>
</div>
</form>
<!-- Onglets pour les résultats -->
<ul class="nav nav-tabs" id="resultTabs">
<li class="nav-item">
<a class="nav-link active" id="all-tab" href="#">Tous</a>
</li>
<li class="nav-item">
<a class="nav-link" id="images-tab" href="#">Images</a>
</li>
</ul>
<!-- Résultats -->
<div id="results" class="search-results">
<!-- Les résultats textuels apparaîtront ici -->
</div>
<div id="search-result" style="display: none;">
<!-- Les résultats d'images apparaîtront ici -->
</div>
<button id="show-more-btn" class="btn btn-secondary" style="display: none;">Voir plus</button>
</div>
</div>
</div>
</div>
<!-- Footer -->
<footer>
<p>© 2024 LM-Code. Tous droits réservés.</p>
<p>
<a href="https://lm-code.be">Site Web</a> |
<a href="https://www.youtube.com/@lm-codeOfficiel">Chaine Youtube</a> |
<a href="https://lm-code.be">LM-Code</a>
</p>
</footer>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script src="nav.js"></script>
</body>
</html>
🎉 Vous venez de créer l’interface ! Le formulaire est prêt, les onglets sont en place, et le footer est là pour ajouter des liens vers vos pages.

💻 Étape 3 : Le fichier JavaScript (la logique)
Dans ce fichier, nous ajoutons la logique pour :
- Rechercher du texte sur Wikipedia.
- Trouver des images via Unsplash.
- Gérer les onglets.
Voici le contenu du fichier nav.js :
const allTab = document.getElementById("all-tab");
const imagesTab = document.getElementById("images-tab");
const resultsContainer = document.getElementById("results");
const imagesContainer = document.getElementById("search-result");
const showMoreBtn = document.getElementById("show-more-btn");
// Gestion des clics sur les onglets
allTab.addEventListener("click", function (e) {
e.preventDefault();
allTab.classList.add("active");
imagesTab.classList.remove("active");
resultsContainer.style.display = "block";
imagesContainer.style.display = "none";
showMoreBtn.style.display = "none";
});
imagesTab.addEventListener("click", function (e) {
e.preventDefault();
allTab.classList.remove("active");
imagesTab.classList.add("active");
resultsContainer.style.display = "none";
imagesContainer.style.display = "grid";
if (imagesContainer.children.length > 0) {
showMoreBtn.style.display = "block";
}
});
// Rechercher sur Wikipedia
async function searchWikipedia(query) {
const url = `https://en.wikipedia.org/w/api.php?origin=*&action=query&list=search&srsearch=${encodeURIComponent(query)}&utf8=&format=json`;
try {
const response = await fetch(url);
const data = await response.json();
if (data.query.search.length > 0) {
displayWikipediaResults(data.query.search, resultsContainer);
} else {
displayNoResultsMessage(resultsContainer, "Aucun résultat trouvé sur Wikipedia.");
}
} catch (error) {
displayNoResultsMessage(resultsContainer, "Erreur lors de la recherche sur Wikipedia.");
}
}
// Afficher les résultats Wikipedia
function displayWikipediaResults(results, container) {
container.innerHTML = ""; // Nettoyer les résultats précédents
let groupTitle = document.createElement("h3");
groupTitle.textContent = "Résultats Wikipedia";
container.appendChild(groupTitle);
results.forEach(result => {
const item = document.createElement("div");
item.className = "result-item p-3 mb-2 bg-light border";
item.innerHTML = `
<h4><a href="https://en.wikipedia.org/?curid=${result.pageid}" target="_blank">${result.title}</a></h4>
<p>${result.snippet}...</p>`;
container.appendChild(item);
});
}
// Gérer les images Unsplash
const accessKey = "VOTRE_CLE_UNSPLASH";
let page = 1;
async function searchImages(query) {
const url = `https://api.unsplash.com/search/photos?page=${page}&query=${query}&client_id=${accessKey}&per_page=12`;
try {
const response = await fetch(url);
const data = await response.json();
if (page === 1) {
imagesContainer.innerHTML = "";
}
data.results.forEach(result => {
const img = document.createElement("img");
img.src = result.urls.small;
const link = document.createElement("a");
link.href = result.links.html;
link.target = "_blank";
link.appendChild(img);
imagesContainer.appendChild(link);
});
if (data.results.length > 0) {
showMoreBtn.style.display = "block";
} else if (page === 1) {
displayNoResultsMessage(imagesContainer, "Aucune image trouvée.");
}
} catch (error) {
displayNoResultsMessage(imagesContainer, "Erreur lors de la recherche d'images.");
}
}
// Lancer la recherche
document.getElementById("searchForm").addEventListener("submit", function (e) {
e.preventDefault();
const query = document.getElementById("searchQuery").value.trim();
if (query) {
resultsContainer.innerHTML = "";
imagesContainer.innerHTML = "";
searchWikipedia(query);
searchImages(query);
}
});
// Bouton "Voir plus"
showMoreBtn.addEventListener("click", function () {
page++;
searchImages(document.getElementById("searchQuery").value);
});
// Gérer les erreurs
function displayNoResultsMessage(container, message) {
container.innerHTML = `<div class="alert alert-danger">${message}</div>`;
}

🎉 Étape 4 : Testez votre projet !
- Ouvrez
navigateur.htmldans votre navigateur. - Recherchez un mot-clé.
- Regardez la magie opérer avec les onglets « Tous » et « Images » ! 🎩✨

🚀 Prochaine étape
- Ajoutez des fonctionnalités comme :
- Recherche avancée.
- Pagination améliorée.
- Thèmes sombres et clairs ! 🌙☀️
Amusez-vous bien, et n’hésitez pas à partager votre projet avec le monde 🌍. Retrouvez d’autres tutos sur LM-Code. 💻
