feat: add pinterest support (by Snazzah)

merge pull request #134 from Snazzah/feat/pinterest
This commit is contained in:
wukko
2023-06-05 12:50:31 +06:00
committed by GitHub
7 changed files with 85 additions and 1 deletions

View File

@ -17,6 +17,7 @@ import vimeo from "./services/vimeo.js";
import soundcloud from "./services/soundcloud.js";
import instagram from "./services/instagram.js";
import vine from "./services/vine.js";
import pinterest from "./services/pinterest.js";
export default async function (host, patternMatch, url, lang, obj) {
try {
@ -110,6 +111,9 @@ export default async function (host, patternMatch, url, lang, obj) {
case "vine":
r = await vine({ id: patternMatch["id"] });
break;
case "pinterest":
r = await pinterest({ id: patternMatch["id"] });
break;
default:
return apiJSON(0, { t: errorUnsupported(lang) });
}

View File

@ -56,6 +56,7 @@ export default function(r, host, ip, audioFormat, isAudioOnly, lang, isAudioMute
case "instagram":
case "tumblr":
case "twitter":
case "pinterest":
responseType = 1;
break;
}

View File

@ -0,0 +1,24 @@
import { maxVideoDuration } from "../../config.js";
export default async function(obj) {
const pinId = obj.id.split('--').reverse()[0];
if (!(/^\d+$/.test(pinId))) return { error: 'ErrorCantGetID' };
let data = await fetch(`https://www.pinterest.com/resource/PinResource/get?data=${encodeURIComponent(JSON.stringify({
options: {
field_set_key: "unauth_react_main_pin",
id: pinId
}
}))}`).then((r) => { return r.json() }).catch(() => { return false });
if (!data) return { error: 'ErrorCouldntFetch' };
data = data["resource_response"]["data"];
let video = null;
if (data.videos !== null) video = data.videos.video_list.V_720P;
else if (data.story_pin_data !== null) video = data.story_pin_data.pages[0].blocks[0].video.video_list.V_EXP7;
if (!video) return { error: 'ErrorEmptyDownload' };
if (video.duration > maxVideoDuration) return { error: ['ErrorLengthLimit', maxVideoDuration / 60000] };
return { urls: video.url, filename: `pinterest_${pinId}.mp4`, audioFilename: `pinterest_${pinId}_audio` }
}

View File

@ -62,6 +62,11 @@
"tld": "co",
"patterns": ["v/:id"],
"enabled": true
},
"pinterest": {
"alias": "pinterest videos & stories",
"patterns": ["pin/:id"],
"enabled": true
}
}
}

View File

@ -28,5 +28,7 @@ export const testers = {
"instagram": (patternMatch) => (patternMatch["id"] && patternMatch["id"].length <= 12),
"vine": (patternMatch) => (patternMatch["id"] && patternMatch["id"].length <= 12)
"vine": (patternMatch) => (patternMatch["id"] && patternMatch["id"].length <= 12),
"pinterest": (patternMatch) => (patternMatch["id"] && patternMatch["id"].length <= 128)
}