Skip to content

Commit 7beb102

Browse files
Add an Atom feed.
1 parent 3b60293 commit 7beb102

File tree

5 files changed

+368
-290
lines changed

5 files changed

+368
-290
lines changed

package-lock.json

Lines changed: 18 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 3 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.js && node scripts/generate-rss-feed.js && node scripts/generate-atom-feed.js ",
13+
"prebuild": "node scripts/resize-images.js && node scripts/generate-rss-feed.js && node scripts/generate-atom-feed.js",
1414
"start": "docusaurus start",
1515
"build": "docusaurus build",
1616
"swizzle": "docusaurus swizzle",
@@ -36,6 +36,7 @@
3636
"canvas": "^2.11.2",
3737
"clsx": "^2.0.0",
3838
"curl": "^0.1.4",
39+
"feed": "^5.1.0",
3940
"fs": "^0.0.1-security",
4041
"image-size": "^1.2.1",
4142
"jimp": "^0.22.12",
@@ -80,5 +81,6 @@
8081
},
8182
"engines": {
8283
"node": "18.x"
83-
}
84+
},
85+
"type": "module"
8486
}

scripts/generate-atom-feed.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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+
7+
const __filename = fileURLToPath(import.meta.url);
8+
const __dirname = path.dirname(__filename);
9+
const outputDir = path.join(__dirname, '../static');
10+
11+
12+
const generateAtomFeedFromBlogDetails = (feed, blogpostsDetails, nbOfBlogPosts) => {
13+
let posts = [];
14+
for (let i = 0; i < nbOfBlogPosts; i++) {
15+
const post = blogpostsDetails[i];
16+
posts.push({
17+
title: post.title,
18+
link: post.url,
19+
description: post.summary,
20+
date: new Date(post.date),
21+
authors: post.authors.split(','),
22+
image: post.image
23+
})
24+
};
25+
26+
posts.forEach((post) => {
27+
feed.addItem({
28+
title: post.title,
29+
link: post.url,
30+
description: post.summary,
31+
date: new Date(post.date),
32+
author: post.authors,
33+
enclosure: {
34+
url: 'https://quantstack.net/' + post.image,
35+
type: 'image/png',
36+
length: 0
37+
}
38+
})
39+
});
40+
return feed;
41+
}
42+
43+
const AtomFeedLast20 = new Feed({
44+
title: 'Recent blog posts featured by QuantStack team',
45+
description: 'Atom feed for QuantStack website blog page',
46+
feed_url: 'https://quantstack.net/atom.xml',
47+
site_url: 'https://quantstack.net',
48+
language: 'en',
49+
});
50+
51+
const updatedFeedLast20 = generateAtomFeedFromBlogDetails(AtomFeedLast20, blogpostsDetails, 20);
52+
fs.writeFileSync(path.join(outputDir, 'atom.xml'), updatedFeedLast20.atom1({ indent: true }));
53+
54+
/*const AtomFeedAll = new Feed({
55+
title: 'All blog posts featured by QuantStack team',
56+
description: 'Atom feed for QuantStack website blog page',
57+
feed_url: 'https://quantstack.net/atom_all.xml',
58+
site_url: 'https://quantstack.net',
59+
language: 'en',
60+
});
61+
62+
const updatedFeedAll = generateAtomFeedFromBlogDetails(AtomFeedAll, blogpostsDetails, blogpostsDetails.length)
63+
fs.writeFileSync(path.join(outputDir, 'atom_all.xml'), updatedFeedAll.atom1({ indent: true }));*/

scripts/generate-rss-feed.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ if (!fs.existsSync(outputDir)) {
88
fs.mkdirSync(outputDir, { recursive: true });
99
}
1010

11-
const generateFeedFromBlogDetails = (feed, blogpostsDetails, nbOfBlogPosts) => {
11+
const generateRSSFeedFromBlogDetails = (feed, blogpostsDetails, nbOfBlogPosts) => {
1212
let posts = [];
1313
for (let i = 0; i < nbOfBlogPosts; i++) {
1414
const post = blogpostsDetails[i];
@@ -40,24 +40,24 @@ const generateFeedFromBlogDetails = (feed, blogpostsDetails, nbOfBlogPosts) => {
4040
return feed;
4141
}
4242

43-
const feedLast20 = new RSS({
43+
const RSSfeedLast20 = new RSS({
4444
title: 'Recent blog posts featured by QuantStack team',
4545
description: 'RSS feed for QuantStack website blog page',
4646
feed_url: 'https://quantstack.net/rss.xml',
4747
site_url: 'https://quantstack.net',
4848
language: 'en',
4949
});
5050

51-
const updatedFeedLast20 = generateFeedFromBlogDetails(feedLast20, blogpostsDetails, 20);
51+
const updatedFeedLast20 = generateRSSFeedFromBlogDetails(RSSfeedLast20, blogpostsDetails, 20);
5252
fs.writeFileSync(path.join(outputDir, 'rss.xml'), updatedFeedLast20.xml({ indent: true }));
5353

54-
const feedAll = new RSS({
54+
const RSSfeedAll = new RSS({
5555
title: 'All blog posts featured by QuantStack team',
5656
description: 'RSS feed for QuantStack website blog page',
5757
feed_url: 'https://quantstack.net/rss_all.xml',
5858
site_url: 'https://quantstack.net',
5959
language: 'en',
6060
});
6161

62-
const updatedFeedAll = generateFeedFromBlogDetails(feedAll, blogpostsDetails, blogpostsDetails.length)
62+
const updatedFeedAll = generateFeedFromBlogDetails(RSSfeedAll, blogpostsDetails, blogpostsDetails.length)
6363
fs.writeFileSync(path.join(outputDir, 'rss_all.xml'), updatedFeedAll.xml({ indent: true }));

0 commit comments

Comments
 (0)