Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS-调用函数和结构_Javascript_Node.js_Web Scraping_Discord - Fatal编程技术网

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

我对Javascript和NodeJs还很陌生,我只是想知道如何构造它,这样它就可以生成以下结构的消息:标题和标题。所以我要做的是初始化变量,然后编写一个函数从网站中删除数据(
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