fix: spotify doesn't embed the payload anymore

This commit is contained in:
HugoPoi 2020-09-06 16:54:02 +02:00
parent 96ac5a6f31
commit c1ff3fe5a0

View File

@ -15,18 +15,30 @@ require('dotenv').config();
async function getSpotifyPlaylist(playListUrl){ 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()) .then(res => res.text())
const $ = Cheerio.load(spotifyPlaylistPageContent); const $ = Cheerio.load(spotifyPlaylistPageContent);
let playlist; let config;
$('script').each(function(i, elem){ $('script#config').each(function(i, elem){
const content = $(this).html(); config = JSON.parse($(this).html());
if(/Spotify.Entity/.test(content)){
playlist = vm.runInNewContext(content);
}
}); });
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; return playlist;
} }
@ -55,7 +67,7 @@ async function searchOnVkMusic(query){
} }
async function searchOnMyFreeMp3(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, { return await fetch(url, {
method: 'POST', method: 'POST',
@ -65,7 +77,11 @@ async function searchOnMyFreeMp3(query){
}), }),
}) })
.then(res => res.text()) .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))); .then(items => _.filter(items, item => !_.isString(item)));
} }