Laravel Cloud is here! Zero-config managed infrastructure for Laravel apps. Deploy now.

Youtube

alaouy/youtube image

Youtube stats

Downloads
794.2K
Stars
737
Open Issues
8
Forks
209

View on GitHub →

Laravel PHP Facade/Wrapper for the Youtube Data API v3

Youtube

Laravel PHP Facade/Wrapper for the Youtube Data API v3 ( Non-OAuth )

Requirements

Looking for Youtube Package for either of these: PHP 5, Laravel 5.0, Laravel 4? Visit the php5-branch

Installation

Run in console below command to download package to your project:

composer require alaouy/youtube

Configuration

In /config/app.php add YoutubeServiceProvider (Laravel < 5.5):

Alaouy\Youtube\YoutubeServiceProvider::class,

Do not forget to add also Youtube facade there (Laravel < 5.5):

'Youtube' => Alaouy\Youtube\Facades\Youtube::class,

Publish config settings:

$ php artisan vendor:publish --provider="Alaouy\Youtube\YoutubeServiceProvider"

Set your Youtube API key in the file:

/config/youtube.php

Or in the .env file

YOUTUBE_API_KEY = KEY

Or you can set the key programmatically at run time :

Youtube::setApiKey('KEY');

Usage

// use Alaouy\Youtube\Facades\Youtube;
 
 
// Return an STD PHP object
$video = Youtube::getVideoInfo('rie-hPVJ7Sw');
 
// Get multiple videos info from an array
$videoList = Youtube::getVideoInfo(['rie-hPVJ7Sw','iKHTawgyKWQ']);
 
// Get localized video info
$video = Youtube::getLocalizedVideoInfo('vjF9GgrY9c0', 'pl');
 
// Get comment threads by videoId
$commentThreads = Youtube::getCommentThreadsByVideoId('zwiUB_Lh3iA');
 
// Get popular videos in a country, return an array of PHP objects
$videoList = Youtube::getPopularVideos('us');
 
// Search playlists, channels and videos. return an array of PHP objects
$results = Youtube::search('Android');
 
// Only search videos, return an array of PHP objects
$videoList = Youtube::searchVideos('Android');
 
// Search only videos in a given channel, return an array of PHP objects
$videoList = Youtube::searchChannelVideos('keyword', 'UCk1SpWNzOs4MYmr0uICEntg', 40);
 
// List videos in a given channel, return an array of PHP objects
$videoList = Youtube::listChannelVideos('UCk1SpWNzOs4MYmr0uICEntg', 40);
 
$results = Youtube::searchAdvanced([ /* params */ ]);
 
// Get channel data by channel name, return an STD PHP object
$channel = Youtube::getChannelByName('xdadevelopers');
 
// Get channel data by channel ID, return an STD PHP object
$channel = Youtube::getChannelById('UCk1SpWNzOs4MYmr0uICEntg');
 
// Get playlist by ID, return an STD PHP object
$playlist = Youtube::getPlaylistById('PL590L5WQmH8fJ54F369BLDSqIwcs-TCfs');
 
// Get playlists by multiple ID's, return an array of STD PHP objects
$playlists = Youtube::getPlaylistById(['PL590L5WQmH8fJ54F369BLDSqIwcs-TCfs', 'PL590L5WQmH8cUsRyHkk1cPGxW0j5kmhm0']);
 
// Get playlist by channel ID, return an array of PHP objects
$playlists = Youtube::getPlaylistsByChannelId('UCk1SpWNzOs4MYmr0uICEntg');
 
// Get items in a playlist by playlist ID, return an array of PHP objects
$playlistItems = Youtube::getPlaylistItemsByPlaylistId('PL590L5WQmH8fJ54F369BLDSqIwcs-TCfs');
 
// Get channel activities by channel ID, return an array of PHP objects
$activities = Youtube::getActivitiesByChannelId('UCk1SpWNzOs4MYmr0uICEntg');
 
// Retrieve video ID from original YouTube URL
$videoId = Youtube::parseVidFromURL('https://www.youtube.com/watch?v=moSFlvxnbgk');
// result: moSFlvxnbgk

Validation Rules

// use Alaouy\Youtube\Rules\ValidYoutubeVideo;
 
 
// Validate a YouTube Video URL
[
'youtube_video_url' => ['bail', 'required', new ValidYoutubeVideo]
];

You can use the bail rule in conjunction with this in order to prevent unnecessary queries.

Basic Search Pagination

// Set default parameters
$params = [
'q' => 'Android',
'type' => 'video',
'part' => 'id, snippet',
'maxResults' => 50
];
 
