UNPKG

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