Skip to content

Все для WordPress, веб-розробки — і не тільки

📹 YouTube Data API v3: отримання даних про відео через PHP (2026)

📹 YouTube Data API v3: отримання даних про відео через PHP (2026)

Ручний збір інформації про десятки відео, заняття на години. Назва, тривалість, кількість переглядів, дата публікації: копіювати це вручну з YouTube, гарантований шлях до помилок і вигорання.

YouTube Data API v3 вирішує проблему програмно. Один HTTP-запит, і ви отримуєте структурований JSON із фрагментом (snippet), характеристиками контенту (contentDetails) і статистикою. Жодного парсингу HTML, жодних капч.

У цьому туторіалі: покрокова інструкція від створення ключа API до готового PHP-скрипта, який витягує інформацію про будь-яке відео YouTube за його URL. Код реальний, перевірений, із поясненням кожного рядка.

💡 Швидкий огляд:

  • Створюємо API-ключ у Google Cloud Console та вмикаємо YouTube Data API v3
  • Розбираємо структуру ендпоїнта /videos та його параметри part, id і key
  • Пишемо PHP-функцію для вилучення ID відео з будь-якого посилання YouTube
  • Робимо запит через file_get_contents() і парсимо JSON-відповідь
  • Обробляємо помилки: невалідний ключ, неправильний ID, перевищення квоти
  • Дивимося на альтернативу, готову бібліотеку madcoda/php-youtube-api

Крок 1: Отримання API-ключа YouTube Data API

Для роботи з API потрібен ключ. Ось найкоротший шлях:

  • Відкрийте Google Cloud Console і створіть новий проєкт (або виберіть наявний).
  • Перейдіть у APIs & Services → Library, знайдіть «YouTube Data API v3» і натисніть Enable.
  • Зайдіть у Credentials → Create Credentials → API Key.
  • (Рекомендовано) Обмежте ключ: у розділі API restrictions виберіть YouTube Data API v3, щоб ключ не працював з іншими сервісами Google.

Ключ має вигляд рядка на кшталт AIzaSyD-... завдовжки 39 символів. Без нього API поверне помилку 403.

Добова квота, 10 000 одиниць. Один запит до /videos витрачає 1 одиницю. Для тестів і невеликого проєкту цього більш ніж достатньо. Якщо плануєте production-навантаження, запитайте підвищення квоти в тому ж розділі Console.

Крок 2: Ендпоїнт API та його параметри

URL для отримання інформації про відео:

1GET https://www.googleapis.com/youtube/v3/videos

Параметри передаються як query string:

Параметр

Обов’язковий

Опис

part

Так

Список полів через кому: snippet, contentDetails, statistics, status, topicDetails та ін.

id

Так

ID відео YouTube (11 символів, наприклад 1ejTKov_Sm4)

key

Так

Ваш API-ключ

hl

Ні

Мова текстових полів (наприклад, ru для російських назв)

maxResults

Ні

Кількість результатів (1-50, за замовчуванням 5)

Три основні значення part, які покривають більшість сценаріїв:

  • snippet, базова інформація: title, description, channelId, channelTitle, publishedAt, thumbnails (набір URL мініатюр різної роздільної здатності), tags, categoryId.
  • contentDetails, характеристики: duration (у форматі ISO 8601, наприклад PT4M13S), dimension (2d/3d), definition (sd/hd), caption (чи є субтитри).
  • statistics, числа: viewCount, likeCount, commentCount.

Важливий нюанс: поле dislikeCount у statistics вимкнене з грудня 2021 року, API завжди повертає 0. Поле favoriteCount також застаріле (завжди 0 із серпня 2015). Не спирайтеся на них у коді.

Крок 3: Вилучення ID відео з URL

Перш ніж смикати API, потрібно витягти ID відео з посилання. У YouTube кілька форматів URL:

  • Стандартний: https://www.youtube.com/watch?v=1ejTKov_Sm4
  • Короткий: https://youtu.be/1ejTKov_Sm4
  • Embed: https://www.youtube.com/embed/1ejTKov_Sm4
  • З параметрами: https://www.youtube.com/watch?v=1ejTKov_Sm4&t=120

Під усі ці варіанти працює проста PHP-функція:

1/**
2 * Извлекает ID видео из URL YouTube.
3 * Поддерживает форматы: watch?v=, youtu.be/, /embed/
4 *
5 * @param string $url URL видео YouTube
6 * @return string|null ID видео (11 символов) или null при ошибке
7 */
8function getYouTubeVideoId(string $url): ?string
9{
10 $parsed = parse_url($url);
11
12 // Короткая ссылка youtu.be/VIDEO_ID
13 if (isset($parsed['host']) && str_contains($parsed['host'], 'youtu.be')) {
14 return ltrim($parsed['path'], '/') ?: null;
15 }
16
17 // Стандартная ссылка watch?v=VIDEO_ID
18 if (isset($parsed['query'])) {
19 parse_str($parsed['query'], $params);
20 if (!empty($params['v'])) {
21 return $params['v'];
22 }
23 }
24
25 // Embed-ссылка /embed/VIDEO_ID
26 if (isset($parsed['path']) && str_starts_with($parsed['path'], '/embed/')) {
27 return substr($parsed['path'], 7);
28 }
29
30 return null;
31}
32
33// Пример использования
34$videoUrl = 'https://www.youtube.com/watch?v=1ejTKov_Sm4';
35$videoId = getYouTubeVideoId($videoUrl);
36echo $videoId; // 1ejTKov_Sm4

Функція використовує лише вбудовані можливості PHP, parse_url() розбирає URL на компоненти, parse_str() парсить query-рядок у масив. Жодних зовнішніх залежностей.

Крок 4: Запит до API та розбір відповіді

Збираємо все разом. Формуємо URL із підстановкою ID і ключа, робимо GET-запит, декодуємо JSON:

1<?php
2
3$apiKey = 'AIzaSyD-ВАШ_КЛЮЧ';
4$videoUrl = 'https://www.youtube.com/watch?v=1ejTKov_Sm4';
5$videoId = getYouTubeVideoId($videoUrl);
6
7if (!$videoId) {
8 die('Не удалось извлечь ID видео из URL.');
9}
10
11$endpoint = sprintf(
12 'https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id=%s&key=%s',
13 $videoId,
14 $apiKey
15);
16
17// Вариант с file_get_contents (нужен allow_url_fopen = On в php.ini)
18$context = stream_context_create([
19 'http' => [
20 'timeout' => 10,
21 'ignore_errors' => true, // не падать при HTTP-ошибках
22 ],
23]);
24
25$response = @file_get_contents($endpoint, false, $context);
26
27if ($response === false) {
28 die('Сетевой запрос не удался. Проверьте соединение или используйте cURL.');
29}
30
31$data = json_decode($response);
32
33if (json_last_error() !== JSON_ERROR_NONE) {
34 die('Ответ API — не JSON. Возможно, ключ недействителен.');
35}
36
37// API возвращает ошибку в поле error, а не HTTP-статусом
38if (isset($data->error)) {
39 die('Ошибка API: ' . $data->error->message);
40}
41
42if (empty($data->items)) {
43 die('Видео с таким ID не найдено.');
44}
45
46$video = $data->items[0];
47
48echo 'Название: ' . $video->snippet->title . PHP_EOL;
49echo 'Канал: ' . $video->snippet->channelTitle . PHP_EOL;
50echo 'Опубликовано: ' . $video->snippet->publishedAt . PHP_EOL;
51echo 'Длительность: ' . $video->contentDetails->duration . PHP_EOL;
52echo 'Просмотров: ' . number_format($video->statistics->viewCount ?? 0) . PHP_EOL;
53echo 'Лайков: ' . number_format($video->statistics->likeCount ?? 0) . PHP_EOL;
54echo 'Комментариев: ' . number_format($video->statistics->commentCount ?? 0) . PHP_EOL;
55
56// URL миниатюры максимального разрешения
57if (isset($video->snippet->thumbnails->maxres)) {
58 echo 'Миниатюра: ' . $video->snippet->thumbnails->maxres->url . PHP_EOL;
59}

Код став помітно надійнішим за голий file_get_contents() із першої чернетки. Додано: перевірку на вилучення ID, обробку мережевих помилок, валідацію JSON, реакцію на API-помилку Google (поле error), перевірку на порожню відповідь, fallback-оператор ?? для необов’язкових полів статистики.

CURL як альтернатива

Якщо на хостингу вимкнена директива allow_url_fopen, file_get_contents() не спрацює. Тоді, cURL:

