Cours 8 - Maps, vidéos, pipes
▶ Intégration YouTube
Dans la section qui suit, nous aborderons comment intégrer un lecteur vidéo YouTube à une page Web Angular, mais aussi comment envoyer une requête à l'API Web de YouTube pour rechercher et afficher une vidéo.
📽 Lecteur YouTube avec <iframe>
Pour afficher une vidéo YouTube spécifique dans un composant, suivez les étapes suivantes :
Étape 1 - 🔍 Trouver une vidéo YouTube de notre choix
Étape 2 - 🚚 Copier le <iframe> prémâché dans le composant

On colle dans le HTML d'un composant :

Il est possible qu'Angular bloque la vidéo puisque c'est une ressource externe. Dans ce cas, il faudra indiquer à Angular d'ignorer l'origine de la ressource. (Étape 2.5)
Étape 3 (optionnelle) - 🧼 Contourner le blocage d'une ressource externe

Si vous avez ce problème, voici la solution :
- Mettre l'URL de la vidéo dans une variable du composant :
export class AppComponent{
videoUrl : string = "https://www.youtube.com/embed/vxLzDwScCu";
}
- Injecter la dépendance
DomSanitizer
dans le composant :
export class AppComponent{
videoUrl : string = "https://www.youtube.com/embed/vxLzDwScCu";
constructor(public sanitizer : DomSanitizer){} // Injection 💉
}
- Utiliser le
DomSanitizer
pour transformer la ressource externe en « ressource de confiance » :
export class AppComponent{
videoUrl : string = "https://www.youtube.com/embed/vxLzDwScCu";
constructor(public sanitizer : DomSanitizer){}
getSafeUrl() : SafeResourceUrl{
return this.sanitizer.bypassSecurityTrustResourceUrl(this.videoUrl);
}
}
- Il ne reste plus qu'à utiliser
getSafeUrl()
dans lesrc
du<iframe>
du composant :
<iframe width="560" height="315" [src]="getSafeUrl()" title="YouTube video player" ...>
La vidéo devrait pouvoir être chargée sans problème à ce moment.
Étape 4 (optionnelle) - 🧠 Meilleur stockage des URLs YouTube
Si on compte afficher plusieurs vidéos YouTube dans la page, autant mettre la partie commune de l'URL dans une constante :
const YT_URL = "https://www.youtube.com/embed/"; // Constante
@Component({
...
})
export class AppComponent{
videoUrl_1 : string = "vxLzDwMScCu";
videoUrl_2 : string = "Yv5saunLRdQ";
constructor(public sanitizer : DomSanitizer){}
getSafeUrl() : SafeResourceUrl{
return this.sanitizer.bypassSecurityTrustResourceUrl(YT_URL + this.videoUrl_1); // Concaténation
}
}