5.5: vine support and bug fixes

- added support for vine archives
- fixed ability to download muted videos from tumblr
- removed extra instagram id testing which i left by mistake
This commit is contained in:
wukko 2023-04-29 22:26:49 +06:00
parent 6e097de2db
commit a25615982c
8 changed files with 64 additions and 4 deletions

View file

@ -1,7 +1,7 @@
{ {
"name": "cobalt", "name": "cobalt",
"description": "save what you love", "description": "save what you love",
"version": "5.4.7", "version": "5.5",
"author": "wukko", "author": "wukko",
"exports": "./src/cobalt.js", "exports": "./src/cobalt.js",
"type": "module", "type": "module",

View file

@ -16,6 +16,7 @@ import tumblr from "./services/tumblr.js";
import vimeo from "./services/vimeo.js"; import vimeo from "./services/vimeo.js";
import soundcloud from "./services/soundcloud.js"; import soundcloud from "./services/soundcloud.js";
import instagram from "./services/instagram.js"; import instagram from "./services/instagram.js";
import vine from "./services/vine.js";
export default async function (host, patternMatch, url, lang, obj) { export default async function (host, patternMatch, url, lang, obj) {
try { try {
@ -104,7 +105,10 @@ export default async function (host, patternMatch, url, lang, obj) {
}); });
break; break;
case "instagram": case "instagram":
r = await instagram({ id: patternMatch["id"] ? patternMatch["id"] : false }); r = await instagram({ id: patternMatch["id"] });
break;
case "vine":
r = await vine({ id: patternMatch["id"] });
break; break;
default: default:
return apiJSON(0, { t: errorUnsupported(lang) }); return apiJSON(0, { t: errorUnsupported(lang) });

View file

@ -52,6 +52,7 @@ export default function(r, host, ip, audioFormat, isAudioOnly, lang, isAudioMute
params = { type: "bridge" }; params = { type: "bridge" };
break; break;
case "vine":
case "instagram": case "instagram":
case "tumblr": case "tumblr":
case "twitter": case "twitter":

View file

@ -10,5 +10,5 @@ export default async function(obj) {
if (!html) return { error: 'ErrorCouldntFetch' }; if (!html) return { error: 'ErrorCouldntFetch' };
if (!html.includes('property="og:video" content="https://va.media.tumblr.com/')) return { error: 'ErrorEmptyDownload' }; if (!html.includes('property="og:video" content="https://va.media.tumblr.com/')) return { error: 'ErrorEmptyDownload' };
return { urls: `https://va.media.tumblr.com/${html.split('property="og:video" content="https://va.media.tumblr.com/')[1].split('"')[0]}`, audioFilename: `tumblr_${obj.id}_audio` } return { urls: `https://va.media.tumblr.com/${html.split('property="og:video" content="https://va.media.tumblr.com/')[1].split('"')[0]}`, filename: `tumblr_${obj.id}.mp4`, audioFilename: `tumblr_${obj.id}_audio` }
} }

View file

@ -0,0 +1,8 @@
export default async function(obj) {
let post = await fetch(`https://archive.vine.co/posts/${obj.id}.json`).then((r) => { return r.json() }).catch(() => { return false });
if (!post) return { error: 'ErrorEmptyDownload' };
if (post.videoUrl) return { urls: post.videoUrl.replace("http://", "https://"), filename: `vine_${obj.id}.mp4`, audioFilename: `vine_${obj.id}_audio` };
return { error: 'ErrorEmptyDownload' }
}

View file

@ -56,6 +56,12 @@
"alias": "instagram reels & video posts", "alias": "instagram reels & video posts",
"patterns": ["reels/:id", "reel/:id", "p/:id"], "patterns": ["reels/:id", "reel/:id", "p/:id"],
"enabled": true "enabled": true
},
"vine": {
"alias": "vine archive",
"tld": "co",
"patterns": ["v/:id"],
"enabled": true
} }
} }
} }

View file

@ -26,5 +26,7 @@ export const testers = {
"soundcloud": (patternMatch) => ((patternMatch["author"] && patternMatch["song"] "soundcloud": (patternMatch) => ((patternMatch["author"] && patternMatch["song"]
&& (patternMatch["author"].length + patternMatch["song"].length) <= 96) || (patternMatch["shortLink"] && patternMatch["shortLink"].length <= 32)), && (patternMatch["author"].length + patternMatch["song"].length) <= 96) || (patternMatch["shortLink"] && patternMatch["shortLink"].length <= 32)),
"instagram": (patternMatch) => (patternMatch["id"] && patternMatch["id"].length <= 12) "instagram": (patternMatch) => (patternMatch["id"] && patternMatch["id"].length <= 12),
"vine": (patternMatch) => (patternMatch["id"] && patternMatch["id"].length <= 12)
} }

View file

@ -814,6 +814,16 @@
"code": 200, "code": 200,
"status": "stream" "status": "stream"
} }
}, {
"name": "reel (isAudioMuted)",
"url": "https://www.instagram.com/reel/CoEBV3eM4QR/",
"params": {
"isAudioMuted": true
},
"expected": {
"code": 200,
"status": "stream"
}
}, { }, {
"name": "inexistent reel", "name": "inexistent reel",
"url": "https://www.instagram.com/reel/XXXXXXXXXX/", "url": "https://www.instagram.com/reel/XXXXXXXXXX/",
@ -830,5 +840,34 @@
"code": 400, "code": 400,
"status": "error" "status": "error"
} }
}],
"vine": [{
"name": "regular vine link (9+10=21)",
"url": "https://vine.co/v/huwVJIEJW50",
"params": {},
"expected": {
"code": 200,
"status": "redirect"
}
}, {
"name": "regular vine link (isAudioOnly)",
"url": "https://vine.co/v/huwVJIEJW50",
"params": {
"isAudioOnly": true
},
"expected": {
"code": 200,
"status": "stream"
}
}, {
"name": "regular vine link (isAudioMuted)",
"url": "https://vine.co/v/huwVJIEJW50",
"params": {
"isAudioMuted": true
},
"expected": {
"code": 200,
"status": "stream"
}
}] }]
} }