Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8825

Youtube Music API Part2

$
0
0

前回

https://qiita.com/bun133_/items/da3b93fe1a38abb77cf3

今回

あれから約1日、かなり進んだので成果をあげておきます。

追記

https://github.com/NDSLib/youtube-music-api
公開しました

ソースコード類

YoutubuMusic.js

constaxios=require('axios')classYoutubeMusicAPI{playerData=JSON.parse('見せられないよ')headers={// 見せられないよ}nextData=JSON.parse('見せられないよ')k=''/**
     * @param key(string)
     */constructor(key){this.k=key}asyncplayer(videoId){letdata=JSON.parse(JSON.stringify(this.playerData))data['videoId']=videoIdreturnawaitaxios.post(`https://music.youtube.com/youtubei/v1/player?key=${this.k}`,data,{headers:this.headers})}asyncgetFormats(videoId){letres=awaitthis.player(videoId,this.k)returnres['data']['streamingData']['formats']}asyncgetAdaptiveFormats(videoId){letres=awaitthis.player(videoId,this.k)returnres['data']['streamingData']['adaptiveFormats']}asyncnext(videoId){letdata=JSON.parse(JSON.stringify(this.nextData))data['videoId']=videoIdreturnawaitaxios.post(`https://music.youtube.com/youtubei/v1/next?alt=json&key=${this.k}`,data,{headers:this.headers})}asyncbrowse(){returnawaitaxios.post(`https://music.youtube.com/youtubei/v1/browse?alt=json&key=${this.k}`,this.browseData,{headers:this.headers})}asyncgetBrowseData(){returnnewBrowseData(awaitthis.browse())}}classBrowseData{json={}constructor(json){this.json=json['data']}getTabs(){letdata=this.json['contents']['singleColumnBrowseResultsRenderer']['tabs']letr=[]for(lettindata){r[t]=newTab(data[t])}returnr}}classTab{json={}constructor(json){this.json=json['tabRenderer']}getContents(){if(this.json['content']['sectionListRenderer']['contents']!==undefined){letdata=this.json['content']['sectionListRenderer']['contents']letr=[]for(letoindata){for(letmindata[o]['musicCarouselShelfRenderer']['contents']){r.push(newVideoItem(data[o]['musicCarouselShelfRenderer']['contents'][m]))}}returnr}}}classVideoItem{json={}constructor(json){this.json=json['musicTwoRowItemRenderer']}getThumbnails(){returnthis.json['thumbnailRenderer']['musicThumbnailRenderer']['thumbnail']['thumbnails']}getTitleObject(){returnthis.json['title']['runs']}getSubTitleObject(){returnthis.json['subtitle']['runs']}getTitle(){letdata=this.getTitleObject()lets=""for(letoindata){s+=data[o]['text']}returns}getSubTitle(){letdata=this.getSubTitleObject()lets=""for(letoindata){s+=data[o]['text']}returns}}module.exports={YoutubeMusicAPI}

Video.js

classVideo{videoId=''/**
     * @param videoId(string)
     */constructor(videoId){this.videoId=videoId}asyncplayer(api){returnawaitapi.player(this.videoId)}asyncgetFormats(api){returnawaitapi.getFormats(this.videoId)}asyncgetAdaptiveFormats(api){returnawaitapi.getAdaptiveFormats(this.videoId)}asyncnext(api){returnawaitapi.next(this.videoId)}asyncgetVideoDetail(api){letdata=awaitthis.player(api)returnnewVideoDetail(data['data']['videoDetails'])}}classVideoDetail{json={}constructor(json){this.json=json}getTitle(){returnthis.json['title']}getVideoID(){returnthis.json['videoId']}getAuthor(){returnthis.json['author']}getViewCount(){returnthis.json['viewCount']}getThumbnails(){returnthis.json['thumbnail']['thumbnails']}}module.exports={Video,VideoDetail}

そして本題

constyoutubeMusicAPI=require('./YoutubeMusic.js')constvideo_js=require('./Video')constvideo=newvideo_js.Video('YDnZFwlZa1g')constkey='見せられないよ'constapi=newyoutubeMusicAPI.YoutubeMusicAPI(key)asyncfunctionmain(){letnext=awaitvideo.next(api)// 直リン取得letplayer=awaitvideo.getFormats(api)console.log('format res')console.log(player[0]['url'])// 動画IDからサムネイル取得letdetail=awaitvideo.getVideoDetail(api)console.log(`Title:${detail.getTitle()}`)for(lettindetail.getThumbnails()){console.log(`Thumbnail${t}:${detail.getThumbnails()[t]['url']}`)}letbrowse=awaitapi.getBrowseData()// YoutubeMusicでいくところの、ホームに表示されるサムネイル・タイトル・サブタイトルconsole.log(browse.getTabs()[0].getContents()[0].getThumbnails())console.log(browse.getTabs()[0].getContents()[0].getTitle())console.log(browse.getTabs()[0].getContents()[0].getSubTitle())}main().then(r=>console.log('END'))

終わりに

まぁ、全部jsonなんで見てもらえばわかると思います。
ただ、なんだかんだ実用範囲まで来ましたね...


Viewing all articles
Browse latest Browse all 8825

Trending Articles