
Research
/Security News
Contagious Interview Campaign Escalates With 67 Malicious npm Packages and New Malware Loader
North Korean threat actors deploy 67 malicious npm packages using the newly discovered XORIndex malware loader.
js-video-url-parser
Advanced tools
A parser to extract provider, video id, starttime and others from YouTube, Vimeo, ... urls
A javascript parser to extract informations like provider, id, channel, start time from media urls.
Currently supports
npm install
npm run lint
npm run test
npm run build
npm install js-video-url-parser
bower install js-video-url-parser
// All plugins
import urlParser from "js-video-url-parser";
// Choose individual plugins
import urlParser from "js-video-url-parser/lib/base";
import "js-video-url-parser/lib/provider/canalplus';
import "js-video-url-parser/lib/provider/coub';
import "js-video-url-parser/lib/provider/dailymotion';
import "js-video-url-parser/lib/provider/twitch';
import "js-video-url-parser/lib/provider/vimeo';
import "js-video-url-parser/lib/provider/wistia';
import "js-video-url-parser/lib/provider/youku';
import "js-video-url-parser/lib/provider/youtube';
Parsing a url will return a videoInfo object with all the information
> urlParser.parse('http://www.youtube.com/watch?v=HRb7B9fPhfA')
{ mediaType: 'video',
id: 'HRb7B9fPhfA',
provider: 'youtube' }
> urlParser.parse('https://vimeo.com/97276391')
{ mediaType: 'video',
id: '97276391',
provider: 'vimeo' }
Any url parameters expect for ids will be saved in the params object. Some providers have special parameters for example the start parameter which dictates at how many seconds the video starts. Special parameters can be found in the different descriptions for the providers.
> urlParser.parse('https://www.youtube.com/watch?v=6xLcSTDeB7A&index=25&list=PL46F0A159EC02DF82&t=1m40')
{
provider: 'youtube',
id: 'yQaAGmHNn9s',
list: 'PL46F0A159EC02DF82',
mediaType: 'video',
params: {
start: 100,
index: '25'
}
}
Parsing an incorrect url will return undefined
> urlParser.parse('https://www.youuutube.com/watch?v=97276391')
undefined
The videoInfo objects can be turned back into urls with the .create
function.
The required parameter for this is the videoInfo object itself. Optional ones are
the format of the url and the url parameters that should be added. Each provider
has it's own default format.
> urlParser.create({
videoInfo: {
provider: 'youtube',
id: 'HRb7B9fPhfA',
mediaType: 'video'
},
format: 'long',
params: {
foo: 'bar'
}
})
'https://www.youtube.com/watch?foo=bar&v=HRb7B9fPhfA'
Parsing and creating can also be chained together to clean up an url for example.
If you still want to reuse the generated parameters object you can use the keyword
'internal'
as params.
> urlParser.create({
videoInfo: urlParser.parse('https://youtube.com/watch?foo=bar&v=HRb7B9fPhfA')
})
'https://www.youtube.com/watch?v=HRb7B9fPhfA'
> urlParser.create({
videoInfo: urlParser.parse('https://youtube.com/watch?foo=bar&v=HRb7B9fPhfA'),
params: 'internal'
})
'https://www.youtube.com/watch?foo=bar&v=HRb7B9fPhfA'
Add a new file in the lib/provider/
directory with the template found here and also add it to index.js.
Add some tests in lib/provider/
with the template found
here.
Run npm run test
to create the parser and test your plugin.
'video'
: Regular videos which can also be livestreams.'playlist'
: YouTube playlist.'share'
: Shared YouTube videos that link to a special website and are not actual videos themselves.'channel'
: YouTube channels, which are the same as users.'short'
: Shortened urls.'long'
(default): Regular urls.'embed'
: Embedded urls.'shortImage'
: Shortened thumbnail urls.'longImage'
: Regular thumbnail urls.mediaType/formats | short | long | embed | shortImage | longImage |
---|---|---|---|---|---|
video | ✓ | ✓ | ✓ | ✓ | ✓ |
playlist | X | ✓ | ✓ | X | X |
share | X | ✓ | X | X | X |
channel | X | ✓ | X | X | X |
'name'
: Sometimes you get the name of a channel instead of the 'id'
.'params.start'
: The number where the video should begin in seconds.'params.imageQuality'
: Custom parameter for generating different qualities of thumbnail urls.
'0', '1', '2', '3', 'default', 'hqdefault'(default), 'mqdefault', 'sddefault', 'maxresdefault'
> urlParser.parse('http://www.youtube.com/watch?v=HRb7B9fPhfA');
> urlParser.parse('http://youtu.be/HRb7B9fPhfA');
> urlParser.parse('https://m.youtube.com/details?v=HRb7B9fPhfA');
> urlParser.parse('https://gdata.youtube.com/feeds/api/videos/HRb7B9fPhfA/related');
> urlParser.parse('https://i.ytimg.com/vi/HRb7B9fPhfA/hqdefault.jpg');
> urlParser.parse('https://img.youtube.com/vi/HRb7B9fPhfA/hqdefault.jpg');
{ mediaType: 'video',
id: 'HRb7B9fPhfA',
provider: 'youtube' }
> urlParser.parse('http://www.youtube.com/embed/videoseries?list=PL46F0A159EC02DF82');
> urlParser.parse('http://www.youtube.com/playlist?list=PL46F0A159EC02DF82');
{ mediaType: 'playlist',
list: 'PL46F0A159EC02DF82',
provider: 'youtube'}
> urlParser.parse('http://www.youtube.com/watch?v=yQaAGmHNn9s&list=PL46F0A159EC02DF82');
{ mediaType: 'video',
id: 'yQaAGmHNn9s',
list: 'PL46F0A159EC02DF82',
provider: 'youtube'
}
> urlParser.parse('http://www.youtube.com/watch?v=yQaAGmHNn9s&list=PL46F0A159EC02DF82#t=1m40');
{ mediaType: 'video',
id: 'yQaAGmHNn9s',
list: 'PL46F0A159EC02DF82',
provider: 'youtube'
params: {
start: 100
}
}
> urlParser.parse('https://www.youtube.com/channel/UCzQUP1qoWDoEbmsQxvdjxgQ');
{ mediaType: 'channel',
id: 'UCzQUP1qoWDoEbmsQxvdjxgQ',
provider: 'youtube'
}
> urlParser.parse('https://www.youtube.com/user/PowerfulJRE');
> urlParser.parse('https://www.youtube.com/c/PowerfulJRE');
{ mediaType: 'channel',
name: 'PowerfulJRE',
provider: 'youtube'
}
> urlParser.create({
videoInfo: {
provider: 'youtube',
id: 'HRb7B9fPhfA',
mediaType: 'video'
},
format: <format>
})
'long': 'https://www.youtube.com/watch?v=HRb7B9fPhfA'
'short': 'https://youtu.be/HRb7B9fPhfA'
'embed': 'https://www.youtube.com/embed/HRb7B9fPhfA'
'shortImage': 'https://i.ytimg.com/vi/HRb7B9fPhfA/hqdefault.jpg'
'longImage': 'https://img.youtube.com/vi/HRb7B9fPhfA/hqdefault.jpg'
> urlParser.create({
videoInfo: {
provider: 'youtube',
id: 'HRb7B9fPhfA',
mediaType: 'video'
},
params: {
start: 90
},
format: <format>
})
'long': 'https://www.youtube.com/watch?v=HRb7B9fPhfA#t=90'
'short': 'https://youtu.be/HRb7B9fPhfA#t=90'
'embed': 'https://www.youtube.com/embed/HRb7B9fPhfA?start=90'
> urlParser.create({
videoInfo: {
provider: 'youtube',
id: 'HRb7B9fPhfA',
list: 'PL46F0A159EC02DF82',
mediaType: 'video'
},
format: <format>
})
'long': 'https://www.youtube.com/watch?list=PL46F0A159EC02DF82&v=HRb7B9fPhfA'
'embed': 'https://www.youtube.com/embed/HRb7B9fPhfA?list=PL46F0A159EC02DF82'
> urlParser.create({
videoInfo: {
provider: 'youtube',
list: 'PL46F0A159EC02DF82',
mediaType: 'playlist'
},
format: <format>
})
'long': 'https://www.youtube.com/playlist?feature=share&list=PL46F0A159EC02DF82'
'embed': 'https://www.youtube.com/embed?list=PL46F0A159EC02DF82&listType=playlist'
> urlParser.create({
videoInfo: {
provider: 'youtube',
id: 'UCzQUP1qoWDoEbmsQxvdjxgQ',
mediaType: 'channel'
},
format: 'long'
})
'long': 'https://www.youtube.com/channel/UCzQUP1qoWDoEbmsQxvdjxgQ'
> urlParser.create({
videoInfo: {
provider: 'youtube',
name: 'PowerfulJRE',
mediaType: 'channel'
},
format: 'long'
})
'long': 'https://www.youtube.com/c/PowerfulJRE'
> urlParser.create({
videoInfo: {
provider: 'youtube',
id: 'HRb7B9fPhfA',
mediaType: 'video'
},
params:{
imageQuality: <quality>
},
format: 'shortImage'
})
'0': 'https://i.ytimg.com/vi/HRb7B9fPhfA/0.jpg'
'1': 'https://i.ytimg.com/vi/HRb7B9fPhfA/1.jpg'
'2': 'https://i.ytimg.com/vi/HRb7B9fPhfA/2.jpg'
'3': 'https://i.ytimg.com/vi/HRb7B9fPhfA/3.jpg'
'hqdefault': 'https://i.ytimg.com/vi/HRb7B9fPhfA/hqdefault.jpg'
'sddefault': 'https://i.ytimg.com/vi/HRb7B9fPhfA/sddefault.jpg'
'mqdefault': 'https://i.ytimg.com/vi/HRb7B9fPhfA/mqdefault.jpg'
'maxresdefault': 'https://i.ytimg.com/vi/HRb7B9fPhfA/maxresdefault.jpg'
> urlParser.create({
videoInfo: {
provider: 'youtube',
id: 'HRb7B9fPhfA',
mediaType: 'video'
},
params:{
imageQuality: <quality>
},
format: 'longImage'
})
'0': 'https://img.youtube.com/vi/HRb7B9fPhfA/0.jpg'
'1': 'https://img.youtube.com/vi/HRb7B9fPhfA/1.jpg'
'2': 'https://img.youtube.com/vi/HRb7B9fPhfA/2.jpg'
'3': 'https://img.youtube.com/vi/HRb7B9fPhfA/3.jpg'
'hqdefault': 'https://img.youtube.com/vi/HRb7B9fPhfA/hqdefault.jpg'
'sddefault': 'https://img.youtube.com/vi/HRb7B9fPhfA/sddefault.jpg'
'mqdefault': 'https://img.youtube.com/vi/HRb7B9fPhfA/mqdefault.jpg'
'maxresdefault': 'https://img.youtube.com/vi/HRb7B9fPhfA/maxresdefault.jpg'
'video'
: Regular videos'long'
(default): Regular urls.'embed'
: Embedded urls.'image'
: Thumbnail image urls.mediaType/formats | long | embed | image |
---|---|---|---|
video | ✓ | ✓ | ✓ |
'params.start'
: The number where the video should begin in seconds.'params.imageWidth'
: For 'image'
format urls. Vimeo will produce a scaled image based on the width. The default image size when no width is specified depends on the video source.'params.imageHeight'
: For 'image'
format urls. Can only be set in combination with 'imageWidth'
. Vimeo will produce a cropped image with the 2 parameters.'params.imageExtension'
: For 'image'
format urls. Contains the extension e.g. '.png'
, '.jpg'
, '.webp'
. Vimeo uses '.webp'
by default which will be used when no format is specified. It can also be set to an empty string to generate urls with no extension.> urlParser.parse('https://vimeo.com/97276391');
> urlParser.parse('https://vimeo.com/channels/staffpicks/97276391');
> urlParser.parse('https://i.vimeocdn.com/video/97276391');
{ id: '97276391',
mediaType: 'video',
provider: 'vimeo' }
> urlParser.parse('https://vimeo.com/album/2903155/video/96186586');
{ id: '96186586',
mediaType: 'video',
provider: 'vimeo' }
> urlParser.parse('https://vimeo.com/groups/shortfilms/videos/97688625');
{ id: '97688625',
mediaType: 'video',
provider: 'vimeo' }
> urlParser.parse('http://vimeopro.com/staff/frame/video/24069938');
{ id: '24069938',
mediaType: 'video',
provider: 'vimeo' }
> urlParser.parse('https://vimeo.com/97276391#t=1m30s');
{ id: '97276391',
mediaType: 'video',
provider: 'vimeo',
params: {
start: 90
}
}
> urlParser.parse('https://i.vimeocdn.com/video/97276391_500x123.webp');
{ id: '97276391',
mediaType: 'video',
provider: 'vimeo',
imageWidth: 500,
imageHeight: 123,
imageExtension: '.webp' }
> urlParser.parse('https://i.vimeocdn.com/video/97276391_500.png');
{ id: '97276391',
mediaType: 'video',
provider: 'vimeo',
imageWidth: 500,
imageExtension: '.png' }
> urlParser.create({
videoInfo: {
provider: 'vimeo',
id: '97276391',
mediaType: 'video'
},
format: <format>
})
'long': 'https://vimeo.com/97276391'
'embed': '//player.vimeo.com/video/97276391'
'image': 'https://i.vimeocdn.com/video/97276391.webp'
> urlParser.create({
videoInfo: {
provider: 'vimeo',
id: '97276391',
mediaType: 'video',
params: {
start: 90
}
},
format: <format>
})
'long': 'https://vimeo.com/97276391#t=90'
'embed': '//player.vimeo.com/video/97276391#t=90'
'image': 'https://i.vimeocdn.com/video/97276391.webp'
> urlParser.create({
videoInfo: {
provider: 'vimeo',
id: '97276391',
mediaType: 'video',
imageWidth: 500,
imageHeight: 123,
},
format: <format>
})
'long': 'https://vimeo.com/97276391'
'embed': '//player.vimeo.com/video/97276391'
'image': 'https://i.vimeocdn.com/video/97276391_500x123.webp'
> urlParser.create({
videoInfo: {
provider: 'vimeo',
id: '97276391',
mediaType: 'video',
imageWidth: 500
},
format: <format>
})
'long': 'https://vimeo.com/97276391'
'embed': '//player.vimeo.com/video/97276391'
'image': 'https://i.vimeocdn.com/video/97276391_500.webp'
> urlParser.create({
videoInfo: {
provider: 'vimeo',
id: '97276391',
mediaType: 'video',
imageExtension: '.png'
},
format: <format>
})
'long': 'https://vimeo.com/97276391'
'embed': '//player.vimeo.com/video/97276391'
'image': 'https://i.vimeocdn.com/video/97276391.png'
> urlParser.create({
videoInfo: {
provider: 'vimeo',
id: '97276391',
mediaType: 'video',
imageExtension: ''
},
format: <format>
})
'long': 'https://vimeo.com/97276391'
'embed': '//player.vimeo.com/video/97276391'
'image': 'https://i.vimeocdn.com/video/97276391'
'stream'
: Streams which are just a direct url to a channel.'video'
: Part of streams or history of a full stream.'clip'
: Short video clips that can be created by anyone on a stream.'long'
(default): Regular urls.'embed'
: Embedded urls.mediaType/formats | long | embed |
---|---|---|
stream | ✓ | ✓ |
video | ✓ | ✓ |
clip | ✓ | ✓ |
'params.start'
: The number where the video should begin in seconds.> urlParser.parse('http://www.twitch.tv/rains8');
> urlParser.parse('http://www.twitch.tv/widgets/live_embed_player.swf?channel=rains8');
> urlParser.parse('http://twitch.tv/rains8/chat');
{ mediaType: 'stream',
channel: 'rains8',
provider: 'twitch' }
> urlParser.parse('http://www.twitch.tv/75292411');
{ mediaType: 'video',
id: 'v75292411',
provider: 'twitch' }
> urlParser.parse('http://www.twitch.tv/75292411?t=1m30s');
{ mediaType: 'video',
id: 'v75292411',
provider: 'twitch',
params: {
start: 90
}
}
> urlParser.parse('https://clips.twitch.tv/SuspiciousImpartialLarkItsBoshyTime');
> urlParser.parse('https://clips.twitch.tv/embed?clip=SuspiciousImpartialLarkItsBoshyTime');
{ mediaType: 'clip',
id: 'SuspiciousImpartialLarkItsBoshyTime',
provider: 'twitch' }
> urlParser.parse('https://www.twitch.tv/rains8/clip/SuspiciousImpartialLarkItsBoshyTime');
{ mediaType: 'clip',
channel: 'rains8',
id: 'SuspiciousImpartialLarkItsBoshyTime',
provider: 'twitch' }
> urlParser.create({
videoInfo: {
provider: 'twitch',
channel: 'rains8',
mediaType: 'stream'
},
format: <format>
})
'long': 'https://twitch.tv/rains8'
'embed': 'https://player.twitch.tv/?channel=rains8'
> urlParser.create({
videoInfo: {
provider: 'twitch',
id: 'v75292411',
mediaType: 'video'
},
format: <format>
})
'long': 'https://twitch.tv/75292411'
'embed': 'https://player.twitch.tv/?video=v75292411'
> urlParser.create({
videoInfo: {
provider: 'twitch',
id: 'v75292411',
mediaType: 'video',
params: {
start: 90
}
},
format: <format>
})
'long': 'https://twitch.tv/75292411?t=90s'
'embed': 'https://player.twitch.tv/?video=v75292411?=90s'
> urlParser.create({
videoInfo: {
provider: 'twitch',
id: 'SuspiciousImpartialLarkItsBoshyTime',
mediaType: 'clip'
},
format: <format>
})
'long': 'https://clips.twitch.tv/SuspiciousImpartialLarkItsBoshyTime'
'embed': 'https://clips.twitch.tv/embed?clip=SuspiciousImpartialLarkItsBoshyTime'
> urlParser.create({
videoInfo: {
provider: 'twitch',
channel: 'rains8',
id: 'SuspiciousImpartialLarkItsBoshyTime',
mediaType: 'clip'
},
format: <format>
})
'long': 'https://www.twitch.tv/rains8/clip/SuspiciousImpartialLarkItsBoshyTime'
'embed': 'https://clips.twitch.tv/embed?clip=SuspiciousImpartialLarkItsBoshyTime'
'video'
: Regular videos.'short'
: Shortened urls.'long'
(default): Regular urls.'embed'
: Embedded urls.'image'
: Thumbnail image urls.mediaType/formats | short | long | embed | image |
---|---|---|---|---|
video | ✓ | ✓ | ✓ | ✓ |
'params.start'
: The number where the video should begin in seconds.> urlParser.parse('http://www.dailymotion.com/video/x1e2b95_bruce-lee-nin-kayip-kedisi_animals');
> urlParser.parse('http://www.dailymotion.com/video/x1e2b95');
> urlParser.parse('http://dai.ly/x1e2b95');
> urlParser.parse('https://www.dailymotion.com/embed/video/x1e2b95');
> urlParser.parse('https://www.dailymotion.com/thumbnail/video/x1e2b95');
{ mediaType: 'video',
id: 'x1e2b95',
provider: 'dailymotion' }
> urlParser.parse('http://www.dailymotion.com/video/x1e2b95_bruce-lee-nin-kayip-kedisi_animals?start=10');
> urlParser.parse('http://www.dailymotion.com/embed/video/x1e2b95?start=10');
> urlParser.parse('http://www.dailymotion.com/video/x1e2b95?start=10');
{ mediaType: 'video',
id: 'x1e2b95',
provider: 'dailymotion',
params: {
start: 10
}
}
> urlParser.create({
videoInfo: {
provider: 'dailymotion',
id: 'x1e2b95',
mediaType: 'video'
},
format: <format>
})
'long': 'https://www.dailymotion.com/video/x1e2b95'
'short': 'https://dai.ly/x1e2b95'
'embed': 'https://www.dailymotion.com/embed/video/x1e2b95'
'image': 'https://www.dailymotion.com/thumbnail/video/x1e2b95'
> urlParser.create({
videoInfo: {
provider: 'dailymotion',
id: 'x1e2b95',
mediaType: 'video',
params: {
start: 10
}
},
format: <format>
})
'long': 'https://www.dailymotion.com/video/x1e2b95?start=10'
'short': 'https://dai.ly/x1e2b95?start=10'
'embed': 'https://www.dailymotion.com/embed/video/x1e2b95?start=10'
'image': 'https://www.dailymotion.com/thumbnail/video/x1e2b95'
'video'
: Regular videos.'long'
(default): Regular urls.'embed'
: Embedded urls.mediaType/formats | long | embed |
---|---|---|
video | ✓ | ✓ |
> urlParser.parse('https://coub.com/view/by7sm');
> urlParser.parse('//coub.com/embed/by7sm');
{ mediaType: 'video',
id: 'by7sm',
provider: 'coub' }
> urlParser.create({
videoInfo: {
provider: 'coub',
id: 'by7sm',
mediaType: 'video'
},
format: <format>
})
'long': 'https://coub.com/view/by7sm'
'embed': '//coub.com/embed/by7sm'
'video'
: Regular videos.'long'
(default): Regular urls.'static'
: Video player that fills out the whole website.'embed'
: Embedded urls.'flash'
: Flash embedded urls.mediaType/formats | long | static | embed | flash |
---|---|---|---|---|
video | ✓ | ✓ | ✓ | ✓ |
> urlParser.parse('http://player.youku.com/embed/XMTQ3OTM4MzMxMg');
> urlParser.parse('http://player.youku.com/player.php/sid/XMTQ3OTM4MzMxMg/v.swf');
> urlParser.parse('http://v.youku.com/v_show/id_XMTQ3OTM4MzMxMg');
> urlParser.parse('http://static.youku.com/v1.0.0638/v/swf/loader.swf?VideoIDS=XMTQ3OTM4MzMxMg');
{ mediaType: 'video',
id: 'XMTQ3OTM4MzMxMg',
provider: 'youku' }
> urlParser.create({
videoInfo: {
provider: 'youku',
id: 'XMTQ3OTM4MzMxMg',
mediaType: 'video'
},
format: <format>
})
'embed': 'http://player.youku.com/embed/XMTQ3OTM4MzMxMg',
'long': 'http://v.youku.com/v_show/id_XMTQ3OTM4MzMxMg',
'flash': 'http://player.youku.com/player.php/sid/XMTQ3OTM4MzMxMg/v.swf',
'static': 'http://static.youku.com/v1.0.0638/v/swf/loader.swf?VideoIDS=XMTQ3OTM4MzMxMg'
'video'
: Regular videos.'embed'
(default): Embedded urls.mediaType/formats | embed |
---|---|
video | ✓ |
> urlParser.parse('http://player.canalplus.fr/embed/?param=cplus&vid=1365175');
> urlParser.parse('http://www.canalplus.fr/humour/pid1784-les-guignols.html?vid=1365175');
{ mediaType: 'video',
id: '1365175',
provider: 'canalplus' }
> urlParser.create({
videoInfo: {
provider: 'canalplus',
id: '1365175',
mediaType: 'video'
},
format: <format>
})
'embed': 'http://player.canalplus.fr/embed/?param=cplus&vid=1365175',
'video'
: Regular videos.'embedvideo'
: Any links that do not include the channel name are embedded links.'long'
(default): Regular urls.'embed'
: Regular embedded urls using iframe.'embedjsonp'
: jsonp specific embedded urls.mediaType/formats | long | embed | embedjsonp |
---|---|---|---|
video | ✓ | ✓ | ✓ |
embedvideo | X | ✓ | ✓ |
'params.start'
: The number where the video should begin in seconds.> urlParser.parse('https://appboss.wistia.com/medias/lpu6bgplle');
{ mediaType: 'video',
channel: 'appboss',
id: 'lpu6bgplle',
provider: 'wistia'
}
> urlParser.parse('https://fast.wistia.com/embed/iframe/lpu6bgplle');
> urlParser.parse('https://fast.wistia.com/embed/medias/lpu6bgplle.jsonp');
> urlParser.parse('https://content.wistia.com/customer-stories/bizzabo?wvideo=lpu6bgplle');
> urlParser.parse('https://wistia.com/blog/soapbox-videos-for-the-holidays?wvideo=lpu6bgplle');
> urlParser.parse('https://wistia.com/library/how-to-look-good-on-a-webcam?wvideo=lpu6bgplle');
> urlParser.parse('https://wistia.com/solutions/sales?wvideo=lpu6bgplle');
{ mediaType: 'embedvideo',
id: 'lpu6bgplle',
provider: 'wistia'
}
> urlParser.parse('https://appboss.wistia.com/medias/lpu6bgplle?wtime=1m30s');
{ mediaType: 'video',
channel: 'appboss',
id: 'lpu6bgplle',
provider: 'wistia'
params: {
start: 90
}
}
> urlParser.parse('https://fast.wistia.com/embed/iframe/lpu6bgplle?wtime=30');
{ mediaType: 'embedvideo',
id: 'lpu6bgplle',
provider: 'wistia'
params: {
start: 90
}
}
> urlParser.create({
videoInfo: {
provider: 'wistia',
channel: 'appboss',
id: 'lpu6bgplle',
mediaType: 'video'
},
format: <format>
})
'long': 'https://appboss.wistia.com/medias/lpu6bgplle'
'embed': 'https://fast.wistia.com/embed/iframe/lpu6bgplle'
'embedjsonp': 'https://fast.wistia.com/embed/medias/lpu6bgplle.jsonp'
> urlParser.create({
videoInfo: {
provider: 'wistia',
channel: 'appboss',
id: 'lpu6bgplle',
mediaType: 'video'
},
params: {
start: 90
},
format: <format>
})
'long': 'https://appboss.wistia.com/medias/lpu6bgplle?wtime=90'
'embed': 'https://fast.wistia.com/embed/iframe/lpu6bgplle?wtime=90'
'embedjsonp': 'https://fast.wistia.com/embed/medias/lpu6bgplle.jsonp'
> urlParser.create({
videoInfo: {
provider: 'wistia',
id: 'lpu6bgplle',
mediaType: 'embedvideo'
},
format: <format>
})
'embed': 'https://fast.wistia.com/embed/iframe/lpu6bgplle'
'embedjsonp': 'https://fast.wistia.com/embed/medias/lpu6bgplle.jsonp'
> urlParser.create({
videoInfo: {
provider: 'wistia',
id: 'lpu6bgplle',
mediaType: 'embedvideo'
},
params: {
start: 90
},
format: <format>
})
'embed': 'https://fast.wistia.com/embed/iframe/lpu6bgplle?wtime=90'
'embedjsonp': 'https://fast.wistia.com/embed/medias/lpu6bgplle.jsonp'
'track'
: Regular tracks.'playlist'
: Lists of tracks, including albums, singles, EPs, playlists.'apitrack'
: SoundCloud uses integer based ids for their api. Track can be resolved to apitrack using their /resolve
endpoint'apiplaylist'
: Same reason as apitrack.'long'
(default): Regular urls.'embed'
: Embedded urls using iframe.mediaType/formats | long | embed |
---|---|---|
track | ✓ | X |
playlist | ✓ | X |
apitrack | ✓ | ✓ |
apiplaylist | ✓ | ✓ |
'list'
: On playlist types the list property will be set with the list id.'channel'
: The channel containing the track or playlist. Will not be set with api types.'params.start'
: The number where the video should begin in seconds.> urlParser.parse('https://soundcloud.com/julian-hangst-rfer/odsf0dif92w3j_adfw-edf-1-asdf-1');
{ mediaType: 'track',
channel: 'julian-hangst-rfer',
id: 'odsf0dif92w3j_adfw-edf-1-asdf-1',
provider: 'soundcloud'
}
> urlParser.parse('https://soundcloud.com/julian-hangst-rfer/sets/dif92w-e_e');
{ mediaType: 'playlist',
channel: 'julian-hangst-rfer',
list: 'dif92w-e_e',
provider: 'soundcloud'
}
> urlParser.parse('https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/388050272');
> urlParser.parse('https://api.soundcloud.com/tracks/388050272');
{ mediaType: 'apitrack',
id: '388050272',
provider: 'soundcloud'
}
> urlParser.parse('https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/playlists/430366544');
> urlParser.parse('https://api.soundcloud.com/playlists/430366544');
{ mediaType: 'apiplaylist',
list: '430366544',
provider: 'soundcloud'
}
> urlParser.parse('https://soundcloud.com/julian-hangst-rfer/odsf0dif92w3j_adfw-edf-1-asdf-1#t=0:30');
{ mediaType: 'track',
channel: 'julian-hangst-rfer',
id: 'odsf0dif92w3j_adfw-edf-1-asdf-1',
provider: 'soundcloud',
params: {
start: 30
}
}
> urlParser.create({
videoInfo: {
provider: 'soundcloud',
channel: 'julian-hangst-rfer',
id: 'odsf0dif92w3j_adfw-edf-1-asdf-1',
mediaType: 'track'
},
format: <format>
})
'long': 'https://soundcloud.com/julian-hangst-rfer/odsf0dif92w3j_adfw-edf-1-asdf-1'
> urlParser.create({
videoInfo: {
provider: 'soundcloud',
channel: 'julian-hangst-rfer',
list: 'dif92w-e_e',
mediaType: 'playlist'
},
format: <format>
})
'long': 'https://soundcloud.com/julian-hangst-rfer/sets/dif92w-e_e'
> urlParser.create({
videoInfo: {
provider: 'soundcloud',
id: '388050272',
mediaType: 'apitrack'
},
format: <format>
})
'long': 'https://api.soundcloud.com/tracks/388050272'
'embed': 'https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/388050272'
> urlParser.create({
videoInfo: {
provider: 'soundcloud',
list: '430366544',
mediaType: 'apiplaylist'
},
format: <format>
})
'long': 'https://api.soundcloud.com/playlist/430366544'
'embed': 'https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/playlist/430366544'
FAQs
A parser to extract provider, video id, starttime and others from YouTube, Vimeo, ... urls
The npm package js-video-url-parser receives a total of 73,379 weekly downloads. As such, js-video-url-parser popularity was classified as popular.
We found that js-video-url-parser demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
North Korean threat actors deploy 67 malicious npm packages using the newly discovered XORIndex malware loader.
Security News
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.