1$ch = curl_init();
2curl_setopt_array($ch, [
3 CURLOPT_URL => $endpoint,
4 CURLOPT_RETURNTRANSFER => true,
5 CURLOPT_TIMEOUT => 10,
6 CURLOPT_FOLLOWLOCATION => true,
7]);
8$response = curl_exec($ch);
9$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
10curl_close($ch);
11
12if ($httpCode !== 200 || $response === false) {
13 die('Запрос не удался. HTTP-код: ' . $httpCode);
14}

Готова бібліотека: madcoda/php-youtube-api

Писати обв’язку вручну для продакшену, зайва робота. Для проєктів, де потрібна не разова вибірка, а регулярна робота з API, є madcoda/php-youtube-api, легковажна PHP-обгортка без зовнішніх залежностей. Встановлення:

1composer require madcoda/php-youtube-api

Використання:

1$youtube = new Madcoda\Youtube(['key' => 'ВАШ_КЛЮЧ']);
2$video = $youtube->getVideoInfo('1ejTKov_Sm4');
3
4echo $video->snippet->title;
5echo $video->statistics->viewCount;

Бібліотека закриває рутину: пагінацію, повторні запити, форматування тривалості з ISO 8601 у зручний для читання вигляд. Для разових скриптів, надлишково; для працюючого сервісу, виправдано.

Відеопосібник вище наочно показує весь процес: від увімкнення API в консолі до першого успішного запиту. Рекомендуємо подивитися перед тим, як писати код,, 15 хвилин відео економлять годину читання документації.

PHP-код на екрані монітора крупним планом

⁉️🤔 Часті запитання

Скільки коштує використання YouTube Data API?

Сам API безплатний. Ви платите лише квотою: 10 000 одиниць на добу для кожного проєкту. Запит до /videos коштує 1 одиницю, можна отримати дані про 10 000 відео щодня без жодної копійки витрат. Для комерційного проєкту з навантаженням вище порога Google пропонує форму запиту додаткової квоти, схвалюють за адекватного обґрунтування. Окремих платних тарифів у YouTube Data API немає.

Чим YouTube Data API v3 відрізняється від парсингу HTML-сторінки?

API повертає структурований JSON із документованою схемою. У разі зміни полів Google публікує deprecation notice за кілька місяців. HTML-парсинг ламається за будь-якого редизайну сторінки, потребує емуляції браузера і прямо заборонений пунктом 3.2 Terms of Service YouTube.

Чи можна отримати дані про приватне відео?

З API-ключем, лише публічні відео. Для доступу до приватних, прихованих (unlisted) і restricted-відео потрібен OAuth 2.0 із дозволом власника. Технічно це той самий ендпоїнт /videos, але з access-токеном замість key.

Як отримати ID свого каналу YouTube?

Найнадійніший спосіб, YouTube Studio → Settings → Channel → Advanced settings. Там YouTube ID каналу показаний як є, без API-запитів. Альтернативно: викликати /channels?part=id&mine=true з OAuth-токеном. Для каналів із користувацьким іменем метод /channels?part=id&forUsername=ИМЯ працює лише для створених до 2014 року.

Що робити в разі помилки «quotaExceeded»?

Добова квота скидається о 00:00 за тихоокеанським часом (UTC-8). Тимчасове рішення, кешувати відповіді на своєму боці (файл, Redis). Для постійного збільшення: Google Cloud Console → IAM & Admin → Quotas → YouTube Data API v3 → requests per day → Edit Quota.

Куди застосувати YouTube Data API: підсумковий розклад

Ми пройшли повний цикл: ключ API, розбір параметрів ендпоїнта, вилучення ID відео з URL, GET-запит і парсинг JSON-відповіді. На виході, робочий PHP-скрипт, який за секунду дістає назву, статистику, тривалість і мініатюри будь-якого публічного відео.

Куди рухатися далі:

  • Картки відео на сайті. Вставте скрипт у бекенд WordPress (хук save_post) або Laravel, і в разі додавання посилання на YouTube інформація про відео підтягується автоматично.
  • Моніторинг конкурентів. Раз на добу збирайте viewCount і likeCount за списком каналів, таблиця з динамікою готова.
  • Автоматичний імпорт. Якщо ведете відеоблог на своєму сайті, забирайте snippet.title і snippet.description як чернетку текстового опису до вбудовування.

YouTube Data API v3, зрілий, стабільний і безплатний інструмент. Освоївши базовий виклик із цього туторіалу, ви відчиняєте двері до десятків інших методів: пошук, плейлисти, коментарі, підписки. 🔗 Офіційна документація YouTube Data API v3