Merge branch 'master' into develop
This commit is contained in:
commit
5d0af43b6f
6 changed files with 253 additions and 3 deletions
19
src/imageHelper.ts
Normal file
19
src/imageHelper.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
import fetch from "got-cjs";
|
||||
import * as htmlparser from "htmlparser2";
|
||||
|
||||
export default class ImageHelper {
|
||||
public static async FetchImageFromRedditGallery(url: string): Promise<string | undefined> {
|
||||
const fetched = await fetch(url);
|
||||
|
||||
if (!fetched || fetched.errored || fetched.statusCode != 200) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const dom = htmlparser.parseDocument(fetched.body);
|
||||
const img = htmlparser.DomUtils.findOne((x => x.tagName == "img" && x.attributes.find(y => y.value.includes("https://preview.redd.it")) != null), dom.children, true);
|
||||
|
||||
const imgSrc = img?.attributes.find(x => x.name == "src")?.value;
|
||||
|
||||
return imgSrc;
|
||||
}
|
||||
}
|
29
src/index.ts
29
src/index.ts
|
@ -5,6 +5,7 @@ import { List } from 'linqts';
|
|||
import IFetchResult from "./contracts/IFetchResult";
|
||||
import { ErrorCode } from "./constants/ErrorCode";
|
||||
import ErrorMessages from "./constants/ErrorMessages";
|
||||
import ImageHelper from "./imageHelper";
|
||||
|
||||
const sortable = [
|
||||
'new',
|
||||
|
@ -56,7 +57,7 @@ export default async function randomBunny(subreddit: string, sortBy: string = 'h
|
|||
const data: IFetchResult[] = json.data.children;
|
||||
|
||||
const dataWithImages = new List<IFetchResult>(data)
|
||||
.Where(x => x!.data.url.includes('.jpg') || x!.data.url.includes('.png'))
|
||||
.Where(x => x!.data.url.includes('.jpg') || x!.data.url.includes('.png') || x!.data.url.includes("/gallery/"))
|
||||
.ToArray();
|
||||
|
||||
let random = 0;
|
||||
|
@ -81,6 +82,30 @@ export default async function randomBunny(subreddit: string, sortBy: string = 'h
|
|||
|
||||
const randomData = randomSelect.data;
|
||||
|
||||
let url: string;
|
||||
|
||||
if (randomData.url.includes("/gallery")) {
|
||||
const galleryImage = await ImageHelper.FetchImageFromRedditGallery(randomData.url);
|
||||
|
||||
if (!galleryImage) {
|
||||
return {
|
||||
IsSuccess: false,
|
||||
Query: {
|
||||
subreddit: subreddit,
|
||||
sortBy: sortBy,
|
||||
},
|
||||
Error: {
|
||||
Code: ErrorCode.NoImageResultsFound,
|
||||
Message: ErrorMessages.NoImageResultsFound,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
url = galleryImage;
|
||||
} else {
|
||||
url = randomData.url;
|
||||
}
|
||||
|
||||
const redditResult: IRedditResult = {
|
||||
Archived: randomData['archived'],
|
||||
Downs: randomData['downs'],
|
||||
|
@ -90,7 +115,7 @@ export default async function randomBunny(subreddit: string, sortBy: string = 'h
|
|||
SubredditSubscribers: randomData['subreddit_subscribers'],
|
||||
Title: randomData['title'],
|
||||
Ups: randomData['ups'],
|
||||
Url: randomData['url']
|
||||
Url: url,
|
||||
};
|
||||
|
||||
return {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue