mirror of
https://github.com/imputnet/cobalt.git
synced 2025-07-14 01:08:27 +00:00
api/reddit: extract params from a mobile share link
This commit is contained in:
parent
5306760890
commit
ec21cc4480
@ -120,9 +120,8 @@ export default async function({ host, patternMatch, params }) {
|
|||||||
|
|
||||||
case "reddit":
|
case "reddit":
|
||||||
r = await reddit({
|
r = await reddit({
|
||||||
sub: patternMatch.sub,
|
...patternMatch,
|
||||||
id: patternMatch.id,
|
dispatcher,
|
||||||
user: patternMatch.user
|
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -66,7 +66,8 @@ export const services = {
|
|||||||
reddit: {
|
reddit: {
|
||||||
patterns: [
|
patterns: [
|
||||||
"r/:sub/comments/:id/:title",
|
"r/:sub/comments/:id/:title",
|
||||||
"user/:user/comments/:id/:title"
|
"user/:user/comments/:id/:title",
|
||||||
|
"r/:sub/s/:shareId"
|
||||||
],
|
],
|
||||||
subdomains: "*",
|
subdomains: "*",
|
||||||
},
|
},
|
||||||
|
@ -21,7 +21,8 @@ export const testers = {
|
|||||||
|
|
||||||
"reddit": pattern =>
|
"reddit": pattern =>
|
||||||
(pattern.sub?.length <= 22 && pattern.id?.length <= 10)
|
(pattern.sub?.length <= 22 && pattern.id?.length <= 10)
|
||||||
|| (pattern.user?.length <= 22 && pattern.id?.length <= 10),
|
|| (pattern.user?.length <= 22 && pattern.id?.length <= 10)
|
||||||
|
|| (pattern.sub?.length <= 22 && pattern.shareId?.length <= 12),
|
||||||
|
|
||||||
"rutube": pattern =>
|
"rutube": pattern =>
|
||||||
(pattern.id?.length === 32 && pattern.key?.length <= 32) ||
|
(pattern.id?.length === 32 && pattern.key?.length <= 32) ||
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { resolveRedirectingURL } from "../url.js";
|
||||||
import { genericUserAgent, env } from "../../config.js";
|
import { genericUserAgent, env } from "../../config.js";
|
||||||
import { getCookie, updateCookieValues } from "../cookie/manager.js";
|
import { getCookie, updateCookieValues } from "../cookie/manager.js";
|
||||||
|
|
||||||
@ -48,12 +49,22 @@ async function getAccessToken() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default async function(obj) {
|
export default async function(obj) {
|
||||||
let url = new URL(`https://www.reddit.com/r/${obj.sub}/comments/${obj.id}.json`);
|
let params = obj;
|
||||||
|
|
||||||
if (obj.user) {
|
if (!params.id && params.shareId) {
|
||||||
url.pathname = `/user/${obj.user}/comments/${obj.id}.json`;
|
params = await resolveRedirectingURL(
|
||||||
|
`https://www.reddit.com/r/${params.sub}/s/${params.shareId}`,
|
||||||
|
obj.dispatcher,
|
||||||
|
genericUserAgent
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 accessToken = await getAccessToken();
|
const accessToken = await getAccessToken();
|
||||||
if (accessToken) url.hostname = 'oauth.reddit.com';
|
if (accessToken) url.hostname = 'oauth.reddit.com';
|
||||||
|
|
||||||
@ -73,7 +84,7 @@ export default async function(obj) {
|
|||||||
|
|
||||||
data = data[0]?.data?.children[0]?.data;
|
data = data[0]?.data?.children[0]?.data;
|
||||||
|
|
||||||
const id = `${String(obj.sub).toLowerCase()}_${obj.id}`;
|
const id = `${String(params.sub).toLowerCase()}_${params.id}`;
|
||||||
|
|
||||||
if (data?.url?.endsWith('.gif')) return {
|
if (data?.url?.endsWith('.gif')) return {
|
||||||
typeId: "redirect",
|
typeId: "redirect",
|
||||||
@ -87,8 +98,9 @@ export default async function(obj) {
|
|||||||
if (data.secure_media?.reddit_video?.duration > env.durationLimit)
|
if (data.secure_media?.reddit_video?.duration > env.durationLimit)
|
||||||
return { error: "content.too_long" };
|
return { error: "content.too_long" };
|
||||||
|
|
||||||
|
const video = data.secure_media?.reddit_video?.fallback_url?.split('?')[0];
|
||||||
|
|
||||||
let audio = false,
|
let audio = false,
|
||||||
video = data.secure_media?.reddit_video?.fallback_url?.split('?')[0],
|
|
||||||
audioFileLink = `${data.secure_media?.reddit_video?.fallback_url?.split('DASH')[0]}audio`;
|
audioFileLink = `${data.secure_media?.reddit_video?.fallback_url?.split('DASH')[0]}audio`;
|
||||||
|
|
||||||
if (video.match('.mp4')) {
|
if (video.match('.mp4')) {
|
||||||
|
Loading…
Reference in New Issue
Block a user