Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

scraper-edge

patrickjquinn46MIT1.1.0TypeScript support: included

A YouTube scraper using zero dependencies for use in edge workers (Such as Cloudflare Workers)

youtube search, search youtube, yt, music, youtube, scrape, youtube-scraper, scrape-youtube, search, discord, bot, cloudflare, edge

readme

YouTube Scraper for the edge

Table of Contents

Why use this package?

This is a YouTube scraper with zero dependencies. Everything has been coded to have a minimal footprint creating a small package that's aimed at being as fast as possible.

Timings

These are the timings I would get on average over 20 tests, ofcourse the Fetch time depends on how good your connection is to YouTube and how loaded YouTube is at that point.

Type Fetch Time Processing Time
video 585.632055 ms 3.117175 ms
channel 494.026065 ms not tested
playlist 569.424545 ms not tested

Check here

Options

Property Default Description
language en Set the language that you would like for results to be returned in. A list of supported language types can be found here.
searchType video Which type to search for on YouTube, supported types are any, channel, live, movie, playlist and video
`
"Sort by" has not been implemented as of now.
All data is sorted in the default order that YouTube returns these in.
`

Example Options

You can set the global language which YouTube should return results in or set the return language per search/request:

import youtube from 'scraper-edge'

// This will set the language to French from France globally
const yt = new youtube.default('fr-FR');

// Sets the language communicated to YouTube to Dutch from Belgium for this search
const results = yt.search('Never gonna give you up', {
    language: 'nl-BE',
    searchType: 'video' // video is the default search type
});

Example Code

CommonJS:

const Scraper = require('scraper-edge').default;

const youtube = new Scraper();

youtube.search('Never gonna give you up').then(results => {
    console.log(results.videos[0]);
});

ESModule:

import youtube from 'scraper-edge'

const yt = new youtube.default();
yt.search('Never gonna give you up').then(results => {
    console.log(results.videos[0]);
});

Output

{
    channel: {
        name: 'Official Rick Astley',
        link: 'https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw',
        verified: true
    },
    description: "Rick Astley's official music video for “Never Gonna Give You Up” Listen to Rick Astley: https://RickAstley.lnk.to/_listenYD Subscribe ...",
    duration: 213,
    duration_raw: "3:33",
    id: 'dQw4w9WgXcQ',
    link: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
    thumbnail: 'https://i.ytimg.com/vi/dQw4w9WgXcQhqdefault.jpg',
    shareLink: 'https://youtu.be/dQw4w9WgXcQ',
    title: 'Rick Astley - Never Gonna Give You Up (Video)',
    uploaded: '11 years ago',
    views: 788551856
}

Return Object Structure

{
    channels: [
        {
            channelId: String,
            description: String,
            link: String,
            thumbnails: [
                {
                    url: String,
                    width: Number,
                    height: Number
                }
            ],
            subscribed: Boolean,
            uploadedVideos: Number,
            verified: Boolean
        }
    ],
    playlists: [
        {
            preview: [
                {
                    duration: Number,
                    duration_raw: String,
                    views: Number,
                    id: String,
                    link: String,
                    thumbnail: String,
                    title: String,
                    shareLink: String
                }
            ],
            id: String,
            link: String,
            thumbnail: String,
            title: String,
            videoCount: Number
        }
    ],
    streams: [
        {
            watching: Number,
            channel: {
                name: String,
                link: String,
                verified: Boolean
            },
            id: String,
            link: String,
            thumbnail: String,
            title: String,
            shareLink: String
        }
    ],
    videos: [
        {
            description: String,
            duration: Number,
            duration_raw: String,
            uploaded: String,
            views: Number,
            channel: {
                name: String,
                link: String,
                verified: Boolean
            },
            id: String,
            link: String,
            thumbnail: String,
            title: String,
            shareLink: String
        }
    ]
}

changelog

Yimura/Scraper Changelog

Versioning Policy

Following: major.minor.patch

  • major is almost never used unless major breaking changes were pushed or a complete rewrite happened of the code
  • minor used whenever a single file was rewritten or significant change happened
  • patch may only be bumped after a bug was resolved as whole

2021-05-25, Version 1.2.2, @GeopJr

  • fix(idToThumbnail): always use maxres, thanks @GeopJr

2021-03-25, Version 1.2.1, @omarkhatibco

Changes

  • fixed TypeScript annotations, thanks @omarkhatibco

2021-03-25, Version 1.2.0, @Lioness100

Changes

  • Added typings, thanks @Lioness100

2021-02-19, Version 1.1.0, @Yimura

Changes

  • Fixed an issue with verified channel states where it would only check for verified artist but not verified channel.
  • Added support for channel search.
  • Fixed typo's in README

2021-02-15, Version 1.0.0, @Yimura

Changes

  • Updated Constants with pre-decoded SearchTypes, this to prevent problems where URLSearchParams would encode the value again.
  • The Constants are accessible and export in the index if you needed these for some reason.
  • YT Scraper has been updated and support has been added for the following search types:
    • any
    • live
    • movie
    • playlist
    • video
  • Tests have been updated for the new functionalities
  • README includes an entire response object of possible results

2020-12-16, Version 0.2.3, @Yimura

Changes

  • Fixed an edge case were data from YouTube would be incorrectly parsed.

2020-11-25, Version 0.2.2, @Yimura

Changes

  • Fixed a change in the YouTube webpage preventing from parsing a valid result

2020-10-28, Version 0.2.1, @Yimura

Changes

  • Updated README

2020-10-28, Version 0.2.0, @Yimura

Changes

  • Added a language option
  • Added a limit option
  • Fixed #2
  • Made testing more in-depth of features
  • Updated README to showcase the options

2020-10-27, Version 0.1.0, @Yimura

Changes

  • Initial Beta Release