random-bunny/index.js

55 lines
1.7 KiB
JavaScript
Raw Normal View History

2021-01-29 18:26:48 +00:00
// Required Modules
2020-12-20 19:39:03 +00:00
const fetch = require('node-fetch');
2016-04-27 20:06:24 +01:00
2021-01-29 18:26:48 +00:00
// Valid sortBy names
2021-01-13 21:08:47 +00:00
const sortable = [
2020-12-20 19:39:03 +00:00
'new',
'hot',
'top'
]
2016-04-27 20:06:24 +01:00
2021-01-29 18:26:48 +00:00
// Main function
2020-12-20 19:39:03 +00:00
function randomBunny(subreddit, sortBy, cb) {
2021-01-29 18:26:48 +00:00
// If the sortable list doesn't include sortBy, default to 'hot'
2020-12-20 19:39:03 +00:00
if (!sortable.includes(sortBy)) sortBy = 'hot';
2016-04-27 20:06:24 +01:00
2021-01-29 18:26:48 +00:00
// Fetch the json from reddit
// For example, if you're getting a random image from r/rabbits, sorted by new:
// https://www.reddit.com/r/rabbits/new.json
2020-12-20 19:39:03 +00:00
fetch(`https://www.reddit.com/r/${subreddit}/${sortBy}.json`).then(res => {
res.json().then(res => {
2021-01-29 18:26:48 +00:00
// Get the part of the json string which the data comes from
2020-12-20 19:39:03 +00:00
const data = res.data.children;
const size = data.length;
2016-04-27 20:06:24 +01:00
2021-01-29 18:26:48 +00:00
// Found is used for the while loop in order to break out of the loop.
// We need to loop as the json string will contain invalid data for what we need
// Specifically videos.
2020-12-20 19:39:03 +00:00
let found = false;
2016-04-27 20:06:24 +01:00
2021-01-29 18:26:48 +00:00
// Loop until a valid image post is found
2020-12-20 19:39:03 +00:00
while (!found) {
2021-01-29 18:26:48 +00:00
// Generate random number
2020-12-20 19:39:03 +00:00
const random = getRandom(0, size - 1);
2016-04-27 20:06:24 +01:00
2021-01-29 18:26:48 +00:00
// Get variables from json to pass back
2020-12-20 19:39:03 +00:00
const image = data[random].data['url'];
const title = data[random].data['title'];
2016-04-28 16:31:41 +01:00
2021-01-29 18:26:48 +00:00
// If the post is a .jpg, send back the data and stop looping
2020-12-20 19:39:03 +00:00
if (image.includes('.jpg')) {
found = true;
cb(image, title);
}
2016-04-29 03:23:21 +01:00
}
});
2020-12-20 19:39:03 +00:00
});
2016-04-29 03:23:21 +01:00
}
2021-01-29 18:26:48 +00:00
// Generate a random number
2020-12-20 19:39:03 +00:00
function getRandom(min, max) {
return Math.floor((Math.random() * max) + min);
2016-04-28 16:31:41 +01:00
}
2021-01-29 18:26:48 +00:00
// Export Functions
module.exports = randomBunny;