api/reddit: add support for a bunch of links & update the api endpoint

also fixed "undefined" in a filename when downloading a user post
This commit is contained in:
wukko 2025-02-09 23:34:30 +06:00
parent ec21cc4480
commit ed8e234e3b
No known key found for this signature in database
GPG Key ID: 3E30B3F26C7B4AA2
3 changed files with 26 additions and 10 deletions

View File

@ -65,8 +65,20 @@ export const services = {
},
reddit: {
patterns: [
"comments/:id",
"r/:sub/comments/:id",
"r/:sub/comments/:id/:title",
"r/:sub/comments/:id/comment/:commentId",
"user/:user/comments/:id",
"user/:user/comments/:id/:title",
"user/:user/comments/:id/comment/:commentId",
"r/u_:user/comments/:id",
"r/u_:user/comments/:id/:title",
"r/u_:user/comments/:id/comment/:commentId",
"r/:sub/s/:shareId"
],
subdomains: "*",

View File

@ -20,9 +20,10 @@ export const testers = {
pattern.id?.length <= 128 || pattern.shortLink?.length <= 32,
"reddit": pattern =>
(pattern.sub?.length <= 22 && pattern.id?.length <= 10)
|| (pattern.user?.length <= 22 && pattern.id?.length <= 10)
|| (pattern.sub?.length <= 22 && pattern.shareId?.length <= 12),
pattern.id?.length <= 16
|| (pattern.sub?.length <= 22 && pattern.id?.length <= 16)
|| (pattern.user?.length <= 22 && pattern.id?.length <= 16)
|| (pattern.sub?.length <= 22 && pattern.shareId?.length <= 16),
"rutube": pattern =>
(pattern.id?.length === 32 && pattern.key?.length <= 32) ||

View File

@ -61,9 +61,7 @@ export default async function(obj) {
if (!params?.id) return { error: "fetch.short_link" };
const url = new URL(
`https://www.reddit.com/r/${params.sub || params.user}/comments/${params.id}.json`
);
const url = new URL(`https://www.reddit.com/comments/${params.id}.json`);
const accessToken = await getAccessToken();
if (accessToken) url.hostname = 'oauth.reddit.com';
@ -84,12 +82,17 @@ export default async function(obj) {
data = data[0]?.data?.children[0]?.data;
const id = `${String(params.sub).toLowerCase()}_${params.id}`;
let sourceId;
if (params.sub || params.user) {
sourceId = `${String(params.sub || params.user).toLowerCase()}_${params.id}`;
} else {
sourceId = params.id;
}
if (data?.url?.endsWith('.gif')) return {
typeId: "redirect",
urls: data.url,
filename: `reddit_${id}.gif`,
filename: `reddit_${sourceId}.gif`,
}
if (!data.secure_media?.reddit_video)
@ -133,7 +136,7 @@ export default async function(obj) {
typeId: "tunnel",
type: "merge",
urls: [video, audioFileLink],
audioFilename: `reddit_${id}_audio`,
filename: `reddit_${id}.mp4`
audioFilename: `reddit_${sourceId}_audio`,
filename: `reddit_${sourceId}.mp4`
}
}