ts-npm-ytmusic-api/README.md

7.0 KiB

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

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