Последняя активность 1741105149

Takes the outbox.json Pixelfed export data and downloads the files and creates markdown files. Great for use with something like 11ty or Astro.

melanie ревизий этого фрагмента 1741105148. К ревизии

Без изменений

melanie ревизий этого фрагмента 1737924693. К ревизии

2 files changed, 82 insertions

index.js(файл создан)

@@ -0,0 +1,64 @@
1 + import { stringify } from "yaml";
2 + import fs from "node:fs";
3 + import https from "node:https";
4 + import sanitize from "sanitize-html";
5 +
6 + function omit(obj, props) {
7 + obj = { ...obj };
8 + props.forEach((prop) => delete obj[prop]);
9 + return obj;
10 + }
11 +
12 + function readJsonFile(file = "./outbox.json") {
13 + const data = fs.readFileSync(file);
14 + return JSON.parse(data);
15 + }
16 +
17 + function processOutbox(outbox) {
18 + return outbox.map((item) => {
19 + const body = sanitize(item.content, {
20 + allowedTags: [],
21 + allowedAttributes: {},
22 + });
23 + return {
24 + id: item.id.split("/").at(-1),
25 + date: item.published,
26 + body,
27 + tags: body.match(/(?<=\#)\w*/g),
28 + attachments: item.attachment.map((el) => ({
29 + altText: el.summary,
30 + type: el.mediaType,
31 + url: el.url,
32 + })),
33 + };
34 + });
35 + }
36 +
37 + function writeFiles(data, outputDir = "./out") {
38 + if (!fs.existsSync(outputDir)) {
39 + fs.mkdirSync(outputDir);
40 + }
41 +
42 + for (const item of data) {
43 + const id = item.id;
44 + item.attachments = item.attachments.map((attachment, idx) => {
45 + const extension = attachment.url.split(".").at(-1);
46 + const fileName = `${id}${idx > 0 ? `-${idx}` : ""}.${extension}`;
47 + const fileStream = fs.createWriteStream(`${outputDir}/${fileName}`);
48 + https.get(attachment.url, (res) => res.pipe(fileStream));
49 + attachment.url = `./${fileName}`;
50 + return attachment;
51 + });
52 + const yaml = stringify(omit(item, ["id"]));
53 + const file = `---\n${yaml}---\n\n${item.body}\n`;
54 + fs.writeFileSync(`${outputDir}/${id}.md`, file);
55 + }
56 + }
57 +
58 + function main() {
59 + const outbox = readJsonFile();
60 + const processedOutbox = processOutbox(outbox);
61 + writeFiles(processedOutbox);
62 + }
63 +
64 + main();

package.json(файл создан)

@@ -0,0 +1,18 @@
1 + {
2 + "name": "pixelfed-export-downloader",
3 + "version": "1.0.0",
4 + "main": "index.js",
5 + "scripts": {
6 + "start": "node index.js",
7 + "test": "echo \"Error: no test specified\" && exit 1"
8 + },
9 + "keywords": ["pixelfed"],
10 + "author": "melanie kat",
11 + "license": "ISC",
12 + "type": "module",
13 + "description": "",
14 + "dependencies": {
15 + "sanitize-html": "^2.14.0",
16 + "yaml": "^2.7.0"
17 + }
18 + }
Новее Позже