Fork of ytmusic-api
Go to file
Zechariah afb8147a26 Finished getSearchSuggestions 2022-03-30 17:42:22 +08:00
docs Finished getSearchSuggestions 2022-03-30 17:42:22 +08:00
src Updated the search functions 2022-03-29 18:44:10 +08:00
.editorconfig Initial Commit - Searching works 2021-12-23 01:01:37 +08:00
.gitignore Migrated to using vuepress@2.0.0-beta 2022-03-29 16:45:00 +08:00
.npmignore Updated project config 2022-03-28 03:28:37 +08:00
.npmrc Migrated to using vuepress@2.0.0-beta 2022-03-29 16:45:00 +08:00
.prettierrc Initial Commit - Searching works 2021-12-23 01:01:37 +08:00
LICENSE Updated LICENSE 2022-03-28 03:31:43 +08:00
README.md Wrote documentation for all references 2022-03-30 17:42:19 +08:00
package.json Removed vue component 2022-03-30 00:41:43 +08:00
pnpm-lock.yaml Removed vue component 2022-03-30 00:41:43 +08:00
tsconfig.json Updated project configuration 2022-02-05 15:43:54 +08:00

README.md

YTMusic API

License Languages Top Language Commit Activity Last commit

YouTube Music API (Unofficial) is a YouTube Music data scraper. It comes with TypeScript support API for return types. The NPM Package can be found here

Motivation

I used to use youtube-music-api as my youtube music api data scraper. I liked looking into the source code of how it works but it never made sense to me. I also didn't like that there were no TypeScript annotations for the return types of methods. Because of this, I decided to build my own version of a youtube music api with TypeScript annotations, testing and written in a way I can understand.

Features

  • TypeScript Support for data return types
    • Data from YouTube can be inconsistent but YTMusic API has been tested and the data matches the TypeScript types 95% of the time
  • Scrape information directly from YouTube Music API
    • Search Suggestions
    • Songs
    • Videos
    • Artists
    • Albums
    • Playlists

This function takes in the following parameters

Name Data Type Description
query string Search query
category "SONG" | "VIDEO" | "ARTIST" | "ALBUM" | "PLAYLIST" | undefined Type of results to search for. If not specified, returns all types of search result

The function when nothing is passed as the category returns a Promise<SearchResult[]> which are the search results of all categories

ytmusic.search("Lilac").then(results => {
	console.log(results)
})
search (category = "SONG")

When you pass in "SONG" as the category,

The function returns a Promise<SongDetailed[]> which are the song results

ytmusic.search("Lilac", "SONG").then(songs => {
	console.log(songs)
})
search (category = "VIDEO")

When you pass in "VIDEO" as the category,

The function returns a Promise<VideoDetailed[]> which are the video results

ytmusic.search("Lilac", "VIDEO").then(videos => {
	console.log(videos)
})
search (category = "ARTIST")

When you pass in "ARTIST" as the category

The function returns a Promise<ArtistDetailed[]> which are the artist results

ytmusic.search("Lilac", "ARTIST").then(artists => {
	console.log(artists)
})
search (category = "ALBUM")

When you pass in "ALBUM" as the category,

The function returns a Promise<AlbumDetailed[]> which are the album results

ytmusic.search("Lilac", "ALBUM").then(albums => {
	console.log(albums)
})
search (category = "PLAYLIST")

When you pass in "PLAYLIST" as the category,

The function returns a Promise<PlaylistFull[]> which are the playlist results

ytmusic.search("Lilac", "PLAYLIST").then(playlists => {
	console.log(playlists)
})

getSong

This function takes in the following parameters

Name Data Type Description
videoId string Video ID

The function returns a Promise<SongFull> which is the information about the song

ytmusic.getSong("v7bnOxV4jAc").then(song => {
	console.log(song)
})

getVideo

This function takes in the following parameters

Name Data Type Description
videoId string Video ID

The function returns a Promise<VideoFull> which is the information about the video

ytmusic.getVideo("v7bnOxV4jAc").then(video => {
	console.log(video)
})

getArtist

This function takes in the following parameters

Name Data Type Description
artistId string Artist ID

The function returns a Promise<ArtistFull> which is the information about the artist

ytmusic.getArtist("UCTUR0sVEkD8T5MlSHqgaI_Q").then(artist => {
	console.log(artist)
})

getArtistSongs

This function takes in the following parameters

Name Data Type Description
artistId string Artist ID

The function returns a Promise<SongDetailed[]> which is the information about all the artist's songs

ytmusic.getArtistSongs("UCTUR0sVEkD8T5MlSHqgaI_Q").then(artistSongs => {
	console.log(artistSongs)
})

getArtistAlbums

This function takes in the following parameters

Name Data Type Description
artistId string Artist ID

The function returns a Promise<AlbumDetailed[]> which is the information about all the artist's albums

ytmusic.getArtistAlbums("UCTUR0sVEkD8T5MlSHqgaI_Q").then(artistAlbums => {
	console.log(artistAlbums)
})

getAlbum

This function takes in the following parameters

Name Data Type Description
albumId string Album ID

The function returns a Promise<AlbumFull> which is the information about the album

ytmusic.getAlbum("MPREb_iG5q5DIdhdA").then(album => {
	console.log(album)
})

getPlaylist

This function takes in the following parameters

Name Data Type Description
playlistId string Playlist ID

The function returns a Promise<PlaylistFull> which is the information about the playlist (without the videos)

ytmusic.getPlaylist("OLAK5uy_nRb467jR73IXKybwzw22_rTYIJ808x4Yc").then(playlist => {
	console.log(playlist)
})

getPlaylistVideos

This function takes in the following parameters

Name Data Type Description
playlistId string Playlist ID

The function returns a Promise<Omit<VideoDetailed, "views">[]> which is the information about the videos without the view count

ytmusic.getPlaylistVideos("OLAK5uy_nRb467jR73IXKybwzw22_rTYIJ808x4Yc").then(playlistVideos => {
	console.log(playlistVideos)
})

Credits

A lot of the credit should go to youtube-music-api. I build this package as a refactored and tested version of youtube-music-api with TypeScript annotations

Testing

YTMusic API's data return types are tested with Mocha. To run the tests, run the command

$ npm run test

Built with

  • TypeScript
    • @types/mocha
    • @types/node
    • @types/tough-cookie
    • typescript
  • Axios
    • axios
  • Tough Cookie
    • tough-cookie
  • Mocha
    • mocha
    • mocha.parallel
    • ts-mocha
  • Miscellaneous
    • validate-any