Youtube Grid sur Webflow

Youtube Grid sur Webflow

Cet outil extrait automatiquement et gratuitement les dernières vidéos de n'importe quelle chaîne YouTube et les affiche dans un format de grille professionnel. Il vous suffit de fournir un identifiant de chaîne YouTube et le module s'occupe du reste : récupération des données vidéo, des vignettes, des titres, des descriptions et des dates de publication. Les fonctionnalités incluent la mise en cache intelligente pour minimiser les appels d'API, la détection des robots pour éviter les demandes inutiles, les options de filtrage des courts métrages, le formatage des dates en plusieurs langues et une optimisation des vignettes de haute qualité. Parfait pour les présentations de portfolios, le marketing de contenu, les galeries vidéo et les intégrations dynamiques de YouTube sans codage complexe.
Partager ce contenu
Youtube Grid sur Webflow
1

Configuration API YouTube

Obtenir une clé API YouTube

Allez sur Google Cloud Console Créez un nouveau projet Activez l'API YouTube Data v3 Créez des identifiants → Clé API Copiez votre clé API

Créer un compte Cloudflare

Allez sur Cloudflare Créez un compte gratuit Allez dans Workers & Pages Cliquez sur Créer une application

2

Déployer le Worker

Créez un worker et mettez ce code à l'intérieur :

// Worker API YouTube pour bb-contents
// Déployez ce code sur Cloudflare Workers

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  // Gérer les CORS
  if (request.method === 'OPTIONS') {
    return new Response(null, {
      headers: {
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'GET, OPTIONS',
        'Access-Control-Allow-Headers': 'Content-Type',
      }
    })
  }

  try {
    const url = new URL(request.url)
    const channelId = url.searchParams.get('channelId')
    const maxResults = url.searchParams.get('maxResults') || '10'
    const allowShorts = url.searchParams.get('allowShorts') || 'false'
    
    if (!channelId) {
      return new Response(JSON.stringify({ error: 'Le paramètre channelId est requis' }), {
        status: 400,
        headers: {
          'Content-Type': 'application/json',
          'Access-Control-Allow-Origin': '*'
        }
      })
    }

    // Remplacez YOUR_YOUTUBE_API_KEY par votre vraie clé API YouTube
    const apiKey = 'YOUR_YOUTUBE_API_KEY'
    
    // Déterminer la durée des vidéos selon allowShorts
    if (allowShorts === 'true') {
      // Récupérer uniquement les vidéos courtes (< 4 minutes)
      const apiUrl = `https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=${channelId}&maxResults=${maxResults}&order=date&type=video&videoDuration=short&key=${apiKey}`
      const response = await fetch(apiUrl)
      
      if (!response.ok) {
        throw new Error(`Erreur API YouTube: ${response.status}`)
      }
      
      const data = await response.json()
      return new Response(JSON.stringify(data), {
        headers: {
          'Content-Type': 'application/json',
          'Access-Control-Allow-Origin': '*',
          'Cache-Control': 'public, max-age=3600'
        }
      })
    } else {
      // Récupérer les vidéos moyennes ET longues (exclure les shorts)
      const [mediumResponse, longResponse] = await Promise.all([
        fetch(`https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=${channelId}&maxResults=${maxResults}&order=date&type=video&videoDuration=medium&key=${apiKey}`),
        fetch(`https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=${channelId}&maxResults=${maxResults}&order=date&type=video&videoDuration=long&key=${apiKey}`)
      ])
      
      if (!mediumResponse.ok || !longResponse.ok) {
        throw new Error(`Erreur API YouTube: ${mediumResponse.status || longResponse.status}`)
      }
      
      const [mediumData, longData] = await Promise.all([
        mediumResponse.json(),
        longResponse.json()
      ])
      
      // Combiner les résultats et trier par date
      const combinedItems = [...(mediumData.items || []), ...(longData.items || [])]
      combinedItems.sort((a, b) => new Date(b.snippet.publishedAt) - new Date(a.snippet.publishedAt))
      
      // Limiter au nombre de résultats demandé
      const limitedItems = combinedItems.slice(0, parseInt(maxResults))
      
      return new Response(JSON.stringify({
        ...mediumData,
        items: limitedItems
      }), {
        headers: {
          'Content-Type': 'application/json',
          'Access-Control-Allow-Origin': '*',
          'Cache-Control': 'public, max-age=3600'
        }
      })
    }
    
  } catch (error) {
    return new Response(JSON.stringify({ 
      error: 'Erreur interne du serveur',
      message: error.message 
    }), {
      status: 500,
      headers: {
        'Content-Type': 'application/json',
        'Access-Control-Allow-Origin': '*'
      }
    })
  }
}
NOTE
N'oubliez pas de mettre votre CLÉ API dans le code du worker. Ensuite, copiez l'URL de votre worker.
3

Configuration Webflow

Ajoutez ceci dans le Head Code de votre page Webflow :

<!-- BeBranded Contents -->
<script async src="https://cdn.jsdelivr.net/npm/@bebranded/bb-contents@1/bb-contents.js"></script>

<!-- Intégration YouTube par bb-contents -->
<script>
window._bbContentsConfig = {
    youtubeEndpoint: 'VOTRE URL CLOUDFLARE WORKER ICI'
};
</script>
NOTE
Créez un div dans Webflow Ajoutez l'attribut : bb-youtube-channel="UC_VOTRE_ID_CHAINE" Ajoutez un template avec bb-youtube-item

Utilisez la page template pour avoir la structure dans Webflow

Facile à déployer, copiez-collez pour l'utiliser librement dans vos projets !

4

Personnalisation du module

ID de la chaîne

bb-youtube-channel = "ID de la chaîne"
Ajouter cet attribut :
Nom
bb-youtube-channel
Valeur
ID de la chaîne

Nombre de vidéos dans la grille

bb-youtube-video-count = "9"
Ajouter cet attribut :
Nom
bb-youtube-video-count
Valeur
9
NOTE
Vous pouvez mettre le nombre que vous voulez.

Autoriser les YouTube Shorts ?

bb-youtube-allow-shorts = "true"
Ajouter cet attribut :
Nom
bb-youtube-allow-shorts
Valeur
true
NOTE
Les valeurs sont true ou false.

Langue du module

bb-youtube-language = "fr"
Ajouter cet attribut :
Nom
bb-youtube-language
Valeur
fr
NOTE
Le module supporte actuellement seulement 2 langues : - Français (fr) - Langue par défaut - Anglais (en) - Langue alternative
1

2

Toujours besoin d'aide ?