// Make intial call. with second argument to reveal page info such as page tokens
$search = Youtube::searchAdvanced($params, true);
 
// Check if we have a pageToken
if (isset($search['info']['nextPageToken'])) {
$params['pageToken'] = $search['info']['nextPageToken'];
}
 
// Make another call and repeat
$search = Youtube::searchAdvanced($params, true);
 
// Add results key with info parameter set
print_r($search['results']);
 
/* Alternative approach with new built-in paginateResults function */
 
// Same params as before
$params = [
'q' => 'Android',
'type' => 'video',
'part' => 'id, snippet',
'maxResults' => 50
];
 
// An array to store page tokens so we can go back and forth
$pageTokens = [];
 
// Make inital search
$search = Youtube::paginateResults($params, null);
 
// Store token
$pageTokens[] = $search['info']['nextPageToken'];
 
// Go to next page in result
$search = Youtube::paginateResults($params, $pageTokens[0]);
 
// Store token
$pageTokens[] = $search['info']['nextPageToken'];
 
// Go to next page in result
$search = Youtube::paginateResults($params, $pageTokens[1]);
 
// Store token
$pageTokens[] = $search['info']['nextPageToken'];
 
// Go back a page
$search = Youtube::paginateResults($params, $pageTokens[0]);
 
// Add results key with info parameter set
print_r($search['results']);

The pagination above is quite basic. Depending on what you are trying to achieve you may want to create a recursive function that traverses the results.

Manual Class Instantiation

// Directly call the YouTube constructor
$youtube = new Youtube(config('YOUTUBE_API_KEY'));
 
// By default, if the $_SERVER['HTTP_HOST'] header is set,
// it will be used as the `Referer` header. To override
// this setting, set 'use-http-host' to false during
// object construction:
$youtube = new Youtube(config('YOUTUBE_API_KEY'), ['use-http-host' => false]);
 
// This setting can also be set after the object was created
$youtube->useHttpHost(false);

Run Unit Test

If you have PHPUnit installed in your environment, run:

$ phpunit

If you don't have PHPUnit installed, you can run the following:

$ composer update
$ ./vendor/bin/phpunit

Format of returned data

The returned JSON is decoded as PHP objects (not Array). Please read the "Reference" section of the Official API doc.

Youtube Data API v3

Donation

If you find this project to be of use to you please consider buying me a cup of tea :)

Credits

Built on code from Madcoda's php-youtube-api.

alaouy photo

Lead Engineering Consultant      CTO @ dabadoc.com

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Alaouy Youtube Related Articles

PHPverse 2026 Returns June 9th image

PHPverse 2026 Returns June 9th

Read article
Migrating Laravel News from Laravel Forge to Cloud image

Migrating Laravel News from Laravel Forge to Cloud

Read article
The Neuron AI Framework for PHP and Laravel image

The Neuron AI Framework for PHP and Laravel

Read article
CodeRabbit raised $60M and celebrated with a hilarious short film image

CodeRabbit raised $60M and celebrated with a hilarious short film

Read article
All Talks for Wire:Live are Available on YouTube image

All Talks for Wire:Live are Available on YouTube

Read article
Early Bird Tickets are out for Laracon EU - Secure Your Spot by Nov 22! image

Early Bird Tickets are out for Laracon EU - Secure Your Spot by Nov 22!

Read article
Harpoon: Next generation time tracking and invoicing logo

Harpoon: Next generation time tracking and invoicing

The next generation time-tracking and billing software that helps your agency plan and forecast a profitable future.

Harpoon: Next generation time tracking and invoicing
Kirschbaum logo

Kirschbaum

Providing innovation and stability to ensure your web application succeeds.

Kirschbaum
Statamic logo

Statamic

The drop-in ready Laravel CMS you’re been waiting for. Go full-stack or headless, flat file or database – it’s up to you.

Statamic
Get expert guidance in a few days with a Laravel code review logo

Get expert guidance in a few days with a Laravel code review

Expert code review! Get clear, practical feedback from two Laravel devs with 10+ years of experience helping teams build better apps.

Get expert guidance in a few days with a Laravel code review
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS Starter Kit

SaaSykit is a Multi-tenant Laravel SaaS Starter Kit that comes with all features required to run a modern SaaS. Payments, Beautiful Checkout, Admin Panel, User dashboard, Auth, Ready Components, Stats, Blog, Docs and more.

SaaSykit: Laravel SaaS Starter Kit
Acquaint Softtech logo

Acquaint Softtech

Acquaint Softtech offers AI-ready Laravel developers who onboard in 48 hours at $3000/Month with no lengthy sales process and a 100 percent money-back guarantee.

Acquaint Softtech