PHP (Laravel) Package for Google / YouTube API V3 with Google Auth
composer require 0duddu/youtube-laravel-api
Add Service provider to config/app.php provider's array:
ZeroDUDDU\YoutubeLaravelApi\YoutubeLaravelApiServiceProvider::class
Execute the following command to get the configurations:
php artisan vendor:publish --tag='youtube-config'
- Goto
https://console.developers.google.com
- Login with your credentials & then create a new project.
- Enable the following features while creating key
- Youtube Data API
- Youtube Analytics API
- Youtube Reporting API
- Then create
API key
from credentials tab. - Then in OAuth Consent Screen enter the
product name
(your site name). - create credentials > select OAuth Client ID. (here you will get client_id and client_secret)
- Then in the Authorized Javascript Origins section add
you site url
. - In the Authorized Redirect URLs section add
add a url which you want the auth code to return
(login callback) - You will get values (to be exact - client_id, client_secret & api_key)
- Then add these values - client_id, client_secret, api_key and redirect_url in the env file and you can start using the package now.
- Add Code to call the api class
<?php
namespace Your\App\NameSpace;
use ZeroDUDDU\YoutubeLaravelApi\AuthenticateService;
- Generating an Auth-Url
$authObject = new AuthenticateService;
# Replace the identifier with a unqiue identifier for account or channel
$authUrl = $authObject->getLoginUrl('email','identifier');
- Fetching the Auth Code and Identifier Now once the user authorizes by visiting the url, the authcode will be redirected to the redirect_url specified in .env with params as code( this will be auth code) and state (this will be identifier we added during making the loginUrl)
$code = $request->get('code');
$identifier = $request->get('state');
- Auth-Token and Details For Channel
$authObject = new AuthenticateService;
$authResponse = $authObject->authChannelWithCode($code, true);
- This will return an array:
$authResponse['token'] (Channel Token)
$authResponse['channel_details']
$authResponse['live_streaming_status'] (enabled or disabled)
- Auth-Token only
$authObject = new AuthenticateService;
$authResponse = $authObject->authChannelWithCode($code, false);
- This will return an array:
$authResponse['token'] (Channel Token)
- Refresh Token
If your token expires, it will be refreshed using the refresh token, and the new token will be available by calling
getNewToken()
on any object. It will return null if no new token has been fetched.
- Add Code to call the api class
<?php
namespace Your\App\NameSpace;
use ZeroDUDDU\YoutubeLaravelApi\LiveStreamService;
- Creating a Youtube Event
# data format creating live event
$data = array(
"thumbnail_path" => "", // Optional
"event_start_date_time" => "",
"event_end_date_time" => "", // Optional
"time_zone" => "",
'privacy_status' => "", // default: "private"
"language_name" => "", // default: "English"
"tag_array" => "" // Optional and should not be more than 500 characters
);
$ytEventObj = new LiveStreamService($authToken);
/**
* The broadcast function returns array of details from YouTube.
* Store this information & will be required to supply to youtube
* for live streaming using encoder of your choice.
*/
$response = $ytEventObj->broadcast($title, $description, $data);
if ( !empty($response) ) {
$youtubeEventId = $response['broadcast_response']['id'];
$serverUrl = $response['stream_response']['cdn']->ingestionInfo->ingestionAddress;
$serverKey = $response['stream_response']['cdn']->ingestionInfo->streamName;
}
- Updating a Youtube Event
$ytEventObj = new LiveStreamService($authToken);
/**
* The updateBroadcast response give details of the youtube_event_id,server_url and server_key.
* The server_url & server_key gets updated in the process. (save the updated server_key and server_url).
*/
$response = $ytEventObj->updateBroadcast($data, $youtubeEventId);
// $youtubeEventId = $response['broadcast_response']['id'];
// $serverUrl = $response['stream_response']['cdn']->ingestionInfo->ingestionAddress;
// $serverKey = $response['stream_response']['cdn']->ingestionInfo->streamName
- Deleting a Youtube Event
$ytEventObj = new LiveStreamService($authToken);
# Deleting the event requires authentication token for the channel in which the event is created and the youtube_event_id
$ytEventObj->deleteEvent($youtubeEventId);
- Starting a Youtube Event Stream:
$ytEventObj = new LiveStreamService($authToken);
/**
* $broadcastStatus - ["testing", "live"]
* Starting the event takes place in 3 steps
* 1. Start sending the stream to the server_url via server_key recieved as a response in creating the event via the encoder of your choice.
* 2. Once stream sending has started, stream test should be done by passing $broadcastStatus="testing" & it will return response for stream status.
* 3. If transitioEvent() returns successfull for testing broadcast status, then start live streaming your video by passing $broadcastStatus="live"
* & in response it will return us the stream status.
*/
$streamStatus = $ytEventObj->transitionEvent($youtubeEventId, $broadcastStatus);
- Stopping a Youtube Event Stream
$ytEventObj = new LiveStreamService($authToken);
/**
* $broadcastStatus - ["complete"]
* Once live streaming gets started succesfully. We can stop the streaming the video by passing broadcastStatus="complete" and in response it will give us the stream status.
*/
$ytEventObj->transitionEvent($youtubeEventId, $broadcastStatus); // $broadcastStatus = ["complete"]
- Add Code to call the api class
<?php
namespace Your\App\NameSpace;
use ZeroDUDDU\YoutubeLaravelApi\ChannelService;
- Channel details By Channel Id If you want channel details for multiple channels add channel id saperated by commas(,) in param
/**
* [channelsListById -gets the channnel details and ]
* $part 'id,snippet,contentDetails,status, statistics, contentOwnerDetails, brandingSettings'
* $params [array channels id(comma separated ids ) or you can get ('forUsername' => 'GoogleDevelopers')]
*/
$part = 'id,snippet';
$params = array('id'=> 'channel_1_id,channel_2_id');
$channelServiceObject = new ChannelService($authToken);
$channelDetails = $channelServiceObject->channelsListById($part, $params);
- Channel Detail by Token Channel Details of the users channel which has authorized token
$channelServiceObject = new ChannelService;
$channelDetails = $channelServiceObject->getChannelDetails($authToken);
- Channel Subscription List List of subscriptions of the channel
/*
* $params array('channelId'=>'', 'totalResults'= 10)
* totalResults is different of maxResults from Google Api.
* totalResults = the amount of results you want
* maxResults = max of results PER PAGE. We don't need this parameter here since it will loop until it gets all the results you want.
*/
$channelServiceObject = new ChannelService($authToken);
$channelDetails = $channelServiceObject->subscriptionByChannelId($params);
- Add Subscriptions For Authorized Channel
/*
* properties array('snippet.resourceId.kind' => 'youtube#channel','snippet.resourceId.channelId' => 'UCqIOaYtQak4-FD2-yI7hFkw')
*/
$channelServiceObject = new ChannelService;
$response = $channelServiceObject->addSubscriptions($properties, $token, $part='snippet', $params=[]);
-Remove Subscriptions For Authorized Channel To remove subscription we need subscription id which can be found from subscription list.
$response = $channelServiceObject->removeSubscription( $token, $subscriptionId);
- Update Channel Branding Settings Updates the channel details and preferences.
/*
* $properties array('id' => '',
* 'brandingSettings.channel.description' => '',
* 'brandingSettings.channel.keywords' => '',
* 'brandingSettings.channel.defaultLanguage' => '',
* 'brandingSettings.channel.defaultTab' => '',
* 'brandingSettings.channel.moderateComments' => '',
* 'brandingSettings.channel.showRelatedChannels' => '',
* 'brandingSettings.channel.showBrowseView' => '',
* 'brandingSettings.channel.featuredChannelsTitle' => '',
* 'brandingSettings.channel.featuredChannelsUrls[]' => '',
* 'brandingSettings.channel.unsubscribedTrailer' => '')
*/
$channelServiceObject = new ChannelService($authToken);
$response = $channelServiceObject->updateChannelBrandingSettings($properties);
- Add Code to call the api class
<?php
namespace Your\App\NameSpace;
use ZeroDUDDU\YoutubeLaravelApi\VideoService;
- List Video By Id
$part ='snippet,contentDetails,id,statistics';
$params =['id'=>'xyzgh'];
$videoServiceObject = new VideoService($authToken);
$response = $videoServiceObject->videosListById($part, $params);
- Upload Video To Your Channel
$videoServiceObject = new VideoService($authToken);
$response = $videoServiceObject->uploadVideo($videoPath, $title, $description, $categoryId, $privacyStatus, $tags, $data);
- Delete Video To Your Channel
$videoServiceObject = new VideoService($authToken);
$response = $videoServiceObject->deleteVideo($videoId);
- Rate Video Adding a like, dislike or removing the response from video
# rating 'like' or 'dislike' or 'none'
$videoServiceObject = new VideoService($authToken);
$response = $videoServiceObject->videosRate( $videoId, $rating);