aboutsummaryrefslogtreecommitdiff
path: root/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'index.js')
-rw-r--r--index.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..78c3d26
--- /dev/null
+++ b/index.js
@@ -0,0 +1,68 @@
+const { exec } = require('child_process');
+const { resolve, join} = require('path');
+const { rm, writeFile } = require('fs/promises');
+const { debuglog, promisify } = require('util');
+const Pinboard = require('node-pinboard').default;
+
+const internals = {
+ exec: promisify(exec),
+ debuglog: debuglog('blog'),
+ apiToken: process.env.PINBOARD_TOKEN,
+ date: (new Date()).toISOString().split('T')[0],
+
+ generateGemtext(posts) {
+
+ const title = posts.length === 1 ? 'A link' : `${posts.length} links`;
+
+ const linkText = posts.map((pin) => {
+ return `=> ${pin.href} ${pin.description}\n${pin.extended}`;
+ }).join('\n\n');
+
+ return `# ${title} for ${internals.date}\n\n${linkText}`;
+ }
+};
+
+
+async function run() {
+ const pinboard = new Pinboard(internals.apiToken);
+ const getPins = promisify(pinboard.get);
+ const addPin = promisify(pinboard.add);
+
+ internals.debuglog('Fetching Pins');
+ const pins = await getPins({ tag: 'linkblog' });
+
+ internals.debuglog(`Found ${pins.posts.length} pins`);
+ if (pins.posts.length === 0) {
+ console.error('No links to post');
+ return;
+ }
+
+ internals.debuglog('Generating gemtext');
+ const gemtext = internals.generateGemtext(pins.posts);
+ const gemfile = resolve(join(__dirname, `linkblog-${internals.date}.gmi`));
+ internals.debuglog(`Writing to ${gemfile}`);
+ await writeFile(gemfile, gemtext);
+ internals.debuglog('Adding gemfile to log');
+ const output = await internals.exec(`blog --add ${gemfile}`);
+ internals.debuglog(output.stderr);
+ internals.debuglog(`Removing ${gemfile}`);
+ await rm(gemfile);
+
+ for (const pin of pins.posts) {
+ internals.debuglog(`Updating ${pin.href}`);
+ await addPin({
+ url: pin.href,
+ description: pin.description,
+ extended: pin.extended,
+ dt: pin.time,
+ tags: pin.tags.replace('linkblog', 'linkblog-posted')
+ });
+ }
+}
+
+run()
+ .then(() => process.exit(0))
+ .catch((err) => {
+ console.error(err);
+ process.exit(1);
+ })