From c1ff3fe5a0ef8b1c2e8cfb293a2f74f828fb463f Mon Sep 17 00:00:00 2001 From: HugoPoi Date: Sun, 6 Sep 2020 16:54:02 +0200 Subject: [PATCH] fix: spotify doesn't embed the payload anymore --- index.js | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index 016f003..b5aab4e 100755 --- a/index.js +++ b/index.js @@ -15,18 +15,30 @@ require('dotenv').config(); async function getSpotifyPlaylist(playListUrl){ - const spotifyPlaylistPageContent = await fetch(playListUrl) + const spotifyPlaylistPageContent = await fetch(playListUrl, { + headers: { + 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0', + } + }) .then(res => res.text()) const $ = Cheerio.load(spotifyPlaylistPageContent); - let playlist; - $('script').each(function(i, elem){ - const content = $(this).html(); - if(/Spotify.Entity/.test(content)){ - playlist = vm.runInNewContext(content); - } + let config; + $('script#config').each(function(i, elem){ + config = JSON.parse($(this).html()); }); + debug('config=%O', config); + + const playlistSpotifyId = /\/playlist\/([^\/]+)\/?$/.exec(playListUrl)[1]; + + const playlist = await fetch(`https://api.spotify.com/v1/playlists/${playlistSpotifyId}?type=track%2Cepisode`, { + headers: { + 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0', + Authorization: `Bearer ${config.accessToken}` + } + }).then(res => res.json()); + return playlist; } @@ -55,7 +67,7 @@ async function searchOnVkMusic(query){ } async function searchOnMyFreeMp3(query){ - const url = new URL('https://myfreemp3cc.com/api/search.php?callback=callback'); + const url = new URL('https://myfreemp3cc.com/api/search.php?callback=jQuery666'); return await fetch(url, { method: 'POST', @@ -65,7 +77,11 @@ async function searchOnMyFreeMp3(query){ }), }) .then(res => res.text()) - .then(jsonp => vm.runInNewContext(jsonp, { callback: (payload) => payload.response })) + .then(page => { + debug('page=%O', page); + return page; + }) + .then(jsonp => vm.runInNewContext(jsonp, { jQuery666: (payload) => payload.response })) .then(items => _.filter(items, item => !_.isString(item))); }