Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save kostasx/c89c4d6e8ba2921cb5dc4fc508bc1a8c to your computer and use it in GitHub Desktop.
Save kostasx/c89c4d6e8ba2921cb5dc4fc508bc1a8c to your computer and use it in GitHub Desktop.
YouTube Vimeo URL Parser
function parseVideo (url) {
// - Supported YouTube URL formats:
// - http://www.youtube.com/watch?v=My2FRPA3Gf8
// - http://youtu.be/My2FRPA3Gf8
// - https://youtube.googleapis.com/v/My2FRPA3Gf8
// - Supported Vimeo URL formats:
// - http://vimeo.com/25451551
// - http://player.vimeo.com/video/25451551
// - Also supports relative URLs:
// - //player.vimeo.com/video/25451551
// - DailyMotion
// - http://www.dailymotion.com/video/x6ga7eg
url.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|dailymotion.com)\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
if (RegExp.$3.indexOf('youtu') > -1) {
var type = 'youtube';
} else if (RegExp.$3.indexOf('vimeo') > -1) {
var type = 'vimeo';
} else if (RegExp.$3.indexOf('dailymotion') > -1) {
var type = 'dailymotion';
}
return {
type: type,
id: RegExp.$6
};
}
function createVideo (url, width, height) {
// Returns an iframe of the video with the specified URL.
var videoObj = parseVideo(url);
var $iframe = $('<iframe>', { width: width, height: height });
$iframe.attr('frameborder', 0);
if (videoObj.type == 'youtube') {
$iframe.attr('src', '//www.youtube.com/embed/' + videoObj.id);
} else if (videoObj.type == 'vimeo') {
$iframe.attr('src', '//player.vimeo.com/video/' + videoObj.id);
} else if (videoObj.type == 'dailymotion') {
$iframe.attr('src', '//www.dailymotion.com/embed/video/' + videoObj.id);
}
return $iframe;
}
function getVideoThumbnail (url, cb) {
// Obtains the video's thumbnail and passed it back to a callback function.
var videoObj = parseVideo(url);
if (videoObj.type == 'youtube') {
cb('//img.youtube.com/vi/' + videoObj.id + '/maxresdefault.jpg');
} else if (videoObj.type == 'vimeo') {
// Requires jQuery
$.get('http://vimeo.com/api/v2/video/' + videoObj.id + '.json', function(data) {
cb(data[0].thumbnail_large);
});
} else if (videoObj.type == 'dailymotion') {
cb('//www.dailymotion.com/thumbnail/video/' + videoObj.id);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment