Introduction

In this article, I will explain how to get the YouTube Channel Playlist Videos in SharePoint Content Editor Web Part. The YouTube custom Web Part either selects a random YouTube video, a specific video, or channel videos from the specified SharePoint List or directly from YouTube. The Web Part can also be used to display a single static video or a YouTube Channel by specifying a YouTube URL field. The Web Part can be used with SharePoint 2010 and SharePoint 2013.

Prerequisite

The following prerequisite needs to be followed before getting YouTube Channel videos.

  1. Create the publishing site collection in SharePoint.

  2. Navigate to Site and click on “Settings” wheel. Click on “Add an app” or go to “View All site Content”. Then, click “Add an App”.

    Add an App

  3. Select “Pages” from the “Your Apps” page.

    Pages

  4. Click on Files -> New Document -> Pages.

    Pages

  5. Give Title, Description, URL Name, and select the Page Layout.

    Description

  6. Click on "Create" to create the page in "Page Library".

    Create

  7. Open the newly created page.

  8. Edit the page and click on “Add a Web Part”.

    Add a WebPart

  9. Add “Content Editor” Web Part from “Media and Content” category.

    Media and Content

  10. Now content editor Web Part gets added to the SharePoint page.

    content editor webpart

Get YouTube Channel Videos in Content Editor Web Part

  1. Click on “Edit Source” in “Format Text” tab of content editor Web Part.

    Edit Source

  2. HTML Source window will pop up.

    HTML Source

  3. Download any jQuery plugin JS file and add the JS file to any document library, like Style Library.

  4. Download the below Youmax JavaScript file and add the JS file to any document library, like Style Library.
    1. var youmax_global_options = {};
    2. (function ($) {
    3. var secondsToTime = function(duration) {
    4. if(null==duration||duration==""||duration=="undefined")
    5. return "?";
    6. var minutes = Math.floor(duration/60);
    7. //alert(minutes);
    8. var seconds = duration%60;
    9. if(seconds<10)
    10. seconds = "0"+seconds;
    11. var time = minutes+":"+seconds;
    12. return time;
    13. //alert()
    14. },
    15. //utility function to display time
    16. convertDuration = function(videoDuration) {
    17. var duration,returnDuration;
    18. videoDuration = videoDuration.replace('PT','').replace('S','').replace('M',':').replace('H',':');
    19. //TODO: fix some duration settings
    20. //console.log('videoDuration-'+videoDuration);
    21. var videoDurationSplit = videoDuration.split(':');
    22. returnDuration = videoDurationSplit[0];
    23. for(var i=1; i<videoDurationSplit.length; i++) {
    24. duration = videoDurationSplit[i];
    25. ////console.log('duration-'+duration);
    26. if(duration=="") {
    27. returnDuration+=":00";
    28. } else {
    29. duration = parseInt(duration,10);
    30. ////console.log('duration else -'+duration)
    31. if(duration<10) {
    32. returnDuration+=":0"+duration;
    33. } else {
    34. returnDuration+=":"+duration;
    35. }
    36. }
    37. }
    38. if(videoDurationSplit.length==1) {
    39. returnDuration="0:"+returnDuration;
    40. }
    41. return returnDuration;
    42. },
    43. getDateDiff = function(timestamp) {
    44. if(null==timestamp||timestamp==""||timestamp=="undefined")
    45. return "?";
    46. //alert(timestamp);
    47. var splitDate=((timestamp.toString().split('T'))[0]).split('-');
    48. var d1 = new Date();
    49. var d1Y = d1.getFullYear();
    50. var d2Y = parseInt(splitDate[0],10);
    51. var d1M = d1.getMonth();
    52. var d2M = parseInt(splitDate[1],10);
    53. var diffInMonths = (d1M+12*d1Y)-(d2M+12*d2Y);
    54. /*alert(d1Y);
    55. alert(d2Y);
    56. alert(d1M);
    57. alert(d2M);
    58. alert(diffInMonths);
    59. */
    60. if(diffInMonths<=1)
    61. return "1 month";
    62. else if(diffInMonths<12)
    63. return diffInMonths+" months";
    64. var diffInYears = Math.floor(diffInMonths/12);
    65. if(diffInYears<=1)
    66. return "1 year";
    67. else if(diffInYears<12)
    68. return diffInYears+" years";
    69. },
    70. getReadableNumber = function(number) {
    71. if(null==number||number==""||number=="undefined")
    72. return "?";
    73. number=number.toString();
    74. var readableNumber = '';
    75. var count=0;
    76. for(var k=number.length; k>=0;k--) {
    77. readableNumber+=number.charAt(k);
    78. if(count==3&&k>0) {
    79. count=1;
    80. readableNumber+=',';
    81. } else {
    82. count++;
    83. }
    84. }
    85. return readableNumber.split("").reverse().join("");
    86. },
    87. loadYoumax = function() {
    88. youmaxWidgetWidth = $('#youmax').width();
    89. $('#youmax').append('<div id="youmax-header"><div id="youmax-stat-holder"></div></div>');
    90. //$('#youmax').append('<div id="youmax-tabs"></div>');
    91. $('#youmax').append('<div id="youmax-tabs"><span id="featured_" class="youmax-tab">Featured</span><span id="uploads_" class="youmax-tab">Uploads</span><span id="playlists_" class="youmax-tab">Playlists</span></div>');
    92. $('#youmax').append('<div id="youmax-encloser"><iframe id="youmax-video" width="'+(youmaxWidgetWidth-2)+'" height="'+(youmaxWidgetWidth/youmax_global_options.youtubeVideoAspectRatio)+'" src="" frameborder="0" allowfullscreen></iframe><div id="youmax-video-list-div"></div><div id="youmax-load-more-div">LOAD MORE</div></div>');
    93. $('#youmax-video').hide();
    94. $('#youmax').append('<div id="youmax-lightbox"><div style="width:100%; position:absolute; top:20%;"><iframe id="youmax-video-lightbox" width="640" height="360" src="" frameborder="0" allowfullscreen></iframe></div></div>');
    95. $('#youmax-lightbox').hide();
    96. },
    97. //get channel Id if channel URL is of the form ....../user/Adele
    98. getChannelId = function(apiUrl) {
    99. //console.log('inside getChannelId');
    100. //console.log('apiUrl-'+apiUrl);
    101. //showLoader();
    102. $.ajax({
    103. url: apiUrl,
    104. type: "GET",
    105. async: true,
    106. cache: true,
    107. dataType: 'jsonp',
    108. success: function(response) {
    109. youmaxChannelId = response.items[0].id
    110. getChannelDetails(youmaxChannelId);
    111. },
    112. error: function(html) { alert(html); },
    113. beforeSend: setHeader
    114. });
    115. },
    116. getChannelDetails = function(channelId) {
    117. //var apiProfileURL = "http://gdata.youtube.com/feeds/api/users/"+youmaxUser+"?v=2&alt=json";
    118. var apiProfileURL = "https://www.googleapis.com/youtube/v3/channels?part=brandingSettings%2Csnippet%2Cstatistics%2CcontentDetails&id="+channelId+"&key="+youmax_global_options.apiKey;
    119. $.ajax({
    120. url: apiProfileURL,
    121. type: "GET",
    122. async: true,
    123. cache: true,
    124. dataType: 'jsonp',
    125. success: function(response) { showInfo(response);},
    126. error: function(html) { alert(html); },
    127. beforeSend: setHeader
    128. });
    129. },
    130. setHeader = function(xhr) {
    131. if(xhr && xhr.overrideMimeType) {
    132. xhr.overrideMimeType("application/j-son;charset=UTF-8");
    133. }
    134. },
    135. showLoader = function() {
    136. youmax_global_options.youmaxItemCount = 0;
    137. $('#youmax-video-list-div').empty();
    138. $('#youmax-video').hide();
    139. $('#youmax-video').attr('src','');
    140. $('#youmax-video-list-div').append('<div style="text-align:center; height:200px; font:14px Calibri;"><br><br><br><br><br><br>loading...</div>');
    141. },
    142. initFeaturedVideos = function () {
    143. youTubePlaylistURL = youmax_global_options.youTubePlaylistURL;
    144. console.log('inside init featured - '+youTubePlaylistURL);
    145. if(null!=youTubePlaylistURL&&youTubePlaylistURL.indexOf("youtube.com/playlist?list=")!=-1) {
    146. youmaxFeaturedPlaylistId = youTubePlaylistURL.substring(youTubePlaylistURL.indexOf("?list=")+6);
    147. youmax_global_options.youmaxFeaturedPlaylistId = youmaxFeaturedPlaylistId;
    148. }
    149. },
    150. showInfo = function(response) {
    151. console.log('showInfo');
    152. console.log(response);
    153. var channelData = response.items[0];
    154. var channelId = channelData.id;
    155. var channelName = channelData.snippet.title;
    156. var channelPic = channelData.snippet.thumbnails.default.url;
    157. var channelSubscribers = channelData.statistics.subscriberCount;
    158. var channelViews = channelData.statistics.viewCount;
    159. var channelDesc = "";
    160. var channelUploadsPlaylistId = channelData.contentDetails.relatedPlaylists.uploads;
    161. $('#youmax-header').append('<img id="youmax-header-logo" src="'+channelPic+'"/>'+channelName);
    162. $('#youmax-header').append(' <div class="youmax-subscribe"><div class="g-ytsubscribe" data-channelid="'+channelId+'" data-layout="default" data-count="default"></div></div>');
    163. //$('#youmax-stat-holder').append('<div class="youmax-stat">'+channelSubscribers+'<br/> subscribers </div><div class="youmax-stat">'+channelViews+'<br/>video views</div>');
    164. //$('#youmax-stat-holder').append('<div class="youmax-stat"><span class="youmax-stat-count">'+getReadableNumber(channelViews)+'</span><br/> video views </div><div class="youmax-stat"><span class="youmax-stat-count">'+getReadableNumber(channelSubscribers)+'</span><br/>subscribers</div>');
    165. //$('#youmax-channel-desc').append('About '+channelName+'<br/>'+channelDesc);
    166. renderSubscribeButton();
    167. $('#youmax-tabs').find('span[id^=uploads_]').attr('id','uploads_'+channelUploadsPlaylistId);
    168. youmaxDefaultTab = youmax_global_options.youmaxDefaultTab;
    169. if(typeof youmaxDefaultTab === 'undefined'||null==youmaxDefaultTab||youmaxDefaultTab==""||youmaxDefaultTab=="undefined") {
    170. $("#youmax-tabs span[id^=featured_]").click();
    171. } else if(youmaxDefaultTab.toUpperCase()=='UPLOADS'||youmaxDefaultTab.toUpperCase()=='UPLOAD') {
    172. $("#youmax-tabs span[id^=uploads_]").click();
    173. } else if(youmaxDefaultTab.toUpperCase()=='PLAYLISTS'||youmaxDefaultTab.toUpperCase()=='PLAYLIST') {
    174. $("#youmax-tabs span[id^=playlists_]").click();
    175. } else if(youmaxDefaultTab.toUpperCase()=='FEATURED'||youmaxDefaultTab.toUpperCase()=='FEATURED') {
    176. $("#youmax-tabs span[id^=featured_]").click();
    177. }
    178. },
    179. renderSubscribeButton = function() {
    180. $.ajaxSetup({
    181. cache: true
    182. });
    183. $.getScript("https://apis.google.com/js/platform.js")
    184. .done(function( script, textStatus ) {
    185. //alert( textStatus );
    186. })
    187. .fail(function( jqxhr, settings, exception ) {
    188. //alert( "Triggered ajaxError handler." );
    189. });
    190. },
    191. showPlaylists = function(response,loadMoreFlag) {
    192. console.log(response);
    193. if(!loadMoreFlag) {
    194. $('#youmax-video-list-div').empty();
    195. }
    196. var nextPageToken = response.nextPageToken;
    197. var $youmaxLoadMoreDiv = $('#youmax-load-more-div');
    198. //console.log('nextPageToken-'+nextPageToken);
    199. if(null!=nextPageToken && nextPageToken!="undefined" && nextPageToken!="") {
    200. $youmaxLoadMoreDiv.data('nextpagetoken',nextPageToken);
    201. } else {
    202. $youmaxLoadMoreDiv.data('nextpagetoken','');
    203. }
    204. youmaxColumns = youmax_global_options.youmaxColumns;
    205. var playlistArray = response.items;
    206. var playlistIdArray = [];
    207. var zeroPlaylistCompensation = 0;
    208. for(var i=0; i<playlistArray.length; i++) {
    209. playListId = playlistArray[i].id;
    210. playlistSize = playlistArray[i].contentDetails.itemCount;
    211. if(playlistSize<=0){
    212. zeroPlaylistCompensation++;
    213. continue;
    214. }
    215. playlistIdArray.push(playListId);
    216. playlistTitle = playlistArray[i].snippet.title;
    217. playlistUploaded = playlistArray[i].snippet.publishedAt;
    218. playlistThumbnail = playlistArray[i].snippet.thumbnails.medium.url;
    219. //playlistThumbnail = playlistThumbnail.replace("hqdefault","mqdefault");
    220. if((i+youmax_global_options.youmaxItemCount-zeroPlaylistCompensation)%youmaxColumns!=0)
    221. $('#youmax-video-list-div').append('<div class="youmax-video-tnail-box" style="width:'+((100/youmaxColumns)-4)+'%;" id="'+playListId+'"><div class="youmax-video-tnail" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src=\''+playlistThumbnail+'\', sizingMethod=\'scale\'); background-image:url(\''+playlistThumbnail+'\')"><div class="youmax-playlist-sidebar" id="youmax-playlist-sidebar-'+playListId+'"><span class="youmax-playlist-video-count"><b>'+playlistSize+'</b><br/>VIDEOS</span></div></div><span class="youmax-video-list-title">'+playlistTitle+'</span><br/><span class="youmax-video-list-views">'+getDateDiff(playlistUploaded)+' ago</span></div>');
    222. else
    223. $('#youmax-video-list-div').append('<div class="youmax-video-tnail-box" style="width:'+((100/youmaxColumns)-4)+'%; clear:both;" id="'+playListId+'"><div class="youmax-video-tnail" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src=\''+playlistThumbnail+'\', sizingMethod=\'scale\'); background-image:url(\''+playlistThumbnail+'\')"><div class="youmax-playlist-sidebar" id="youmax-playlist-sidebar-'+playListId+'"><span class="youmax-playlist-video-count"><b>'+playlistSize+'</b><br/>VIDEOS</span></div></div><span class="youmax-video-list-title">'+playlistTitle+'</span><br/><span class="youmax-video-list-views">'+getDateDiff(playlistUploaded)+' ago</span></div>');
    224. }
    225. youmax_global_options.youmaxItemCount+=playlistArray.length-zeroPlaylistCompensation;
    226. //console.log(playlistIdArray);
    227. $('.youmax-video-tnail-box').click(function() {
    228. //alert(this.id);
    229. showLoader();
    230. playlistTitle = $(this).find(".youmax-video-list-title").text();
    231. getUploads("play_"+this.id,playlistTitle);
    232. //getPlaylistVideos(this.id);
    233. });
    234. /* not sure why this is needed
    235. var youmaxTnailWidth = $('.youmax-video-tnail').css('width');
    236. youmaxTnailWidth=youmaxTnailWidth.substring(0,youmaxTnailWidth.indexOf("px"));
    237. var youmaxTnailHeight = youmaxTnailWidth/youtubeMqdefaultAspectRatio;
    238. //$('html > head').append('<style>.youmax-video-tnail{height:'+youmaxTnailHeight+'px;}</style>');
    239. $('div.youmax-video-tnail').css({'height':youmaxTnailHeight+'px'});
    240. */
    241. /*
    242. if(youmaxTnailHeight<130) {
    243. maxTopVideos = 3;
    244. $('html > head').append('<style>.youmax-playlist-video-count{margin: 10%;margin-top: 15%;}.youmax-playlist-sidebar-video{margin: 8% auto;}</style>');
    245. //$('div.youmax-playlist-video-count').css({'margin':'10%','margin-top':'15%'});
    246. //$('div.youmax-playlist-sidebar-video').css({'margin':'8% auto'});
    247. } else {
    248. maxTopVideos = 4;
    249. }*/
    250. resetLoadMoreButton();
    251. //console.log(youmaxTnailWidth);
    252. //console.log(youmaxTnailHeight);
    253. //getTopVideosFromPlaylist(playlistIdArray,maxTopVideos);
    254. },
    255. showUploads = function(response,playlistTitle,loadMoreFlag) {
    256. console.log(response);
    257. if(!loadMoreFlag) {
    258. $('#youmax-video-list-div').empty();
    259. if(playlistTitle) {
    260. $('.youmax-tab-hover').removeClass('youmax-tab-hover');
    261. $('#youmax-video-list-div').append('<span class="youmax-showing-title youmax-tab-hover" id="uploads_'+response.items[0].snippet.playlistId+'" style="max-width:100%;"><span class="youmax-showing"> Showing playlist: </span>'+playlistTitle+'</span><br/>');
    262. }
    263. }
    264. var nextPageToken = response.nextPageToken;
    265. var $youmaxLoadMoreDiv = $('#youmax-load-more-div');
    266. //console.log('nextPageToken-'+nextPageToken);
    267. youmaxColumns = youmax_global_options.youmaxColumns;
    268. if(null!=nextPageToken && nextPageToken!="undefined" && nextPageToken!="") {
    269. $youmaxLoadMoreDiv.data('nextpagetoken',nextPageToken);
    270. } else {
    271. $youmaxLoadMoreDiv.data('nextpagetoken','');
    272. }
    273. var uploadsArray = response.items;
    274. var videoIdArray = [];
    275. for(var i=0; i<uploadsArray.length; i++) {
    276. videoId = uploadsArray[i].snippet.resourceId.videoId;
    277. videoTitle = uploadsArray[i].snippet.title;
    278. //videoViewCount = uploadsArray[i].snippet.viewCount;
    279. //videoDuration = uploadsArray[i].snippet.duration;
    280. videoUploaded = uploadsArray[i].snippet.publishedAt;
    281. videoThumbnail = uploadsArray[i].snippet.thumbnails.medium.url;
    282. //videoThumbnail = videoThumbnail.replace("hqdefault","mqdefault");
    283. videoIdArray.push(videoId);
    284. //$('#youmax-video-list-div').append('<div class="youmax-video-tnail-box" style="width:'+((100/youmaxColumns)-4)+'%;" id="'+videoId+'"><div class="youmax-video-tnail" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src=\''+videoThumbnail+'\', sizingMethod=\'scale\'); background-image:url(\''+videoThumbnail+'\')"><div class="youmax-duration">'+secondsToTime(videoDuration)+'</div></div><span class="youmax-video-list-title">'+videoTitle+'</span><br/><span class="youmax-video-list-views">'+getReadableNumber(videoViewCount)+' views | '+getDateDiff(videoUploaded)+' ago</span></div>');
    285. if((i+youmax_global_options.youmaxItemCount)%youmaxColumns!=0)
    286. $('#youmax-video-list-div').append('<div class="youmax-video-tnail-box" style="width:'+((100/youmaxColumns)-4)+'%;" id="'+videoId+'"><div class="youmax-video-tnail" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src=\''+videoThumbnail+'\', sizingMethod=\'scale\'); background-image:url(\''+videoThumbnail+'\')"><div class="youmax-duration"></div></div><span class="youmax-video-list-title">'+videoTitle+'</span><br/><span class="youmax-video-list-views">'+getDateDiff(videoUploaded)+' ago</span></div>');
    287. else
    288. $('#youmax-video-list-div').append('<div class="youmax-video-tnail-box" style="width:'+((100/youmaxColumns)-4)+'%; clear:both;" id="'+videoId+'"><div class="youmax-video-tnail" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src=\''+videoThumbnail+'\', sizingMethod=\'scale\'); background-image:url(\''+videoThumbnail+'\')"><div class="youmax-duration"></div></div><span class="youmax-video-list-title">'+videoTitle+'</span><br/><span class="youmax-video-list-views">'+getDateDiff(videoUploaded)+' ago</span></div>');
    289. }
    290. youmax_global_options.youmaxItemCount+=uploadsArray.length;
    291. $('.youmax-video-tnail-box').click(function(){
    292. //alert(this.id);
    293. //alert(showVideoInLightbox);
    294. if(youmax_global_options.showVideoInLightbox){
    295. showVideoLightbox(this.id);
    296. } else {
    297. $('#youmax-video').attr('src','https://www.youtube.com/embed/'+this.id);
    298. $('#youmax-video').show();
    299. $('html,body').animate({scrollTop: $("#youmax-header").offset().top},'slow');
    300. }
    301. });
    302. // not sure why this is needed
    303. /*var youmaxTnailWidth = $('.youmax-video-tnail').css('width');
    304. youmaxTnailWidth=youmaxTnailWidth.substring(0,youmaxTnailWidth.indexOf("px"));
    305. var youmaxTnailHeight = youmaxTnailWidth/youmax_global_options.youtubeMqdefaultAspectRatio;
    306. //$('html > head').append('<style>.youmax-video-tnail{height:'+youmaxTnailHeight+'px;}</style>');
    307. $('div.youmax-video-tnail').css({'height':youmaxTnailHeight+'px'});*/
    308. getVideoStats(videoIdArray);
    309. resetLoadMoreButton();
    310. },
    311. //get video stats using Youtube API
    312. getVideoStats = function(videoIdList) {
    313. //console.log('inside getVideoStats');
    314. //console.log(videoIdList);
    315. //showLoader();
    316. apiVideoStatURL = "https://www.googleapis.com/youtube/v3/videos?part=statistics%2CcontentDetails&id="+videoIdList+"&key="+youmax_global_options.apiKey;
    317. $.ajax({
    318. url: apiVideoStatURL,
    319. type: "GET",
    320. async: true,
    321. cache: true,
    322. dataType: 'jsonp',
    323. success: function(response) { displayVideoStats(response);},
    324. error: function(html) { alert(html); },
    325. beforeSend: setHeader
    326. });
    327. },
    328. //display video statistics
    329. displayVideoStats = function(response) {
    330. //console.log(response);
    331. var videoArray = response.items;
    332. var $videoThumbnail;
    333. for(var i=0; i<videoArray.length; i++) {
    334. videoId = videoArray[i].id;
    335. videoViewCount = videoArray[i].statistics.viewCount;
    336. videoViewCount = getReadableNumber(videoViewCount);
    337. videoDuration = videoArray[i].contentDetails.duration;
    338. //console.log('videoDuration-'+videoDuration);
    339. videoDuration = convertDuration(videoDuration);
    340. videoDefinition = videoArray[i].contentDetails.definition.toUpperCase();
    341. $videoThumbnail = $('#youmax-video-list-div #'+videoId);
    342. $videoThumbnail.find('.youmax-video-list-views').prepend(videoViewCount+' views | ');
    343. $videoThumbnail.find('.youmax-duration').append(videoDuration);
    344. //$videoThumbnail.append('<div class="youmax-definition">'+videoDefinition+'</div>');
    345. }
    346. },
    347. getUploads = function(youmaxTabId,playlistTitle,nextPageToken) {
    348. //showLoader();
    349. //var apiUploadURL = "http://gdata.youtube.com/feeds/api/users/"+youmaxUser+"/uploads/?v=2&alt=jsonc&max-results=50";
    350. var pageTokenUrl = "";
    351. var loadMoreFlag = false;
    352. if(null!=nextPageToken) {
    353. pageTokenUrl = "&pageToken="+nextPageToken;
    354. loadMoreFlag = true;
    355. }
    356. var uploadsPlaylistId = youmaxTabId.substring(youmaxTabId.indexOf('_')+1);
    357. var apiUploadURL = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId="+uploadsPlaylistId+"&maxResults="+youmax_global_options.maxResults+pageTokenUrl+"&key="+youmax_global_options.apiKey;
    358. console.log('apiUploadURL-'+apiUploadURL);
    359. $.ajax({
    360. url: apiUploadURL,
    361. type: "GET",
    362. async: true,
    363. cache: true,
    364. dataType: 'jsonp',
    365. success: function(response) { showUploads(response,playlistTitle,loadMoreFlag);},
    366. error: function(html) { alert(html); },
    367. beforeSend: setHeader
    368. });
    369. },
    370. getPlaylists = function(nextPageToken) {
    371. var pageTokenUrl = "";
    372. var loadMoreFlag = false;
    373. if(null!=nextPageToken) {
    374. pageTokenUrl = "&pageToken="+nextPageToken;
    375. loadMoreFlag = true;
    376. }
    377. var apiChannelPlaylistsURL = "https://www.googleapis.com/youtube/v3/playlists?part=contentDetails,snippet&channelId="+youmaxChannelId+"&maxResults="+youmax_global_options.maxResults+pageTokenUrl+"&key="+youmax_global_options.apiKey;
    378. //var apiPlaylistURL = "https://gdata.youtube.com/feeds/api/users/"+youmaxUser+"/playlists?v=2&alt=jsonc&max-results=50";
    379. $.ajax({
    380. url: apiChannelPlaylistsURL,
    381. type: "GET",
    382. async: true,
    383. cache: true,
    384. dataType: 'jsonp',
    385. success: function(response) { showPlaylists(response,loadMoreFlag);},
    386. error: function(html) { alert(html); },
    387. beforeSend: setHeader
    388. });
    389. },
    390. showVideoLightbox = function(videoId) {
    391. $('#youmax-lightbox').show();
    392. $('#youmax-video-lightbox').attr('src','http://www.youtube.com/embed/'+videoId);
    393. $('#youmax-lightbox').click(function(){
    394. $('#youmax-video-lightbox').attr('src','');
    395. $('#youmax-lightbox').hide();
    396. });
    397. },
    398. resetLoadMoreButton = function() {
    399. var $youmaxLoadMoreDiv = $('#youmax-load-more-div');
    400. $youmaxLoadMoreDiv.removeClass('youmax-load-more-div-click');
    401. $youmaxLoadMoreDiv.text('LOAD MORE');
    402. },
    403. prepareYoumax = function() {
    404. $('#youmax').empty();
    405. /*
    406. if(youTubeChannelURL.indexOf("youtube.com/user/")!=-1) {
    407. if(null!=youTubeChannelURL&&youTubeChannelURL.indexOf("?feature")!=-1)
    408. youmaxUser = youTubeChannelURL.substring(youTubeChannelURL.indexOf("youtube.com/user/")+17,youTubeChannelURL.indexOf("?feature"));
    409. else
    410. youmaxUser = youTubeChannelURL.substring(youTubeChannelURL.indexOf("youtube.com/user/")+17);
    411. }
    412. console.log('youTubeChannelURL-'+youTubeChannelURL);
    413. console.log('youmaxUser-'+youmaxUser);
    414. //youmaxUser = 'UCVUZWBzxM7w8ug87qYwkBLg';
    415. //youmaxUser = 'AdeleVEVO';
    416. */
    417. loadYoumax();
    418. showLoader();
    419. $('.youmax-tab').click(function(){
    420. $('.youmax-tab-hover').removeClass('youmax-tab-hover');
    421. $(this).addClass('youmax-tab-hover');
    422. //$('.youmax-tab').css('color','#666');
    423. //$('.youmax-tab').css('background-color','#e6e6e6');
    424. //$('.youmax-tab').css('text-shadow','0 1px 0 #fff');
    425. //$(this).css('color','#eee');
    426. //$(this).css('background-color','#999');
    427. //$(this).css('text-shadow','0 0');
    428. youmaxTabId = this.id;
    429. showLoader();
    430. if(youmaxTabId.indexOf("featured_")!=-1) {
    431. getUploads('featured_'+youmax_global_options.youmaxFeaturedPlaylistId,null,null);
    432. } else if(youmaxTabId.indexOf("uploads_")!=-1) {
    433. getUploads(youmaxTabId);
    434. } else if(youmaxTabId.indexOf("playlists_")!=-1) {
    435. getPlaylists();
    436. }
    437. });
    438. $('#youmax-load-more-div').click(function(){
    439. var $youmaxLoadMoreDiv = $('#youmax-load-more-div');
    440. $youmaxLoadMoreDiv.html('LOADING..');
    441. $youmaxLoadMoreDiv.addClass('youmax-load-more-div-click');
    442. var youmaxTabId = $('.youmax-tab-hover').attr('id');
    443. var nextPageToken = $youmaxLoadMoreDiv.data('nextpagetoken');
    444. console.log('load more clicked : nextPageToken-'+nextPageToken);
    445. if(null!=nextPageToken && nextPageToken!="undefined" && nextPageToken!="") {
    446. if(youmaxTabId.indexOf("featured_")!=-1) {
    447. getUploads('featured_'+youmax_global_options.youmaxFeaturedPlaylistId,null,nextPageToken);
    448. } else if(youmaxTabId.indexOf("uploads_")!=-1) {
    449. getUploads(youmaxTabId,null,nextPageToken);
    450. } else if(youmaxTabId=="playlists_") {
    451. getPlaylists(nextPageToken);
    452. }
    453. } else {
    454. $youmaxLoadMoreDiv.html('ALL DONE');
    455. }
    456. });
    457. youTubeChannelURL = youmax_global_options.youTubeChannelURL;
    458. //Get Channel header and details
    459. if(youTubeChannelURL!=null) {
    460. s=youTubeChannelURL.indexOf("/user/");
    461. ////console.log('s-'+s);
    462. if(s!=-1) {
    463. userId = youTubeChannelURL.substring(s+6);
    464. //console.log('userId-'+userId);
    465. apiUrl = "https://www.googleapis.com/youtube/v3/channels?part=id&forUsername="+userId+"&key="+youmax_global_options.apiKey;
    466. getChannelId(apiUrl);
    467. } else {
    468. s=youTubeChannelURL.indexOf("/channel/");
    469. if(s!=-1) {
    470. youmaxChannelId = youTubeChannelURL.substring(s+9);
    471. youmax_global_options.youmaxChannelId = youmaxChannelId;
    472. //console.log('channelId-'+channelId);
    473. getChannelDetails(youmaxChannelId);
    474. } else {
    475. alert("Could Not Find Channel..");
    476. }
    477. }
    478. }
    479. }
    480. $.fn.youmax = function(options) {
    481. //set local options
    482. youmax_global_options.apiKey = options.apiKey;
    483. youmax_global_options.youTubeChannelURL = options.youTubeChannelURL||'';
    484. youmax_global_options.youTubePlaylistURL = options.youTubePlaylistURL||'';
    485. youmax_global_options.youmaxDefaultTab = options.youmaxDefaultTab||'FEATURED';
    486. youmax_global_options.youmaxColumns = options.youmaxColumns||3;
    487. youmax_global_options.showVideoInLightbox = options.showVideoInLightbox||false;
    488. youmax_global_options.youmaxChannelId = '';
    489. youmax_global_options.maxResults = options.maxResults||15;
    490. youmax_global_options.youmaxItemCount = 0;
    491. youmax_global_options.youtubeVideoAspectRatio = 640/360;
    492. //youmax_global_options.youmaxWidgetWidth = options.youmaxWidgetWidth||800;
    493. //youmax_global_options.showFeaturedVideoOnLoad = options.showFeaturedVideoOnLoad||false;
    494. youmax_global_options.youtubeMqdefaultAspectRatio = 300/180;
    495. initFeaturedVideos();
    496. prepareYoumax();
    497. };
    498. }( jQuery ));
  5. Download the below Youmax CSS file and add the CSS file to any document library, like Style Library.
    1. .youmax-showing {color:whitesmoke;font-weight:normal; text-shadow: none;}
    2. .youmax-duration {background-color: black;color: white;padding: 2px 3px;font-weight: bold;position: absolute;bottom: 0;right: 0;opacity: 0.8;}
    3. #youmax-header {background-color:rgb(53,53,53);font:24px Arial;color:white;line-height:25px;height:90px;text-align:left;border: 1px solid rgb(53,53,53);position: relative;}
    4. .youmax-stat {float:right;margin:10px;font:10px Arial;color:#ccc;margin-top: 25px;text-align: center;}
    5. #youmax-stat-holder {float:right;height:100%;}
    6. .youmax-stat-count {font: 18px Arial;}
    7. #youmax-channel-desc {text-align:left;}
    8. #youmax {width:100%; max-width:1000px;background-color: rgb(230,230,230);margin:0px auto;font-family: Calibri;font-size: 14px;text-align:center; overflow-x:hidden;}
    9. .youmax-video-tnail {width:100%; background-repeat:no-repeat; background-size:cover;height:180px;position: relative;}
    10. .youmax-video-tnail-box {width:46%;margin:2%;float:left;overflow:hidden;box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 3px rgba(0, 0, 0, 0.2);cursor:pointer;cursor:hand; background-color: white;}
    11. #youmax-encloser {border-left: 1px solid #cccccc;border-right: 1px solid #cccccc;border-bottom: 1px solid #cccccc; padding-top: 20px;}
    12. #youmax-video-list-div {width:100%;text-align:left;display: inline-block;background-color:rgb(230,230,230); padding: 0px 15px; box-sizing: border-box;}
    13. .youmax-video-list-title {color:#438bc5;display: inline-block;padding:2% 10px; padding-bottom: 0px;font-weight:bold;max-width:250px;max-height:18px;overflow:hidden;}
    14. .youmax-video-list-views {color:#555;padding:1% 10px; padding-bottom: 3%;display:inline-block;font-size:12px; font-family: Arial;}
    15. .youmax-playlist-sidebar {background-color:rgba(0,0,0,0.8);float:right;max-width:50%;height:100%;color:white;text-align:center;width: 70px;}
    16. .youmax-playlist-video-count { display:inline-block;margin:3%;margin-top:5%;height:20%; margin-top: 55px; }
    17. .youmax-playlist-sidebar-video {opacity:1;width:64px;height:20%;background-color:rgb(114,114,114);display:inline-block;margin:2% auto;background-size:cover;background-position: center center;background-repeat:no-repeat;}
    18. .youmax-tab {background-color:rgb(230,230,230);color:#666;text-shadow:0 1px 0 #fff;display: inline-block;margin: 5px;margin-top: 10px;padding: 5px;cursor:pointer;cursor:hand;}
    19. #youmax-tabs {text-align:left;background-color:rgb(230,230,230);padding-left: 10px;border-left: 1px solid #cccccc;border-right: 1px solid #cccccc; padding: 25px 30px 0px 30px;font-size: 18px;}
    20. #youmax-lightbox {position:fixed;background-color:rgba(0,0,0,0.9);z-index:100;width:100%;height:100%;left:0;top:0;}
    21. #youmax-video-lightbox {opacity:1;}
    22. .youmax-subscribe div {
    23. position:static !important;
    24. vertical-align: top !important;
    25. }
    26. .youmax-subscribe iframe {
    27. position:static !important;
    28. }
    29. .youmax-subscribe{
    30. display: inline-block;
    31. width: 150px;
    32. height: 25px;
    33. overflow: hidden;
    34. position: absolute;
    35. top: 0;
    36. margin: auto;
    37. bottom: 0;
    38. right: 0;
    39. }
    40. #youmax-header-logo{
    41. vertical-align:middle; height:60px; margin: 15px; display:inline-block;
    42. margin-left: 32px;
    43. }
    44. div#youmax-load-more-div {
    45. /* height: 40px; */
    46. padding: 10px;
    47. margin: 15px 30px;
    48. font-size: 18px;
    49. border: 1px solid #ccc;
    50. cursor:pointer;
    51. }
    52. .youmax-tab-hover {
    53. color:#eee;
    54. background-color:#999;
    55. text-shadow:0 0;
    56. }
    57. .youmax-showing-title {
    58. font-size: 18px;
    59. padding: 10px;
    60. margin-left: 20px;
    61. margin-bottom: 15px;
    62. display: inline-block;
    63. }
    64. iframe#youmax-video {
    65. margin-bottom: 20px !important;
    66. }
    67. .youmax-load-more-div-click {
    68. background: darkgray;
    69. color:white;
    70. }
    71. #youmax-load-more-div:hover {
    72. background: darkgray;
    73. color:white;
    74. }
  6. Create one Google API Key to get the videos from YouTube.

  7. Get the YouTube Channel Video URL from the YouTube site that you want to display in Content Editor Web Part.

    https://www.youtube.com/channel/UCYfdidRxbB8Qhf0Nx7ioOYw

    YouTube Channel

  8. Get the YouTube Playlist Video URL from the YouTube site that you want to display in Content Editor Web Part.

    https://www.youtube.com/playlist?list=PL3ZQ5CpNulQmFrUkJrzmnegpttJATXZO4


    YouTube Channel

  9. After getting Google API Key, YouTube Channel ID, and Playlist ID, add that to YouMax jQuery plugin, as below:
    1. $('#youmax').youmax({
    2. apiKey:'HGDRHjjekkj4mkjd954HHHFGUu45jrt45',
    3. youTubeChannelURL:" https://www.youtube.com/channel/UCYfdidRxbB8Qhf0Nx7ioOYw",
    4. youTubePlaylistURL:" https://www.youtube.com/playlist?list=PL3ZQ5CpNulQmFrUkJrzmnegpttJATXZO4",
    5. youmaxDefaultTab:"PLAYLISTS", //can be UPLOADS or PLAYLISTS or FEATURED
    6. youmaxColumns:3,
    7. showVideoInLightbox:false,
    8. maxResults:15,
    9. });
  10. Your channel playlist video will be added to the Content Editor Web Part using complete code snippets, as shown below.
    1. <script src="../Style%20Library/YouTubeChannel/jquery-1.9.1.min.js"></script>
    2. <script src="../Style%20Library/YouTubeChannel/youmax.js"></script>
    3. <link rel="stylesheet" href="../Style%20Library/YouTubeChannel/youmax.css"/>
    4. <div id="youmax"></div>
    5. <script type="text/javascript">
    6. $('#youmax').youmax({
    7. apiKey:'HGDRHjjekkj4mkjd954HHHFGUu45jrt45',
    8. youTubeChannelURL:" https://www.youtube.com/channel/UCYfdidRxbB8Qhf0Nx7ioOYw",
    9. youTubePlaylistURL:" https://www.youtube.com/playlist?list=PL3ZQ5CpNulQmFrUkJrzmnegpttJATXZO4",
    10. youmaxDefaultTab:"PLAYLISTS", //can be UPLOADS or PLAYLISTS or FEATURED
    11. youmaxColumns:3,
    12. showVideoInLightbox:false,
    13. maxResults:15,
    14. });
    15. </script>
  11. Thus, the YouTube channel videos are added to the SharePoint Page.

    YouTube Channel

Summary: So, you have learned how to get the YouTube Channel Playlist Videos in SharePoint Content Editor Web Part.