
📹 YouTube Data API v3: отримання даних про відео через PHP (2026)
Навіщо парсити дані відео через API, якщо можна просто відкрити сторінку?
Ручний збір інформації про десятки відео, заняття на години. Назва, тривалість, кількість переглядів, дата публікації: копіювати це вручну з 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 для отримання інформації про відео:
1 GET https://www.googleapis.com/youtube/v3/videos
Параметри передаються як query string:
Параметр | Обов’язковий | Опис |
|---|---|---|
| Так | Список полів через кому: snippet, contentDetails, statistics, status, topicDetails та ін. |
| Так | ID відео YouTube (11 символів, наприклад |
| Так | Ваш API-ключ |
| Ні | Мова текстових полів (наприклад, |
| Ні | Кількість результатів (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 */ 8 function 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); 36 echo $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 7 if (!$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 27 if ($response === false) { 28 die('Сетевой запрос не удался. Проверьте соединение или используйте cURL.'); 29 } 30 31 $data = json_decode($response); 32 33 if (json_last_error() !== JSON_ERROR_NONE) { 34 die('Ответ API — не JSON. Возможно, ключ недействителен.'); 35 } 36 37 // API возвращает ошибку в поле error, а не HTTP-статусом 38 if (isset($data->error)) { 39 die('Ошибка API: ' . $data->error->message); 40 } 41 42 if (empty($data->items)) { 43 die('Видео с таким ID не найдено.'); 44 } 45 46 $video = $data->items[0]; 47 48 echo 'Название: ' . $video->snippet->title . PHP_EOL; 49 echo 'Канал: ' . $video->snippet->channelTitle . PHP_EOL; 50 echo 'Опубликовано: ' . $video->snippet->publishedAt . PHP_EOL; 51 echo 'Длительность: ' . $video->contentDetails->duration . PHP_EOL; 52 echo 'Просмотров: ' . number_format($video->statistics->viewCount ?? 0) . PHP_EOL; 53 echo 'Лайков: ' . number_format($video->statistics->likeCount ?? 0) . PHP_EOL; 54 echo 'Комментариев: ' . number_format($video->statistics->commentCount ?? 0) . PHP_EOL; 55 56 // URL миниатюры максимального разрешения 57 if (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(); 2 curl_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); 10 curl_close($ch); 11 12 if ($httpCode !== 200 || $response === false) { 13 die('Запрос не удался. HTTP-код: ' . $httpCode); 14 }
Готова бібліотека: madcoda/php-youtube-api
Писати обв’язку вручну для продакшену, зайва робота. Для проєктів, де потрібна не разова вибірка, а регулярна робота з API, є madcoda/php-youtube-api, легковажна PHP-обгортка без зовнішніх залежностей. Встановлення:
1 composer require madcoda/php-youtube-api
Використання:
1 $youtube = new Madcoda\Youtube(['key' => 'ВАШ_КЛЮЧ']); 2 $video = $youtube->getVideoInfo('1ejTKov_Sm4'); 3 4 echo $video->snippet->title; 5 echo $video->statistics->viewCount;
Бібліотека закриває рутину: пагінацію, повторні запити, форматування тривалості з ISO 8601 у зручний для читання вигляд. Для разових скриптів, надлишково; для працюючого сервісу, виправдано.
Відеопосібник вище наочно показує весь процес: від увімкнення API в консолі до першого успішного запиту. Рекомендуємо подивитися перед тим, як писати код,, 15 хвилин відео економлять годину читання документації.

⁉️🤔 Часті запитання
Скільки коштує використання 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



