Что вы думаете о видео с канала Youtube в приложении Angular? В этой статье я покажу, как легко интегрироваться в angular проекты (версия 7).
В конце публикации ссылка на проект, а не на GiHub;)

API данных YouTube v3

Первый шаг - получить ключ api. Посетив https://developers.google.com/youtube/v3/getting-started, вы найдете процедуры, необходимые для получения учетных данных для авторизации.
Вкратце, вам необходимо:

1) Перейдите в Google Developers Console.
2) Выберите проект.
3) На левой боковой панели выберите API и авторизацию. В списке API убедитесь, что для API данных YouTube v3 установлен статус ВКЛ.

Следующим шагом после создания проекта является регистрация модуля HttpClientModule в основном модуле (app.module.ts).

import { HttpClientModule } from '@angular/common/http';

И декларируем в импорте:

imports: [
BrowserModule,
AppRoutingModule,
HttpClientModule,
NgxSpinnerModule

Я буду использовать библиотеку NGX-Spinner для отображения счетчика при загрузке видео.

Установите библиотеку с помощью:

$ npm install ngx-spinner --save

И объявите модуль в импорте в соответствии с приведенным выше кодом.
Теперь мы можем создать службу для вызовов API Youtube.

В терминале напишите:

$ ng g service youtube

Мы создаем переменную apiKey, в которой хранится значение API, полученное на первом шаге.

Затем мы вставляем в конструктор класс HttpClient. Он предоставляет методы для выполнения HTTP-запросов.

Давайте реализуем метод, который возвращает список видео. Мы называем его getVideosForChanel (). Мы передаем два аргумента, первый - это идентификатор канала. Второй ограничивает количество видеороликов.

Мы объединяем эту информацию в URL-адрес API, передавая другие параметры в виде порядка ('& order = date), part = snippet, который содержит другие свойства, идентифицирующие заголовок, описание, среди прочего, и тип ресурса (type = video).

let url = ‘https://www.googleapis.com/youtube/v3/search?key=' + this.apiKey + ‘&channelId=’ + channel + ‘&order=date&part=snippet &type=video,id&maxResults=’ + maxResults

В классе компонента (app.component.ts) мы объявляем массив результатов видео:

export class AppComponent {
videos: any[];

В методе конструктора мы внедряем службу, созданную для запроса видео (YoutubeService), и класс для отображения счетчика (NgxSpinnerService).

constructor(private spinner: NgxSpinnerService, private youTubeService: YoutubeService) { }

Затем в методе ngOnInit () мы вызываем метод, передавая идентификатор канала, в этом примере канал принадлежит моему ребенку :), и максимальное количество. getVideosForChanel результаты ('UC_LtA_EtCr7Jp5ofOsYt18g', 15).

ngOnInit() {
this.spinner.show()
setTimeout(()=>
{
this.spinner.hide()
},3000)
this.videos = [];
this.youTubeService
.getVideosForChanel('UC_LtA_EtCr7Jp5ofOsYt18g', 15)
.pipe(takeUntil(this.unsubscribe$))
.subscribe(lista => {
for (let element of lista["items"]) {
this.videos.push(element)
}
});
}

В результате .subscribe (list = ›{, получаем свойство items и добавляем каждый объект в созданный массив.

В начале функции мы включили таймаут в 3 секунды, чтобы закрыть счетчик.

setTimeout(()=>
{
this.spinner.hide()
},3000)

Давайте завершим кодирование шаблона компонента (app.component.html:

<div *ngFor="let video of videos" class="col-xl-3 col-md-6 mb-4">
<div class="card border-0 shadow vh-50">
<a href="https://www.youtube.com/watch?v={{video.id.videoId}}" target="_blank">
<img [src]="video.snippet.thumbnails.medium.url" class="card-img-top" alt="..."></a>
<div class="card-body text-center">
<h5 class="card-title mb-0">
<a href="https://www.youtube.com/watch?v={{video.id.videoId}}">{{video.snippet.title}}
</a></h5>
<div class="card-text text-black-50">{{video.snippet.description.slice(0, 100)}}</div>
<p class="card-text">{{video.snippet.description}}</p>
</div>
</div>
</div>

Мы зацикливаем массив с помощью директивы * ngFor. Мы определили ссылку для просмотра видео через videoID по адресу href = https://www.youtube.com/watch?v={{video.id.videoId}} '.

Вы можете просмотреть другую информацию о видео, обратившись к свойству сниппета.
Конечный результат:

Очень просто !!!

Если вы дочитали до этого места, большое вам спасибо. Все вопросы оставляйте в комментариях.
Проект на Github.