@bytelucas/video-link-parser
Version:
Get the YouTube, Vimeo, Vine, VideoPress, TikTok, Microsoft Stream, Loom or Dailymotion video id from a url or embed string.
313 lines (236 loc) • 7.69 kB
Markdown
# get-video-id [](https://codecov.io/gh/radiovisual/get-video-id)
> Get the YouTube, Vimeo, Vine, VideoPress, TikTok, Microsoft Stream, Loom or Dailymotion video id from a url or embed string.
**Pull Requests are welcome** if you would like to see support for other video services or if you find an unsupported video url pattern.
## Install
You can install with npm:
```
$ npm install --save get-video-id
```
or with yarn:
```
$ yarn add get-video-id
```
## Import
You can use this module in **Node.js** or in the **browser**. See below for the different importing options.
**CommonJS**
```js
const getVideoId = require('get-video-id');
```
**ES Module**
```js
import getVideoId from 'get-video-id';
```
**Browser**
```html
<script src="https://cdn.jsdelivr.net/npm/get-video-id/dist/get-video-id.umd.min.js"></script>
```
###### Download
- [Normal](https://cdn.jsdelivr.net/npm/get-video-id/dist/get-video-id.js)
- [Minified](https://cdn.jsdelivr.net/npm/get-video-id/dist/get-video-id.min.js)
###### CDN
- [jsdelivr](https://www.jsdelivr.com/package/npm/get-video-id)
- [unpkg](https://unpkg.com/get-video-id)
## Usage
Simply supply the module with a url or embed string matching any of the [patterns known by this module](https://github.com/radiovisual/get-video-id#patterns) and its metadata of `id` and `service` will be returned:
```js
import getVideoId from 'get-video-id';
getVideoId('https://www.youtube.com/watch?v=dQw4w9WgXcQ');
//=> { id: 'dQw4w9WgXcQ', service: 'youtube' }
const { id } = getVideoId('https://www.youtube.com/watch?v=dQw4w9WgXcQ');
//=> 'dQw4w9WgXcQ'
```
get-video-id can also find the video buried in a Google redirection URL if it contains a reference to any of the supported URL patterns.
```js
getVideoId('https://www.google.cz/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwj30L2MvpDVAhUFZVAKHb8CBaYQuAIIIjAA&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdQw4w9WgXcQ');
//=> { id: 'dQw4w9WgXcQ', service: 'youtube' }
```
## API
### getVideoId(input)
Returns a metadata `Object` with the video `id` and `service` name:
```
{
id: `String` | `undefined`,
service: `String` | `undefined`
}
```
#### input
Type: `String`
The url (or embed code, or google redirect url) from which you want to find the video id. See the
[Patterns section](https://github.com/radiovisual/get-video-id#patterns) to see the formats that can be supplied.
## Patterns
This module works on the url / embed patterns below.
(where `*` is the id and `?` or `&` are parameter strings):
### YouTube
**YouTube Shortcodes**
```
http://youtu.be/*?
https://youtu.be/*
http://youtu.be/*
http://y2u.be/*
youtube://
```
**YouTube Shorts**
```
https://youtube.com/shorts/*
https://www.youtube.com/shorts/*
```
**YouTube `/v/` or `/vi/`**
```
http://www.youtube.com/v/*
http://youtube.com/vi/*?
http://youtube.com/v/*?
```
**YouTube `v=` or `vi=`**
```
http://www.youtube.com/ytscreeningroom?v=*
http://www.youtube.com/watch?v=*?&
https://www.youtube.com/watch?v=*
http://youtube.com/watch?vi=*&
http://youtube.com/?vi=*&
http://youtube.com/?v=*
```
**YouTube `/e/`**
```
https://www.youtube.com/e/*
https://www.youtube.com/e/*?
http://www.youtube.com/e/*
http://www.youtube.com/e/*?
```
**YouTube image links `/vi/*/` or `/an_webp/*/`**
```
https://i.ytimg.com/vi/*/hqdefault.jpg
https://i.ytimg.com/an_webp/MYDcdp-VNmQ/mqdefault_6s.webp
```
**YouTube embed**
```
http://www.youtube.com/embed/*?
https://www.youtube.com/embed/*
```
**YouTube user**
```
http://www.youtube.com/user/username#p/a/u/2/*
http://www.youtube.com/user/username#p/u/1/*?
http://www.youtube.com/user/username#p/u/1/*
```
**YouTube iframe**
```
<iframe width="560" height="315" src="https://www.youtube.com/embed/*" frameborder="0" allowfullscreen></iframe>
```
**YouTube `-nocookie`**
```
www.youtube-nocookie.com/embed/*?
```
**YouTube Attribution Link**
```
http://www.youtube.com/attribution_link?u=%2Fwatch%3Fv%3D*%26
http://www.youtube.com/attribution_link?u=%2Fwatch%3Fv%3D
http://www.youtube.com/attribution_link?u=/watch?v=*&
http://www.youtube.com/attribution_link?u=/watch?v=*
http://www.youtube.com/attribution_link?/watch?v=*
```
**YouTube live URLs**
```
https://www.youtube.com/live/*
https://youtube.com/live/*
https://youtube.com/live/*?
```
**Google Redirection to YouTube**
```
https://google.cz/url?source=web&url=<YOUTUBE_URL>
https://google.com/image?url=<YOUTUBE_URL>
```
### Vimeo
**Vimeo urls**
```
https://vimeo.com/*
https://vimeo.com/*?
https://player.vimeo.com/video/*
https://player.vimeo.com/video/*?
https://www.vimeo.com/*
https://www.vimeo.com/*?
```
**Vimeo swf embed**
```
http://vimeo.com/foo.swf?clip_id=1234
```
**Vimeo events**
```
https://vimeo.com/event/*
```
**Vimeo iframe**
```
<iframe src="https://player.vimeo.com/video/*" ...
```
**Vimeo unlisted/private urls**
```
https://vimeo.com/*/privateHash
```
⚠️ **Please note**: That `get-video-id` _will_ extract the id from the private/unlisted URLs formats for Vimeo, but the private hash would still be required to rebuild the URL in order to make it reachable/sharable in a browser. If you use `get-video-id` to help you rebuild URLs, you will want to look for this pattern yourself and remember to include the privateHash in the url you want to share. `get-video-id` focuses on extracing video ids, and ignores any other special paramaters or formats at the moment.
### Vine
**Vine urls**
```
https://vine.co/v/*
```
**Vine iframe**
```
<iframe src="https://vine.co/v/*/embed/simple" width="600" height="600" frameborder="0"></iframe>
<iframe src="https://vine.co/v/*/embed/postcard" width="600" height="600" frameborder="0"></iframe>
```
### VideoPress
**VideoPress urls**
```
https://videopress.com/v/*
https://videopress.com/embed/*
```
**VideoPress iframes**
```
<iframe src="https://videopress.com/embed/zcnJVzQF" width="600" height="600"></iframe>
```
### Microsoft Stream
**Microsoft Stream urls**
```
https://web.microsoftstream.com/video/*
https://web.microsoftstream.com/embed/video/*
```
**Microsoft Stream iframes**
```
<iframe src="https://web.microsoftstream.com/embed/video/*?&" width="640" height="360"></iframe>
```
### TikTok
**TikTok urls**
```
https://www.tiktok.com/*/video/*
https://www.tiktok.com/*/video/*?
````
**:warning: Unsupported TikTok urls**
* Shortlink URL (requires a fetch/redirect to find the real id) : `https://vm.tiktok.com/shorLinkId/`
### Dailymotion
**Dailymotion urls**
```
http://www.dailymotion.com/video/*_text
http://www.dailymotion.com/video/*
http://www.dailymotion.com/fr/relevance/search/search+query/1#video=*
https://www.dailymotion.com/video/*?playlist=
http://dai.ly/*
```
**Dailymotion iframes**
```
<iframe src="https://www.dailymotion.com/embed/video/*" width="600" height="600"></iframe>
```
**:warning: Unsupported Dailymotion urls**
* Channel id urls: `http://www.dailymotion.com/hub/*_title`
### Loom
**Loom urls**
```
https://www.loom.com/share/*
https://www.loom.com/share/*?
https://www.loom.com/embed/*
```
**Loom iframes**
```
<iframe src="https://www.loom.com/embed/*" width="600" height="600"></iframe>
```
## Contributing
If you discover a url pattern that is not covered by this module, please [open an issue](https://github.com/radiovisual/get-video-id/issues) to report it, or [submit a Pull Request](https://github.com/radiovisual/get-video-id/pull/new/master). For any submitted pull requests, please ensure that you include unit test(s) to fully cover your code contribution(s).
## License
MIT © [Michael Wuergler](https://github.com/radiovisual)