Skip to content

Commit 0dfe873

Browse files
Merge pull request #251 from HaudinFlorence/add_script_to_generate_atom_feed
Add a script to generate an atom feed.
2 parents 3b60293 + a659e1d commit 0dfe873

File tree

12 files changed

+2219
-458
lines changed

12 files changed

+2219
-458
lines changed

.gitattributes

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
static/rss* linguist-generated=true
1+
static/rss* linguist-generated=true
2+
static/atom* linguist-generated=true

docusaurus.config.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,14 @@ const config: Config = {
6363
//image: 'img/docusaurus-social-card.jpg',
6464
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
6565
headTags: [
66+
6667
{
6768
tagName: 'link',
6869
attributes: {
6970
rel: 'alternate',
70-
type: 'application/rss+xml',
71-
title: 'RSS Feed',
72-
href: '/rss.xml',
71+
type: 'application/atom+xml',
72+
title: 'Atom Feed',
73+
href: '/atom.xml',
7374
},
7475
},
7576
],
@@ -147,10 +148,9 @@ const config: Config = {
147148
target: "_blank",
148149
className: "mastodon-icon",
149150
},
150-
151151
{
152-
to: "rss.xml",
153-
title: "RSS",
152+
to: "atom.xml",
153+
title: "Atom",
154154
position: "right",
155155
target: "_blank",
156156
className: "rss-circle-icon",

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
},
1010
"scripts": {
1111
"docusaurus": "docusaurus",
12-
"prestart": "node scripts/resize-images.js && node scripts/generate-rss-feed.js",
13-
"prebuild": "node scripts/resize-images.js && node scripts/generate-rss-feed.js",
12+
"prestart": "node scripts/resize-images.mjs && node scripts/generate-rss-feed.mjs && node scripts/generate-atom-feed.mjs",
13+
"prebuild": "node scripts/resize-images.mjs && node scripts/generate-rss-feed.mjs && node scripts/generate-atom-feed.mjs",
1414
"start": "docusaurus start",
1515
"build": "docusaurus build",
1616
"swizzle": "docusaurus swizzle",

scripts/generate-atom-feed.mjs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import fs from 'fs';
2+
import { Feed } from 'feed';
3+
import { blogpostsDetails } from '../src/components/blog/blogpostsDetails.js';
4+
import path from 'path';
5+
import { fileURLToPath } from 'url';
6+
const __filename = fileURLToPath(import.meta.url);
7+
const __dirname = path.dirname(__filename);
8+
9+
const outputDir = path.join(__dirname, '../static');
10+
if (!fs.existsSync(outputDir)) {
11+
fs.mkdirSync(outputDir, { recursive: true });
12+
}
13+
14+
const generateAtomFeedFromBlogDetails = (feed, blogpostsDetails, nbOfBlogPosts) => {
15+
let posts = [];
16+
for (let i = 0; i < nbOfBlogPosts; i++) {
17+
const blogpost = blogpostsDetails[i];
18+
posts.push({
19+
title: blogpost.title,
20+
link: blogpost.url,
21+
summary: blogpost.summary,
22+
date: new Date(blogpost.date),
23+
authors: blogpost.authors.split(','),
24+
})
25+
};
26+
27+
posts.forEach((post) => {
28+
feed.addItem({
29+
30+
title: post.title,
31+
id: post.link,
32+
link: post.link,
33+
date: new Date(post.date),
34+
author: [{ name: post.authors }],
35+
content: post.summary
36+
37+
});
38+
39+
})
40+
return feed;
41+
}
42+
const AtomFeedLast20 = new Feed({
43+
title: 'Recent blog posts featured by QuantStack team',
44+
description: 'Atom feed for QuantStack website blog page',
45+
id: 'https://quantstack.net/',
46+
link: 'https://quantstack.net/',
47+
language: 'en',
48+
updated: new Date(),
49+
feedLinks: {
50+
atom: 'https://quantstack.net/atom.xml',
51+
},
52+
author: {
53+
name: 'QuantStack Team',
54+
link: 'https://quantstack.net',
55+
},
56+
});
57+
58+
59+
const updatedFeedLast20 = generateAtomFeedFromBlogDetails(AtomFeedLast20, blogpostsDetails, 20);
60+
const xml = updatedFeedLast20.atom1();
61+
fs.writeFileSync(path.join(outputDir, 'atom.xml'), xml);
62+
63+
const AtomFeedAll = new Feed({
64+
title: 'All blog posts featured by QuantStack team',
65+
description: 'Atom feed for QuantStack website blog page',
66+
feed_url: 'https://quantstack.net/atom_all.xml',
67+
site_url: 'https://quantstack.net',
68+
language: 'en',
69+
});
70+
71+
72+
const updatedFeedAll = generateAtomFeedFromBlogDetails(AtomFeedAll, blogpostsDetails, blogpostsDetails.length)
73+
fs.writeFileSync(path.join(outputDir, 'atom_all.xml'), updatedFeedAll.atom1({ indent: true }));

scripts/generate-rss-feed.js renamed to scripts/generate-rss-feed.mjs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
const fs = require('fs');
2-
const RSS = require('rss');
3-
const { blogpostsDetails } = require('../src/components/blog/blogpostsDetails.js');
4-
const path = require('path');
1+
import fs from 'fs';
2+
import RSS from 'rss';
3+
import { blogpostsDetails } from '../src/components/blog/blogpostsDetails.js';
4+
import path from 'path';
5+
import { fileURLToPath } from 'url';
6+
const __filename = fileURLToPath(import.meta.url);
7+
const __dirname = path.dirname(__filename);
58

69
const outputDir = path.join(__dirname, '../static');
710
if (!fs.existsSync(outputDir)) {

scripts/resize-images.js renamed to scripts/resize-images.mjs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
const sharp = require('sharp');
2-
const fs = require('fs');
3-
const path = require('path');
4-
const sizeOf = require('image-size');
5-
const fullSizeDir = path.join(__dirname, '../static', 'img', 'blogposts', 'full-size-images');
6-
const reducedSizeDir = path.join(__dirname, '../static', 'img', 'blogposts', 'resized-images');
1+
import sharp from 'sharp';
2+
import fs from 'fs';
3+
import path from 'path';
4+
import sizeOf from 'image-size';
5+
import { fileURLToPath } from 'url';
76
const containerHeight = 180;
87
const containerWidth = 273;
8+
const __filename = fileURLToPath(import.meta.url);
9+
const __dirname = path.dirname(__filename);
10+
const fullSizeDir = path.join(__dirname, '../static', 'img', 'blogposts', 'full-size-images');
11+
const reducedSizeDir = path.join(__dirname, '../static', 'img', 'blogposts', 'resized-images');
912

1013
if (!fs.existsSync(reducedSizeDir)) {
1114
fs.mkdirSync(reducedSizeDir, { recursive: true });

0 commit comments

Comments
 (0)