Skip to content

Commit 1da9ad4

Browse files
Update generate-atom-feed.mjs to add a summary and an image for each blogpost. Fix issue related to the id and link data.
1 parent f616af2 commit 1da9ad4

File tree

3 files changed

+961
-325
lines changed

3 files changed

+961
-325
lines changed

scripts/generate-atom-feed.mjs

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,38 @@ if (!fs.existsSync(outputDir)) {
1414
const generateAtomFeedFromBlogDetails = (feed, blogpostsDetails, nbOfBlogPosts) => {
1515
let posts = [];
1616
for (let i = 0; i < nbOfBlogPosts; i++) {
17-
const post = blogpostsDetails[i];
17+
const blogpost = blogpostsDetails[i];
1818
posts.push({
19-
title: post.title,
20-
link: post.url,
21-
description: post.summary,
22-
date: new Date(post.date),
23-
authors: post.authors.split(','),
19+
title: blogpost.title,
20+
link: blogpost.url,
21+
summary: blogpost.summary,
22+
date: new Date(blogpost.date),
23+
authors: blogpost.authors.split(','),
2424
})
2525
};
2626

27+
posts.forEach((post) => {
28+
console.log(post.link);
29+
console.log(post.summary)
30+
31+
})
32+
2733
posts.forEach((post) => {
2834
feed.addItem({
35+
2936
title: post.title,
30-
id: post.url,
31-
link: post.url,
32-
description: post.summary,
37+
id: post.link,
38+
link: post.link,
3339
date: new Date(post.date),
3440
author: [{ name: post.authors }],
41+
content:
42+
`<article>
43+
<p><img src="${post.image}" alt="${post.title}" /></p>
44+
<p>${post.text}</p>
45+
</article>`
46+
3547
});
36-
48+
3749
})
3850
return feed;
3951
}
@@ -55,7 +67,7 @@ const AtomFeedLast20 = new Feed({
5567

5668

5769
const updatedFeedLast20 = generateAtomFeedFromBlogDetails(AtomFeedLast20, blogpostsDetails, 20);
58-
const xml = updatedFeedLast20.atom1(); // Atom format
70+
const xml = updatedFeedLast20.atom1();
5971
fs.writeFileSync(path.join(outputDir, 'atom.xml'), xml);
6072

6173
const AtomFeedAll = new Feed({

static/atom.xml

Lines changed: 121 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<feed xmlns="http://www.w3.org/2005/Atom">
33
<id>https://quantstack.net/</id>
44
<title>Recent blog posts featured by QuantStack team</title>
5-
<updated>2025-07-29T21:14:51.498Z</updated>
5+
<updated>2025-07-30T12:10:36.210Z</updated>
66
<generator>https://github.com/jpmonette/feed</generator>
77
<author>
88
<name>QuantStack Team</name>
@@ -13,73 +13,105 @@
1313
<subtitle>Atom feed for QuantStack website blog page</subtitle>
1414
<entry>
1515
<title type="html"><![CDATA[Create your own layers in JupyterGIS]]></title>
16-
<id/>
17-
<link/>
16+
<id>https://david-brochart.medium.com/create-your-own-layers-in-jupytergis-cbb995a89b16</id>
17+
<link href="https://david-brochart.medium.com/create-your-own-layers-in-jupytergis-cbb995a89b16"/>
1818
<updated>2025-06-25T00:00:00.000Z</updated>
19+
<content type="html"><![CDATA[<article>
20+
<p><img src="undefined" alt="Create your own layers in JupyterGIS" /></p>
21+
<p>undefined</p>
22+
</article>]]></content>
1923
<author>
2024
<name>David Brochart</name>
2125
</author>
2226
</entry>
2327
<entry>
2428
<title type="html"><![CDATA[C++ in Jupyter — Interpreting C++ in the Web]]></title>
25-
<id/>
26-
<link/>
29+
<id>https://blog.jupyter.org/c-in-jupyter-interpreting-c-in-the-web-c9d93542f20b</id>
30+
<link href="https://blog.jupyter.org/c-in-jupyter-interpreting-c-in-the-web-c9d93542f20b"/>
2731
<updated>2025-06-19T00:00:00.000Z</updated>
32+
<content type="html"><![CDATA[<article>
33+
<p><img src="undefined" alt="C++ in Jupyter — Interpreting C++ in the Web" /></p>
34+
<p>undefined</p>
35+
</article>]]></content>
2836
<author>
2937
<name>Anutosh Bhat</name>
3038
<name> Vassil Vassilev</name>
3139
</author>
3240
</entry>
3341
<entry>
3442
<title type="html"><![CDATA[JupyterLite 0.6.0 is released! 🎉]]></title>
35-
<id/>
36-
<link/>
43+
<id>https://blog.jupyter.org/jupyterlite-0-6-0-is-released-b4bc69bfc8f4</id>
44+
<link href="https://blog.jupyter.org/jupyterlite-0-6-0-is-released-b4bc69bfc8f4"/>
3745
<updated>2025-06-12T00:00:00.000Z</updated>
46+
<content type="html"><![CDATA[<article>
47+
<p><img src="undefined" alt="JupyterLite 0.6.0 is released! 🎉" /></p>
48+
<p>undefined</p>
49+
</article>]]></content>
3850
<author>
3951
<name>Jeremy Tuloup</name>
4052
</author>
4153
</entry>
4254
<entry>
4355
<title type="html"><![CDATA[JupyterLab 4.4 and Notebook 7.4 are available!]]></title>
44-
<id/>
45-
<link/>
56+
<id>https://blog.jupyter.org/jupyterlab-4-4-and-notebook-7-4-are-available-aca2782d4f3d</id>
57+
<link href="https://blog.jupyter.org/jupyterlab-4-4-and-notebook-7-4-are-available-aca2782d4f3d"/>
4658
<updated>2025-05-21T00:00:00.000Z</updated>
59+
<content type="html"><![CDATA[<article>
60+
<p><img src="undefined" alt="JupyterLab 4.4 and Notebook 7.4 are available!" /></p>
61+
<p>undefined</p>
62+
</article>]]></content>
4763
<author>
4864
<name>Jeremy Tuloup</name>
4965
</author>
5066
</entry>
5167
<entry>
5268
<title type="html"><![CDATA[Congratulations, Distinguished Contributors!]]></title>
53-
<id/>
54-
<link/>
69+
<id>https://blog.jupyter.org/congratulations-distinguished-contributors-2504029fc5a9</id>
70+
<link href="https://blog.jupyter.org/congratulations-distinguished-contributors-2504029fc5a9"/>
5571
<updated>2025-05-15T00:00:00.000Z</updated>
72+
<content type="html"><![CDATA[<article>
73+
<p><img src="undefined" alt="Congratulations, Distinguished Contributors!" /></p>
74+
<p>undefined</p>
75+
</article>]]></content>
5676
<author>
5777
<name>Johan Mabille</name>
5878
</author>
5979
</entry>
6080
<entry>
6181
<title type="html"><![CDATA[Making Qt collaborative using CRDTs]]></title>
62-
<id/>
63-
<link/>
82+
<id>https://david-brochart.medium.com/making-qt-collaborative-using-crdts-94c470703253</id>
83+
<link href="https://david-brochart.medium.com/making-qt-collaborative-using-crdts-94c470703253"/>
6484
<updated>2025-03-31T00:00:00.000Z</updated>
85+
<content type="html"><![CDATA[<article>
86+
<p><img src="undefined" alt="Making Qt collaborative using CRDTs" /></p>
87+
<p>undefined</p>
88+
</article>]]></content>
6589
<author>
6690
<name>David Brochart</name>
6791
</author>
6892
</entry>
6993
<entry>
7094
<title type="html"><![CDATA[R in the Browser: Announcing Our WebAssembly Distribution]]></title>
71-
<id/>
72-
<link/>
95+
<id>https://blog.jupyter.org/r-in-the-browser-announcing-our-webassembly-distribution-9450e9539ed5</id>
96+
<link href="https://blog.jupyter.org/r-in-the-browser-announcing-our-webassembly-distribution-9450e9539ed5"/>
7397
<updated>2025-02-28T00:00:00.000Z</updated>
98+
<content type="html"><![CDATA[<article>
99+
<p><img src="undefined" alt="R in the Browser: Announcing Our WebAssembly Distribution" /></p>
100+
<p>undefined</p>
101+
</article>]]></content>
74102
<author>
75103
<name>Isabel Paredes</name>
76104
</author>
77105
</entry>
78106
<entry>
79107
<title type="html"><![CDATA[Real-time collaboration and collaborative editing for GIS workflows with Jupyter and QGIS]]></title>
80-
<id/>
81-
<link/>
108+
<id>https://blog.jupyter.org/real-time-collaboration-and-collaborative-editing-for-gis-workflows-with-jupyter-and-qgis-d25dbe2832a6</id>
109+
<link href="https://blog.jupyter.org/real-time-collaboration-and-collaborative-editing-for-gis-workflows-with-jupyter-and-qgis-d25dbe2832a6"/>
82110
<updated>2025-02-26T00:00:00.000Z</updated>
111+
<content type="html"><![CDATA[<article>
112+
<p><img src="undefined" alt="Real-time collaboration and collaborative editing for GIS workflows with Jupyter and QGIS" /></p>
113+
<p>undefined</p>
114+
</article>]]></content>
83115
<author>
84116
<name>Meriem Ben Ismail</name>
85117
<name> Nicolas Brichet</name>
@@ -93,18 +125,26 @@
93125
</entry>
94126
<entry>
95127
<title type="html"><![CDATA[PyData Paris 2025 Keynotes]]></title>
96-
<id/>
97-
<link/>
128+
<id>https://medium.com/@PyDataParis/pydata-paris-2025-50ff2bf2dc39</id>
129+
<link href="https://medium.com/@PyDataParis/pydata-paris-2025-50ff2bf2dc39"/>
98130
<updated>2025-02-19T00:00:00.000Z</updated>
131+
<content type="html"><![CDATA[<article>
132+
<p><img src="undefined" alt="PyData Paris 2025 Keynotes" /></p>
133+
<p>undefined</p>
134+
</article>]]></content>
99135
<author>
100136
<name>Sandrine Pataut</name>
101137
</author>
102138
</entry>
103139
<entry>
104140
<title type="html"><![CDATA[Announcing JupyterCAD 3.0]]></title>
105-
<id/>
106-
<link/>
141+
<id>https://blog.jupyter.org/announcing-jupytercad-3-0-d8f4b7b0a719</id>
142+
<link href="https://blog.jupyter.org/announcing-jupytercad-3-0-d8f4b7b0a719"/>
107143
<updated>2025-02-17T00:00:00.000Z</updated>
144+
<content type="html"><![CDATA[<article>
145+
<p><img src="undefined" alt="Announcing JupyterCAD 3.0" /></p>
146+
<p>undefined</p>
147+
</article>]]></content>
108148
<author>
109149
<name>Arjun Verma</name>
110150
<name> Trung Le</name>
@@ -113,9 +153,13 @@
113153
</entry>
114154
<entry>
115155
<title type="html"><![CDATA[Sparrow]]></title>
116-
<id/>
117-
<link/>
156+
<id>https://johan-mabille.medium.com/sparrow-1f23817f6696</id>
157+
<link href="https://johan-mabille.medium.com/sparrow-1f23817f6696"/>
118158
<updated>2025-01-31T00:00:00.000Z</updated>
159+
<content type="html"><![CDATA[<article>
160+
<p><img src="undefined" alt="Sparrow" /></p>
161+
<p>undefined</p>
162+
</article>]]></content>
119163
<author>
120164
<name>Johan Mabille</name>
121165
<name> Alexis Placet</name>
@@ -125,65 +169,93 @@
125169
</entry>
126170
<entry>
127171
<title type="html"><![CDATA[JupyterLite Terminal]]></title>
128-
<id/>
129-
<link/>
172+
<id>https://blog.jupyter.org/jupyterlite-terminal-edb3f80dc1c0</id>
173+
<link href="https://blog.jupyter.org/jupyterlite-terminal-edb3f80dc1c0"/>
130174
<updated>2024-11-13T00:00:00.000Z</updated>
175+
<content type="html"><![CDATA[<article>
176+
<p><img src="undefined" alt="JupyterLite Terminal" /></p>
177+
<p>undefined</p>
178+
</article>]]></content>
131179
<author>
132180
<name>Ian Thomas</name>
133181
</author>
134182
</entry>
135183
<entry>
136184
<title type="html"><![CDATA[Automate your releases with the Jupyter Releaser 🚀]]></title>
137-
<id/>
138-
<link/>
185+
<id>https://blog.jupyter.org/automate-your-releases-with-the-jupyter-releaser-701e7b9841e6</id>
186+
<link href="https://blog.jupyter.org/automate-your-releases-with-the-jupyter-releaser-701e7b9841e6"/>
139187
<updated>2024-10-28T00:00:00.000Z</updated>
188+
<content type="html"><![CDATA[<article>
189+
<p><img src="undefined" alt="Automate your releases with the Jupyter Releaser 🚀" /></p>
190+
<p>undefined</p>
191+
</article>]]></content>
140192
<author>
141193
<name>Jeremy Tuloup</name>
142194
</author>
143195
</entry>
144196
<entry>
145197
<title type="html"><![CDATA[QuantStack Steps Up to Support Apache Arrow with New Dedicated Team]]></title>
146-
<id/>
147-
<link/>
198+
<id>https://medium.com/@QuantStack/quantstack-steps-up-to-support-apache-arrow-with-new-dedicated-team-9ddc952f20e2</id>
199+
<link href="https://medium.com/@QuantStack/quantstack-steps-up-to-support-apache-arrow-with-new-dedicated-team-9ddc952f20e2"/>
148200
<updated>2024-10-22T00:00:00.000Z</updated>
201+
<content type="html"><![CDATA[<article>
202+
<p><img src="undefined" alt="QuantStack Steps Up to Support Apache Arrow with New Dedicated Team" /></p>
203+
<p>undefined</p>
204+
</article>]]></content>
149205
<author>
150206
<name>Sylvain Corlay</name>
151207
</author>
152208
</entry>
153209
<entry>
154210
<title type="html"><![CDATA[Interactive Mapping with ipyopenlayers]]></title>
155-
<id/>
156-
<link/>
211+
<id>https://blog.jupyter.org/interactive-mapping-with-ipyopenlayers-2b8bc93bb6c4</id>
212+
<link href="https://blog.jupyter.org/interactive-mapping-with-ipyopenlayers-2b8bc93bb6c4"/>
157213
<updated>2024-09-06T00:00:00.000Z</updated>
214+
<content type="html"><![CDATA[<article>
215+
<p><img src="undefined" alt="Interactive Mapping with ipyopenlayers" /></p>
216+
<p>undefined</p>
217+
</article>]]></content>
158218
<author>
159219
<name>Nour Cheour</name>
160220
</author>
161221
</entry>
162222
<entry>
163223
<title type="html"><![CDATA[Announcing the 2023 cohort of Jupyter distinguished contributors]]></title>
164-
<id/>
165-
<link/>
224+
<id>https://blog.jupyter.org/announcing-the-2023-jupyter-distinguished-contributor-award-recipients-1b2cc4ba203f</id>
225+
<link href="https://blog.jupyter.org/announcing-the-2023-jupyter-distinguished-contributor-award-recipients-1b2cc4ba203f"/>
166226
<updated>2024-09-04T00:00:00.000Z</updated>
227+
<content type="html"><![CDATA[<article>
228+
<p><img src="undefined" alt="Announcing the 2023 cohort of Jupyter distinguished contributors" /></p>
229+
<p>undefined</p>
230+
</article>]]></content>
167231
<author>
168232
<name>Johan Mabille</name>
169233
<name> on behalf of the Jupyter Distinguished Contributors</name>
170234
</author>
171235
</entry>
172236
<entry>
173237
<title type="html"><![CDATA[Ipydatagrid is now part of Project Jupyter]]></title>
174-
<id/>
175-
<link/>
238+
<id>https://blog.jupyter.org/ipydatagrid-is-now-part-of-project-jupyter-3b3dfb877664</id>
239+
<link href="https://blog.jupyter.org/ipydatagrid-is-now-part-of-project-jupyter-3b3dfb877664"/>
176240
<updated>2024-08-22T00:00:00.000Z</updated>
241+
<content type="html"><![CDATA[<article>
242+
<p><img src="undefined" alt="Ipydatagrid is now part of Project Jupyter" /></p>
243+
<p>undefined</p>
244+
</article>]]></content>
177245
<author>
178246
<name>Sylvain Corlay</name>
179247
<name> on behalf of the Jupyter Widgets Council</name>
180248
</author>
181249
</entry>
182250
<entry>
183251
<title type="html"><![CDATA[Introducing Mamba 2.0]]></title>
184-
<id/>
185-
<link/>
252+
<id>https://medium.com/@QuantStack/introducing-mamba-2-0-0e8d5c6d1d0c</id>
253+
<link href="https://medium.com/@QuantStack/introducing-mamba-2-0-0e8d5c6d1d0c"/>
186254
<updated>2024-07-16T00:00:00.000Z</updated>
255+
<content type="html"><![CDATA[<article>
256+
<p><img src="undefined" alt="Introducing Mamba 2.0" /></p>
257+
<p>undefined</p>
258+
</article>]]></content>
187259
<author>
188260
<name>Antoine Prouvost</name>
189261
<name> Joël Lamotte</name>
@@ -193,18 +265,26 @@
193265
</entry>
194266
<entry>
195267
<title type="html"><![CDATA[QuantStack open-source internship program]]></title>
196-
<id/>
197-
<link/>
268+
<id>https://medium.com/@QuantStack/quantstack-open-source-internship-program-049755b6d44b</id>
269+
<link href="https://medium.com/@QuantStack/quantstack-open-source-internship-program-049755b6d44b"/>
198270
<updated>2024-07-09T00:00:00.000Z</updated>
271+
<content type="html"><![CDATA[<article>
272+
<p><img src="undefined" alt="QuantStack open-source internship program" /></p>
273+
<p>undefined</p>
274+
</article>]]></content>
199275
<author>
200276
<name>Sylvain Corlay</name>
201277
</author>
202278
</entry>
203279
<entry>
204280
<title type="html"><![CDATA[JupyterCAD 2.0]]></title>
205-
<id/>
206-
<link/>
281+
<id>https://medium.com/@QuantStack/jupytercad-2-0-4b9c4e18d22a</id>
282+
<link href="https://medium.com/@QuantStack/jupytercad-2-0-4b9c4e18d22a"/>
207283
<updated>2024-07-05T00:00:00.000Z</updated>
284+
<content type="html"><![CDATA[<article>
285+
<p><img src="undefined" alt="JupyterCAD 2.0" /></p>
286+
<p>undefined</p>
287+
</article>]]></content>
208288
<author>
209289
<name>Trung Le</name>
210290
<name> Martin Renou</name>

0 commit comments

Comments
 (0)