Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/radiovisual/get-video-id

Get the YouTube, Vimeo, Vine, VideoPress, TikTok, Microsoft Stream, Loom or Dailymotion video id from a url or embed string.
https://github.com/radiovisual/get-video-id

Last synced: 4 days ago
JSON representation

Get the YouTube, Vimeo, Vine, VideoPress, TikTok, Microsoft Stream, Loom or Dailymotion video id from a url or embed string.

Awesome Lists containing this project

README

        

# get-video-id [![codecov](https://codecov.io/gh/radiovisual/get-video-id/branch/master/graph/badge.svg?token=fG7V2VRDYY)](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

```

###### 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**
```

```

**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=
https://google.com/image?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**
```

```

### VideoPress

**VideoPress urls**
```
https://videopress.com/v/*
https://videopress.com/embed/*
```

**VideoPress iframes**
```

```

### Microsoft Stream

**Microsoft Stream urls**
```
https://web.microsoftstream.com/video/*
https://web.microsoftstream.com/embed/video/*
```

**Microsoft Stream iframes**
```

```

### 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**
```

```

**: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**
```

```

## 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)