У меня есть функция узла, которая получает ссылку на видео YouTube и отправляет запрос на https://www.convertmp3.io/. Это веб-сайт, который позволяет загружать MP3 с YT.
Затем он анализирует HTML-код ответа, чтобы получить прямую ссылку на скачивание из документа (используя библиотеку «cheerio», но если вы с ней не знакомы, это просто для извлечения ссылки из HTML), а затем открывает ссылку на скачать MP3.
Мой код:
const request = require("request")
const cheerio = require("cheerio")
let link = "https://www.convertmp3.io/download/?video=https://www.youtube.com/watch?v=RRSDTE5nWnc"
const options = {
url: link,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
};
request(options, (error, response, html) => {
if(!error && response.statusCode == 200)
{
const $ = cheerio.load(html)
const document = $('.infoBox')
let href = "https://www.convertmp3.io" + document.find("#download").attr('href')
console.log(href)
}
})
При работе на моей машине этот код работает правильно. В console.log есть ссылка, которую я могу открыть в своем браузере и увидеть, что mp3 действительно загружается.
Но когда я запускаю его на Lambda, ссылка, которую я получаю, имеет правильный формат, но она просто не работает. Он перенаправляет на какой-то несуществующий домен.
Я не совсем уверен, как это вообще возможно. Единственное, о чем я могу подумать, это то, что веб-сайт может подумать, что программа является ботом (логически) и дать неправильную ссылку (что звучит довольно странно). Но я решил также отправить несколько заголовков пользовательских агентов. Это тоже не сработало.
Я действительно смущен тем, как это возможно, и даже не знаю, что еще можно попробовать. Есть мысли?