基本上,我正在尝试从特定的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,以及如何将一定数量的这些图像放入数组中?
答案 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提取程序和随机数发生器。