π πΌ Youtube Search as a service
SuchTube is a server and a CLI app to search videos on YouTube.
The server responds to multiple formats and even comes with Slack integration and Discord integration:
htmlatGET /search.html?q=catsjsonatGET /search.json?q=catstextatGET /search.text?q=catsslackatPOST /search.slack+ Slack payloaddiscordatPOST /search.discord+ Discord interaction payload
The CLI allows you to search videos without leaving the terminal:
> suchtube funny cats
> suchtube football top goals --random --open
> suchtube trending videos --duration=short
> suchtube documentary --duration=long --random
> suchtube javascript tutorials --all
Or start the server:
> suchtube --server
You can also use the search functionality as a library.
- Node.js: Currently this package officially supports (and is tested against) Node v18+.
- YouTube Data API key: Should be loaded in the current shell as an environment variable named
SUCHTUBE_YOUTUBE_DATA_API_V3.
Via npm:
> npm install -g suchtube
> suchtube --help
Via GitHub:
- Clone this repo and
cdinto it. - Run
npm install - Run
npm startto start the server - Run
bin/suchtube -hto use the CLI
The server listens by default on port 3333, if you want to change this, you can do it via the PORT environment variable. If you're starting the server using the SuchTube CLI, you can also set the port by:
> suchtube --server --port 4444
Options while using the CLI are available in the following formats: --time=10 or --time 10. For the server, you should pass the options along with the query, inside the q paramater, ie: ?q=funny+cats+--time=10.
Starts the video at the given time in seconds.
Returns a random video taking into account the given topic.
Filters videos by duration. Available values: any (default), short, medium, long.
Return all videos from the search.
Opens the video in your browser.
Displays full video's information. It corresponds to hit the /search.json endpoint against the server.
You can use the SuchTube search as a library:
import { search } from 'suchtube'
search('funny cats', { random: true, duration: 'short' }).then(video => {
console.log(video.title)
console.log(video.link)
console.log(video.publishedAt)
})/suchtube funny cats --random
To integrate SuchTube in your Slack workspace, read the following guides: https://api.slack.com/slash-commands.
Basically, you should run the server, make it publicly available (via URL or IP) and create a custom Slash Command pointing to your instance URL.
/suchtube query:funny cats --random
To integrate SuchTube in your Discord server, read the following guides: https://discord.com/developers/docs/interactions/application-commands.
You need to:
- Create a Discord application at https://discord.com/developers/applications
- Set up a slash command with the name
suchtube - Add a string option named
queryfor the search terms - Set the interaction endpoint URL to your server instance at
/search.discord - Install the application to your Discord server
The Discord integration responds with the video link in the channel where the command was used.
Any kind of idea, suggestion or bug report are really welcome! Just fork the repo, make your hack and send a pull request.
Thanks to all contributors, you rock π
Start the server in development mode (nodemon + debugging):
> npm run dev
Run tests:
> npm test
Copyright (c) Marc Anguera Insa. SuchTube is released under the MIT License.