Javascript NodeJS-调用函数和结构
我对Javascript和NodeJs还很陌生,我只是想知道如何构造它,这样它就可以生成以下结构的消息:标题和标题。所以我要做的是初始化变量,然后编写一个函数从网站中删除数据(Javascript NodeJS-调用函数和结构,javascript,node.js,web-scraping,discord,Javascript,Node.js,Web Scraping,Discord,我对Javascript和NodeJs还很陌生,我只是想知道如何构造它,这样它就可以生成以下结构的消息:标题和标题。所以我要做的是初始化变量,然后编写一个函数从网站中删除数据(scrapData),然后运行该函数,然后将信息放入数组(标题、标题、图像长),然后循环将生成带有标题和标题的消息。我只是对结构和调用函数感到困惑。以下是该命令的代码: if (message.content.startsWith(prefix + 'latest')) { //website url v
scrapData
),然后运行该函数,然后将信息放入数组(标题、标题、图像长
),然后循环将生成带有标题和标题的消息。我只是对结构和调用函数感到困惑。以下是该命令的代码:
if (message.content.startsWith(prefix + 'latest')) {
//website url variables
var website_domain = "websitedomain.com/";
var website_path = args;
var website_url = website_domain + website_path;
//array for elements scrapped
var titles = [];
var captions = [];
var images_long = [];
//opening url and scrapping elements
function scrapData(website_url) {
request(website_url, function(err, resp, body) {
var $ = cheerio.load(body);
//retrieves titles
$('.title').each(function() {
var title = $(this).children('h2').children('span').text();
titles.push(title);
});
//retrieves captions
$('.post-box-excerpt').each(function() {
var caption = $(this).children('p').text();
captions.push(caption);
});
//retrieves images
$('.thumbnail').each(function() {
var image = $(this).children('img').attr('src');
images_long.push(image);
});
});
}
scrapData(website_url);
//produce embed messages
for (i = 0; i < titles.length; i++) {
const embed = new Discord.RichEmbed()
.setColor('#8E44AD')
.addField(((i + 1) + ". " + titles[i]), captions[i], true);
//set images here
message.channel.send({embed});
}
}
if(message.content.startsWith(前缀+'latest')){
//网站url变量
var网站_domain=“websitedomain.com/”;
var网站路径=args;
var website\u url=网站\u域+网站\u路径;
//废弃元素数组
var标题=[];
var标题=[];
var图像_long=[];
//打开url和废弃元素
函数scrapData(网站\ url){
请求(网站地址、功能(错误、响应、正文){
var$=总负荷(车身);
//检索标题
$('.title')。每个(函数(){
var title=$(this.children('h2').children('span').text();
标题。推送(标题);
});
//检索字幕
$('.PostBox摘录')。每个(函数(){
var caption=$(this.children('p').text();
字幕。推送(字幕);
});
//检索图像
$('.thumbnail')。每个(函数(){
var image=$(this.children('img').attr('src');
图像长推(图像);
});
});
}
剪贴数据(网站地址);
//生成嵌入消息
对于(i=0;i
对scrapData的调用必须等待请求(异步)完成,然后才能处理数据。您必须将所有代码放入原始请求的回调中,或者考虑使用承诺(承诺将支持NoDEJS 7 +中的ActhAsiC/Acess)< /P>
将require(“request”)改为require(“request-promise-native”),并执行以下操作:
function scrapData(website_url) {
return request(website_url)
.then(body => {
let items = [],
$ = cheerio.load(body);
$('.post-box').each((index, element) => {
let title = $(element).find('.title h2 span').first().text(),
caption = $(element).find('.post-box-excerpt p').first().text(),
thumbnail = $(element).find('.thumbnail img').first().attr('src');
items.push({ title, caption, thumbnail })
})
return items;
})
}
scrapData(website_url)
.then(items => {
//produce embed messages
for (let i = 0; i < items.length; i++)
{
const embed = new Discord.RichEmbed()
.setColor('#8E44AD')
.addField(((i + 1) + ". " + items[i].title), items[i].caption, true);
//set images here
message.channel.send({ embed });
}
})
功能碎片数据(网站\u url){
退货申请(网站地址)
。然后(body=>{
设items=[],
$=cheerio.load(车身);
$('.post box')。每个((索引,元素)=>{
让title=$(元素).find('.title h2 span').first().text(),
caption=$(元素).find('.post-box摘录p').first().text(),
缩略图=$(元素).find('.thumbnail img').first().attr('src');
items.push({标题,标题,缩略图})
})
退货项目;
})
}
scrapData(网站地址)
。然后(项目=>{
//生成嵌入消息
for(设i=0;i
我不喜欢你刮标题、标题和缩略图的方式,因为索引可能不同步。假设第二个索引缺少一个标题,则标题为['title 1'、'title 2'、'title 3']和类似于:['caption 1'、'caption 3']的标题。请确保删除父块的标题和标题。我不知道你是如何使用cheerio的,但我在这个例子中尽力做到最好
注意,一件重要的事情,$('')。每个(函数(){$(此)})
与$('')不同。每个(()=>{$(此)})
,因为这在不同的范围内。谷歌范围和箭头功能。您可以将my arrow函数更改为普通函数,或者使用每个函数的参数来解决此问题,例如$('')。每个((索引,元素)=>{$(元素)})
您对scrapData的调用必须等待请求完成(即异步),然后才能处理数据。您必须将所有代码放入原始请求的回调中,或者考虑使用承诺(承诺将支持NoDEJS 7 +中的ActhAsiC/Acess)< /P>
将require(“request”)改为require(“request-promise-native”),并执行以下操作:
function scrapData(website_url) {
return request(website_url)
.then(body => {
let items = [],
$ = cheerio.load(body);
$('.post-box').each((index, element) => {
let title = $(element).find('.title h2 span').first().text(),
caption = $(element).find('.post-box-excerpt p').first().text(),
thumbnail = $(element).find('.thumbnail img').first().attr('src');
items.push({ title, caption, thumbnail })
})
return items;
})
}
scrapData(website_url)
.then(items => {
//produce embed messages
for (let i = 0; i < items.length; i++)
{
const embed = new Discord.RichEmbed()
.setColor('#8E44AD')
.addField(((i + 1) + ". " + items[i].title), items[i].caption, true);
//set images here
message.channel.send({ embed });
}
})
功能碎片数据(网站\u url){
退货申请(网站地址)
。然后(body=>{
设items=[],
$=cheerio.load(车身);
$('.post box')。每个((索引,元素)=>{
让title=$(元素).find('.title h2 span').first().text(),
caption=$(元素).find('.post-box摘录p').first().text(),
缩略图=$(元素).find('.thumbnail img').first().attr('src');
items.push({标题,标题,缩略图})
})
退货项目;
})
}
scrapData(网站地址)
。然后(项目=>{
//生成嵌入消息
for(设i=0;i
我不喜欢你刮标题、标题和缩略图的方式,因为索引可能不同步。假设第二个索引缺少一个标题,则标题为['title 1','title 2','title