JavaScript(node.js)如何从subreddit获取随机图像的URL?

时间:2018-10-05 17:47:17

标签: javascript node.js discord.js reddit

基本上,我正在尝试从特定的subreddit获取随机图片的URL。我尝试使用原始JSON here,但是我不太清楚。自从它在less complicated sites上就可以使用以来,我一直在使用snekfetch来获取JSON,但是我看到过诸如superagent和snoowrap之类的其他方法,我不知道如何正确使用。这是我使用snekfetch尝试过的方法(我正在尝试将其合并到不和谐的bot中):

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的新手,所以如果这段代码中充满了可怕的错误,这也不会令我感到惊讶。

通过谷歌搜索,我设法发现每个reddit帖子显然都有一个以36为底的ID。但是这些ID实际上并不是按顺序排列的,因此我需要将它们全部存储在一个数组中并从中随机选择

简而言之,如何从reddit中检索图像作为URL,以及如何将一定数量的这些图像放入数组中?

2 个答案:

答案 0 :(得分:0)

使用提供的JSON数据,您可以使用类似以下内容的图片:

namespace App\Observers;

use App\Client;

class ClientObserver
{

    public function created(Client $client)
    {
        // do your after-model-creation logic here
    }
    ...
}

如果您只需要收集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; } 个图像,则可能要使用一个标准的for循环,该循环在N时会中断。

答案 1 :(得分:0)

您可以使用可以与NPM一起安装的random-puppy软件包轻松完成此操作。

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

它具有内置的subreddit提取程序和随机数发生器。