Spaces:
Running
Running
import psl from "psl"; | |
const API_KEY = 'jrsCWX1XDuVxAFO4GkK147syAoN8BJZ5voz8tS80bPcj26Vc5Z'; | |
const API_BASE = 'https://api-http2.tumblr.com'; | |
function request(domain, id) { | |
const url = new URL(`/v2/blog/${domain}/posts/${id}/permalink`, API_BASE); | |
url.searchParams.set('api_key', API_KEY); | |
url.searchParams.set('fields[blogs]', 'uuid,name,avatar,?description,?can_message,?can_be_followed,?is_adult,?reply_conditions,' | |
+ '?theme,?title,?url,?is_blocked_from_primary,?placement_id,?primary,?updated,?followed,' | |
+ '?ask,?can_subscribe,?paywall_access,?subscription_plan,?is_blogless_advertiser,?tumblrmart_accessories'); | |
return fetch(url, { | |
headers: { | |
'User-Agent': 'Tumblr/iPhone/33.3/333010/17.3.1/tumblr', | |
'X-Version': 'iPhone/33.3/333010/17.3.1/tumblr' | |
} | |
}).then(a => a.json()).catch(() => {}); | |
} | |
export default async function(input) { | |
let { subdomain } = psl.parse(input.url.hostname); | |
if (subdomain?.includes('.')) { | |
return { error: "link.unsupported" }; | |
} else if (subdomain === 'www' || subdomain === 'at') { | |
subdomain = undefined | |
} | |
const domain = `${subdomain ?? input.user}.tumblr.com`; | |
const data = await request(domain, input.id); | |
const element = data?.response?.timeline?.elements?.[0]; | |
if (!element) return { error: "fetch.empty" }; | |
const contents = [ | |
...element.content, | |
...element?.trail?.map(t => t.content).flat() | |
] | |
const audio = contents.find(c => c.type === 'audio'); | |
if (audio && audio.provider === 'tumblr') { | |
const fileMetadata = { | |
title: audio?.title, | |
artist: audio?.artist | |
}; | |
return { | |
urls: audio.media.url, | |
filenameAttributes: { | |
service: 'tumblr', | |
id: input.id, | |
title: fileMetadata.title, | |
author: fileMetadata.artist | |
}, | |
isAudioOnly: true, | |
bestAudio: "mp3", | |
} | |
} | |
const video = contents.find(c => c.type === 'video'); | |
if (video && video.provider === 'tumblr') { | |
return { | |
urls: video.media.url, | |
filename: `tumblr_${input.id}.mp4`, | |
audioFilename: `tumblr_${input.id}_audio` | |
} | |
} | |
return { error: "link.unsupported" } | |
} | |