rsshub
Version:
Make RSS Great Again!
91 lines (89 loc) • 3.03 kB
JavaScript
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs";
import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import { t as art } from "./render-BQo6B4tL.mjs";
import path from "node:path";
//#region lib/routes/twreporter/fetch-article.ts
init_esm_shims();
async function fetch(slug) {
const post = (await ofetch_default(`https://go-api.twreporter.org/v2/posts/${slug}?full=true`)).data;
const time = post.published_date;
let authors = "";
if (post.writers) authors = post.writers.map((writer) => writer.job_title ? writer.job_title + " / " + writer.name : "文字 / " + writer.name).join(",");
let photographers = "";
if (post.photographers) {
photographers = post.photographers.map((photographer) => {
let title = "攝影 / ";
if (photographer.job_title) title = photographer.job_title + " / ";
return title + photographer.name;
}).join(",");
authors += ";" + photographers;
}
const imageSource = post.hero_image ?? post.og_image;
const bannerImage = imageSource?.resized_targets.desktop.url;
const caption = post.leading_image_description;
const bannerDescription = imageSource?.description ?? "";
const ogDescription = post.og_description;
const banner = imageSource ? art(path.join(__dirname, "templates/image-51014ea7.art"), {
image: bannerImage,
description: bannerDescription,
caption
}) : "";
function format(type, content) {
let block = "";
if (content !== "" && type !== "embeddedcode") switch (type) {
case "image":
case "slideshow":
block = content.map((image) => art(path.join(__dirname, "templates/image-51014ea7.art"), {
image: image.desktop.url,
description: image.description,
caption: image.description
})).join("<br>");
break;
case "blockquote":
block = `<blockquote>${content}</blockquote>`;
break;
case "header-one":
block = `<h1>${content}</h1>`;
break;
case "header-two":
block = `<h2>${content}</h2>`;
break;
case "infobox": {
const box = content[0];
block = `<h2>${box.title}</h2>${box.body}`;
break;
}
case "youtube": {
const id = content[0].youtubeId.split("?")[0];
block = art(path.join(__dirname, "templates/youtube-29c80cf5.art"), { video: id });
break;
}
case "quoteby": {
const quote = content[0];
block = `<blockquote>${quote.quote}</blockquote><p>${quote.quoteBy}</p>`;
break;
}
default: block = `${content}<br>`;
}
return block;
}
const contents = [
banner,
ogDescription,
post.content.api_data.map((item) => {
const content = item.content;
const type = item.type;
return format(type, content);
}).filter(Boolean).join("<br>")
].filter(Boolean).join("<br><br>");
return {
author: authors,
description: contents,
link: `https://www.twreporter.org/a/${slug}`,
guid: `https://www.twreporter.org/a/${slug}`,
pubDate: parseDate(time, "YYYY-MM-DDTHH:mm:ssZ")
};
}
//#endregion
export { fetch as t };