JavaScript (node.js) Как получить URL случайного изображения из subreddit? - PullRequest
0 голосов
/ 05 октября 2018

По сути, я пытаюсь получить URL-адрес случайного изображения из определенного поддредита.Я пытался использовать сырой JSON здесь , но я не могу понять это.Я использовал snekfetch для получения JSON, так как раньше он работал на менее сложных сайтах , но я видел другие методы, такие как superagent и snoowrap, которые я не знаю, как их правильно использовать.Вот что я пробовал использовать snekfetch (я пытаюсь включить это в диск-бот):

case "pic":
    if (!args[1]) return message.channel.send("Enter a title (Be VERY specific");
    // pics was set equal to "https://www.reddit.com/r/pics.json" earlier
    snekfetch.get(pics).then(r => {
        let postTitle = args[1];
        let img = r.preview.images[0].source.url;
        let entry = r.find(post => post.title == postTitle);
        let picture = new Discord.RichEmbed()
            .setAuthor(entry.title)
            .addField(entry)
            .setImage(img);
        message.channel.send(picture);
        //message.channel.send(entry.preview.images[0].source.url);
    });
    break;

Я новичок в JSON, поэтому меня не удивит, если этот код заполненужасных ошибок.

Посредством некоторого поиска в Google мне удалось обнаружить, что, очевидно, у каждого поста Reddit есть идентификатор в базе 36. Но на самом деле эти идентификаторы не в порядке, поэтому мне нужно было бы сохранить их все вмассив и случайным образом выбрать из этого.

Короче говоря, как мне извлечь изображение из reddit в качестве URL-адреса и как поместить определенное количество этих изображений в массив?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Вы можете легко сделать это с помощью пакета random-puppy, который может быть установлен с помощью NPM.

https://www.npmjs.com/package/random-puppy

Он имеет встроенный сборщик subreddit и рандомизатор.

0 голосов
/ 05 октября 2018

Используя предоставленные данные JSON, вы можете получить все изображения, используя что-то вроде этого:

async function getImages(url) {
    const images = [];
    const response = await snekfetch.get(url);
    response.body.data.children.forEach((child) => {
        child.data.preview.images.forEach((image) => {
            images.push(image.source.url);
        });
    });
    return images;
}

Если вам нужно собрать только N изображений, то вы можете использовать стандартный цикл forчто ломается, когда N === images.length.

...