
Security News
npm Adopts OIDC for Trusted Publishing in CI/CD Workflows
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
youtube-search-api
Advanced tools
Node.js and TypeScript library to get YouTube search results with playlist by provided keywords, no Login or API key required!
Youtube Search API is an API for getting Youtube search results.
npm install youtube-search-api
const youtubesearchapi = require("youtube-search-api");
import youtubesearchapi from "youtube-search-api";
youtubesearchapi.GetListByKeyword("<keywords>",[playlist boolean],[limit number],[options JSONArray])
GetListByKeywords Result
{items:[],nextPage:{nextPageToken:"xxxxxxxx",nextPageContext:{}}}
"items" is the array from youtube, "nextPage" needs to pass when going to the next page. If playlist arg is true, will return type:'playlist'
but the videos:[]
property will not return the whole videos in the list, need to call GetPlaylistData
to get real playlist's videos. Item with Video type will return isLive=[true/false]
to identify live video or not.
Options added, this version only support return result type, e.g. [{type:'video'}]
.
Parameter | Type | Value |
---|---|---|
keywords | String | up to you |
playlist | boolean | true/false |
limit | number | integer |
options | JSON Array | [{type:"video/channel/playlist/movie"}] |
youtubesearchapi.NextPage(<nextPage from GetListByKeywords result>,[playlist boolean],[limit number])
NextPage Result
{items:[],nextPage:{nextPageToken:"xxxxxxxx",nextPageContext:{}}}
Item with Video type will return isLive=[true/false]
to identify live video or not.
youtubesearchapi.GetPlaylistData(<Playlist Id>,[limit number])
Playlist Result
{items:[],metadata:{}}
youtubesearchapi.GetSuggestData([limit number])
Suggest Data Result
{
items: [];
}
Item with Video type will return isLive=[true/false]
to identify live video or not.
youtubesearchapi.GetChannelById(<channel ID>)
Channel Data Results
[[{ title: "[title]", content: [Object] }]];
Will return tabs in array format.
GetVideoDetails
youtubesearchapi.GetVideoDetails(<video ID>)
Get Video Details Results
{
id:"",
title: "",
thumbnail:[],
isLive: [true/false],
channel: "",
channelId:"",
description: "",
keywords:[],
suggestion: [
{id: "",
type: 'video',
thumbnail: [],
title: "",
channelTitle: "",
shortBylineText: "",
length: [Object],
isLive: [true/false]
} ...
]
}
Will return video details in Json format.
Only return short video from suggestion.
GetShortVideo
youtubesearchapi.GetShortVideo();
Get Short Video List Results
[
{
id: "",
type: "reel",
thumbnail: {
url: "",
width: 405, //only return 405
height: 720, //only return 720
},
title: "",
inlinePlaybackEndpoint: {}, //may not return all the time
},
];
Will return Short Video list in Json Array format.
The library provides comprehensive error handling with custom error classes and error codes.
For detailed information about error messages and their translations, see ERROR_MESSAGES.md.
const {
YouTubeAPIError,
ErrorHandler,
ErrorCodes,
} = require("youtube-search-api");
Error Code | Description |
---|---|
NETWORK_ERROR | Network connection issues |
INIT_DATA_ERROR | Cannot get YouTube initialization data |
PLAYER_DATA_ERROR | Cannot get YouTube player data |
INVALID_PLAYLIST | Invalid playlist ID |
INVALID_VIDEO_ID | Invalid video ID |
INVALID_CHANNEL_ID | Invalid channel ID |
RATE_LIMIT_ERROR | Rate limit exceeded |
PARSE_ERROR | Data parsing error |
UNKNOWN_ERROR | Unknown error |
try {
const result = await youtubesearchapi.GetVideoDetails("invalid_video_id");
} catch (error) {
if (error instanceof YouTubeAPIError) {
console.log(`Error Code: ${error.code}`);
console.log(`Error Message: ${error.message}`);
console.log(`Status Code: ${error.statusCode}`);
}
}
const errorHandler = ErrorHandler.getInstance();
errorHandler.setErrorLogger((error) => {
console.log(`[${new Date().toISOString()}] ${error.code}: ${error.message}`);
// Send to your logging service
});
// Handle specific error types
try {
await youtubesearchapi.GetPlaylistData("invalid_playlist");
} catch (error) {
if (error instanceof YouTubeAPIError) {
switch (error.code) {
case ErrorCodes.INVALID_PLAYLIST:
console.log("Please check the playlist ID");
break;
case ErrorCodes.NETWORK_ERROR:
console.log("Please check your internet connection");
break;
case ErrorCodes.RATE_LIMIT_ERROR:
console.log("Please try again later");
break;
default:
console.log("An unknown error occurred");
}
}
}
See example/error-handling-example.js
for more detailed examples.
If you want to work with me to fix bug or implement new idea. You are available to send me some new idea of this project.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
https://www.buymeacoffee.com/damonwcw
FAQs
Node.js and TypeScript library to get YouTube search results with playlist by provided keywords, no Login or API key required!
The npm package youtube-search-api receives a total of 6,802 weekly downloads. As such, youtube-search-api popularity was classified as popular.
We found that youtube-search-api demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
Research
/Security News
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.