Skip to content
/ scany Public

Easily grab recent video data from user, channel, and playlist URLs!

License

Notifications You must be signed in to change notification settings

jimbuck/scany

Repository files navigation

scany

Build Status Code Coverage Dependencies DevDependencies npm Monthly Downloads Total Downloads

YouTube provides basic information on users, channels, and playlists via RSS feeds. This module makes it incredibly easy to access that data without requiring an API key! Not having to sign up for something new is great for hackathons and small projects.

Features

  • No configuration necessary!
  • Scrapes the web for channels/users/playlists and reads metadata directly from the video feeds.
  • Anonymous API, no OAuth key needed!
  • Automatically creates all available thumbnail URLs for easy use!
  • Complete, built-in typescript typings!

Installation

npm i scany

Example

import { scanFeed, scanVideo } from 'scany';

let singleVideo = await scanVideo('https://www.youtube.com/watch?v=dQw4w9WgXcQ');
let multipleVideos = await scanVideo(['OFbBs9M0cqw', 'https://www.youtube.com/watch?v=beaHxW5o-uw']);

let channelViaUser = await scanFeed('https://www.youtube.com/user/freddiew');
let channelViaChannelId = await scanFeed('https://www.youtube.com/channel/UCG08EqOAXJk_YXPDsAvReSg');
let playlist = await scanFeed('https://www.youtube.com/playlist?list=PLjHf9jaFs8XUXBnlkBAuRkOpUJosxJ0Vx');

console.log(`${playlist.playlistTitle} by ${playlist.channelName}:`);
playlist.videos.forEach((video, i) => {
  console.log(`[${i}] ${video.videoTitle} (${video.channelName})`);
});

API

Methods

scanFeed(url, [options])

Returns a Promise for a FeedResult object.

url

Type: String

The URL to a Youtube channel or playlist. If the URL is a channel it will return the feed of the default "Uploads" playlist.

options

Type: Object

  • limit: Number - Limit the number of videos retrieved from the feed URL. Defaults to all (MAX_SAFE_INTEGER) for playlists and 10 for channel urls (recent uploads).
  • scanVideos: Boolean - Toggles the retrieval of extra metadata for each video. Defaults to true.
  • concurrency: Number - Maximum number of videos to query at once. Defaults to 8. Ignored if scanVideos is false.

scanVideo(url, [concurrency])

Returns a Promise for one or more VideoResult objects.

url

Type: String String[]

The URL or array of URLs to a Youtube video.

concurrency

Type: Number

Maximum number of videos to query at once. Defaults to 8.

findFeed(video, [options])

Finds a playlist based on the provided video title/channel.

  • TODO

Models

FeedResult

Type: Object

  • TODO

VideoResult

Type: Object

  • TODO

Related

  • Use pully to easily download a retrieved videos.
  • Check out pully-server for a complete solution to set up an auto-download system.

Contribute

  1. Fork it
  2. npm i
  3. npm run watch
  4. Make changes and write tests.
  5. Send pull request! 😎

License

MIT