# @yimura/scraper

> A YouTube scraper using zero dependencies

Latest version **1.2.4** (published 2022-11-15) · MIT license · 0 weekly downloads

## Install

```sh
npm install @yimura/scraper
pnpm add @yimura/scraper
yarn add @yimura/scraper
bun add @yimura/scraper
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.4 |
| Published | 2022-11-15 |
| First published | 2020-10-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 25.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 51 |
| Author | yimura |
| Maintainers | yimura |
| Keywords | youtube search, search youtube, yt, music, youtube, scrape, youtube-scraper, scrape-youtube, search, discord, bot |

## Links

- npm: https://www.npmjs.com/package/@yimura/scraper
- Repository: https://github.com/Yimura/Scraper
- Homepage: https://github.com/Yimura/Scraper#readme
- Issues: https://github.com/Yimura/Scraper/issues
- npm.io page: https://npm.io/package/@yimura/scraper

## Alternatives

- [@tsparticles/shape-image](https://npm.io/package/@tsparticles/shape-image.md) — 303.7K weekly downloads
- [@tsparticles/shape-line](https://npm.io/package/@tsparticles/shape-line.md) — 233.7K weekly downloads
- [stringify-attributes](https://npm.io/package/stringify-attributes.md) — 58.6K weekly downloads
- [mobile-drag-drop](https://npm.io/package/mobile-drag-drop.md) — 46.3K weekly downloads
- [@comunica/actor-rdf-parse-html](https://npm.io/package/@comunica/actor-rdf-parse-html.md) — 29.2K weekly downloads

## Recent versions

- 1.2.4 (latest) — 2022-11-15
- 1.2.3 — 2021-08-17
- 1.2.2 — 2021-05-25
- 1.2.1 — 2021-04-26
- 1.2.0 — 2021-03-25
- 1.1.0 — 2021-02-19
- 1.0.0 — 2021-02-15
- 0.2.3 — 2020-12-16
- 0.2.2 — 2020-11-25
- 0.2.1 — 2020-10-28
- 0.2.0 — 2020-10-28
- 0.1.0 — 2020-10-27

## README

# YouTube Scraper

## Table of Contents

 * [Why use this package](#why-use-this-package)
    - [Timings](#timings)
 * [Options](#options)
    - [Example Options](#example-options)
 * [Example Code](#example-code)
    * [Output](#output)
 * [Return Object Structure](#return-object-structure)

## 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](https://prnt.sc/1018ttl)

## 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](http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry). |
| 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:
```js
import youtube from '@yimura/scraper'

// 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:**
```js
const Scraper = require('@yimura/scraper').default;

const youtube = new Scraper();

youtube.search('Never gonna give you up').then(results => {
    console.log(results.videos[0]);
});
```

**ESModule:**
```js
import youtube from '@yimura/scraper'

const yt = new youtube.default();
yt.search('Never gonna give you up').then(results => {
    console.log(results.videos[0]);
});
```

### Output

```js
{
    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
```js
{
    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
        }
    ]
}
```

---
_Source: https://npm.io/package/@yimura/scraper · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
