Я очень новичок в Node.js и XMLHttpRequest, поэтому, пожалуйста, потерпите меня, если это вопрос с простым ответом.
В настоящее время я пытаюсь сканировать веб-страницу друзей (с его разрешения, конечно), на которой размещены видео и субтитры. Я хочу сделать это, написав приложение командной строки Node.js. В настоящее время я просто пытаюсь получить ссылку на видео и ссылку на субтитры. Это то, что я до сих пор:
#!/usr/bin/env node
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var htmlparser = require("htmlparser2");
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// HTML source
var html = this.responseText;
var season = 0;
var episode = 0;
var parser = new htmlparser.Parser({
onopentag: function(name, attribs) {
if (name === "li" && attribs.id === "season-1") {
season = 1;
console.log("In season 1");
for(var attr in attribs){
console.log(attr);
}
}
if (name === "a" && season === 1) {
episode = 1;
var nextPage = attribs.data;
console.log("\""+nextPage+"\"");
// Go to "nextPage" here
xhttp.open("GET", "\""+nextPage+"\"", true);
}
},
onattribute: function(name, value) {
if(name === "data-url" && season === 1){
if(value.includes("episode-")){
episode = value.substr(8,1);
}
console.log(value);
console.log("Episode is: " + episode)
}
},
ontext: function(text) {
},
onclosetag: function(tagname) {
if (tagname === "li" && season === 1) {
season = 0;
console.log("Leaving season 1");
}
}
}, {
decodeEntities: true
});
parser.write(html);
parser.end();
}
};
xhttp.open("GET", "https://friendspage.org", true);
xhttp.send();
Приведенный выше код приводит к выводу:
In season 1
id
episode-1
Episode is: 1
"https://friendspage.org/episode-1"
episode-2
Episode is: 2
"https://friendspage.org/episode-2"
episode-3
Episode is: 3
"https://friendspage.org/episode-3"
episode-4
Episode is: 4
"https://friendspage.org/episode-4"
episode-5
Episode is: 5
"https://friendspage.org/episode-5"
episode-6
Episode is: 6
"https://friendspage.org/episode-6"
episode-7
Episode is: 7
"https://friendspage.org/episode-7"
episode-8
Episode is: 8
"https://friendspage.org/episode-8"
episode-9
Episode is: 9
"https://friendspage.org/episode-9"
Leaving season 1
Код работает так, как я хочу, за исключением части, в которой я хочу перейти на nextPage
. Я собираюсь использовать входные переменные из командной строки, чтобы выбрать страницу для перехода, но в настоящее время я не знаю, как перейти к nextPage
.
// Go to "nextPage" here
xhttp.open("GET", "\""+nextPage+"\"", true);
Попытка использовать xhttp.send()
приводит к ошибке send has already been called
. Я предполагаю, что мне нужно либо закрыть текущий запрос и открыть новый, либо просто запустить другой экземпляр XMLHttpRequest.
Если это то, что мне нужно сделать, какой метод предпочтительнее? И какой самый чистый способ сделать это? Если нет, какое решение мне нужно использовать?