diff --git a/app.ts b/app.ts index 5099496..3d66d96 100644 --- a/app.ts +++ b/app.ts @@ -1,7 +1,7 @@ -import randomBunny from "./dist"; +import randomBunny from "./src"; async function app() { - const result = await randomBunny('rabbits', 'hot'); + const result = await randomBunny('rabbits', 'hot', 100); console.log(result); } diff --git a/package.json b/package.json index d1e699f..ba0912b 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "name": "random-bunny", - "version": "2.0.5", + "version": "2.0.3", "description": "Get a random subreddit image url", "license": "MIT", "author": "Vylpes", - "main": "./dist/index.js", - "typings": "./dist/index.d.ts", + "main": "./dist/index", + "typings": "./dist", "keywords": [ "rabbit", "bunny", @@ -37,8 +37,5 @@ "eslint": "^7.17.0", "ts-node": "^10.4.0", "typescript": "^4.5.2" - }, - "files": [ - "dist" - ] + } } diff --git a/readme.md b/readme.md index 4403cd6..d129cf3 100644 --- a/readme.md +++ b/readme.md @@ -21,7 +21,7 @@ yarn add random-bunny import randomBunny from "random-bunny"; // ... In an async function -const result = await randomBunny('rabbits', 'hot'); +const result = await randomBunny('rabbits', 'hot', 100); console.log(result); ``` @@ -29,7 +29,7 @@ console.log(result); ### `randomBunny()` -Returns a `json string` for a random post. Accepts 2 arguments: `subreddit`, and `sortby` ('new', 'hot', 'top') +Returns a `json string` for a random post. Accepts 3 arguments: `subreddit`, `sortby` ('new', 'hot', 'top'), `maxTries?` (default 100) The json string which gets returned consists of: - archived @@ -44,6 +44,8 @@ The json string which gets returned consists of: `sortBy` will default to 'hot' if not given or invalid +`maxTries` prevents the script from rerolling too many times. The script rerolls the randomiser if the post its given doesn't contain an image. Default 100. + ## Notes * Node 4 or newer. diff --git a/src/index.ts b/src/index.ts index 6af1875..f9c6c6a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,7 +10,7 @@ const sortable = [ 'top' ]; -export default async function randomBunny(subreddit: string, sortBy?: string): Promise { +export default async function randomBunny(subreddit: string, sortBy?: string, maxTries = 100): Promise { if (!sortBy || !sortable.includes(sortBy)) sortBy = 'hot'; const result = await fetch(`https://reddit.com/r/${subreddit}/${sortBy}.json`); @@ -30,37 +30,39 @@ export default async function randomBunny(subreddit: string, sortBy?: string): P } const data: IFetchResult[] = json.data.children; - + const dataWithImages = new List(data) .Where(x => x!.data.url.includes('.jpg') || x!.data.url.includes('.png')) .ToArray(); - const random = Math.floor((Math.random() * dataWithImages.length - 1) + 0); // Between 0 and (size - 1) + for (let i = 0; i < maxTries; i++) { + const random = Math.floor((Math.random() * dataWithImages.length - 1) + 0); // Between 0 and (size - 1) - const randomSelect = dataWithImages[random]; + const randomSelect = dataWithImages[random]; - if (!randomSelect) { - return { - IsSuccess: false, + if (!randomSelect) continue; + + const randomData = randomSelect.data; + + const redditResult: IRedditResult = { + Archived: randomData['archived'], + Downs: randomData['downs'], + Hidden: randomData['hidden'], + Permalink: randomData['permalink'], + Subreddit: randomData['subreddit'], + SubredditSubscribers: randomData['subreddit_subscribers'], + Title: randomData['title'], + Ups: randomData['ups'], + Url: randomData['url'] }; - }; - const randomData = randomSelect.data; - - const redditResult: IRedditResult = { - Archived: randomData['archived'], - Downs: randomData['downs'], - Hidden: randomData['hidden'], - Permalink: randomData['permalink'], - Subreddit: randomData['subreddit'], - SubredditSubscribers: randomData['subreddit_subscribers'], - Title: randomData['title'], - Ups: randomData['ups'], - Url: randomData['url'] - }; + return { + IsSuccess: true, + Result: redditResult + }; + } return { - IsSuccess: true, - Result: redditResult - }; + IsSuccess: false + } } \ No newline at end of file