diff --git a/package-lock.json b/package-lock.json
index 9710e8e8..5ee20c02 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7764,6 +7764,15 @@
"pend": "~1.2.0"
}
},
+ "feed": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/feed/-/feed-4.0.0.tgz",
+ "integrity": "sha512-VWtvINgG7cA91BtrGychMvxHj84nc8xS9W/PuAHlY62I8owZtcoxNaKFN+zkGl8tBsaYbxrrp4yB9DhqKNQSPw==",
+ "dev": true,
+ "requires": {
+ "xml-js": "^1.6.11"
+ }
+ },
"figgy-pudding": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
@@ -11324,7 +11333,7 @@
},
"isarray": {
"version": "0.0.1",
- "resolved": "http://storage.mds.yandex.net/get-npm/38095/isarray-0.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"isexe": {
@@ -11689,7 +11698,7 @@
},
"koa-convert": {
"version": "1.2.0",
- "resolved": "http://storage.mds.yandex.net/get-npm/35308/koa-convert-1.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz",
"integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=",
"requires": {
"co": "^4.6.0",
@@ -11752,7 +11761,7 @@
},
"koa-route": {
"version": "3.2.0",
- "resolved": "http://storage.mds.yandex.net/get-npm/45674/koa-route-3.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/koa-route/-/koa-route-3.2.0.tgz",
"integrity": "sha1-dimLmaa8+p44yrb+XHmocz51i84=",
"requires": {
"debug": "*",
@@ -12715,7 +12724,7 @@
},
"media-typer": {
"version": "0.3.0",
- "resolved": "http://storage.mds.yandex.net/get-npm/66641/media-typer-0.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
},
"memory-fs": {
@@ -12770,7 +12779,7 @@
},
"methods": {
"version": "1.1.2",
- "resolved": "http://storage.mds.yandex.net/get-npm/45674/methods-1.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"microevent.ts": {
@@ -14911,7 +14920,7 @@
},
"path-to-regexp": {
"version": "1.7.0",
- "resolved": "http://storage.mds.yandex.net/get-npm/66641/path-to-regexp-1.7.0.tgz",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
"integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
"requires": {
"isarray": "0.0.1"
@@ -21618,6 +21627,15 @@
"mkdirp": "^0.5.1"
}
},
+ "xml-js": {
+ "version": "1.6.11",
+ "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz",
+ "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==",
+ "dev": true,
+ "requires": {
+ "sax": "^1.2.4"
+ }
+ },
"xtend": {
"version": "4.0.1",
"resolved": "http://storage.mds.yandex.net/get-npm/35308/xtend-4.0.1.tgz",
diff --git a/package.json b/package.json
index 8f13ad32..883fd2ff 100644
--- a/package.json
+++ b/package.json
@@ -9,8 +9,9 @@
"dev": "node src/server.js",
"next": "next",
"build": "next build",
- "export": "npm run build && next export -o dist && npm run sitemap",
+ "export": "npm run build && next export -o dist && npm run sitemap && npm run feed",
"sitemap": "node scripts/sitemap.js",
+ "feed": "node scripts/feed.js",
"test": "mocha --compilers js:babel-register",
"coverage": "istanbul cover mocha -- --compilers js:babel-register"
},
@@ -82,6 +83,7 @@
"eslint-plugin-promise": "^3.3.1",
"eslint-plugin-react": "^7.4.0",
"eslint-plugin-standard": "^2.0.1",
+ "feed": "^4.0.0",
"gulp": "^4.0.0",
"gulp-concat": "^2.4.1",
"gulp-if": "^2.0.0",
diff --git a/pages/_document.jsx b/pages/_document.jsx
index e842f5d6..09b8725c 100644
--- a/pages/_document.jsx
+++ b/pages/_document.jsx
@@ -30,12 +30,12 @@ export default class MyDocument extends Document {
- {/* */}
+ href="/feed.xml"
+ />
{/* Fotorama + jQuery*/}
diff --git a/scripts/feed.js b/scripts/feed.js
new file mode 100644
index 00000000..3a5a067e
--- /dev/null
+++ b/scripts/feed.js
@@ -0,0 +1,43 @@
+const { Feed } = require('feed')
+const axios = require('axios')
+const fs = require('fs').promises
+
+const api = axios.create({
+ baseURL: 'http://localhost:3000',
+})
+
+async function getArticles(pageSize) {
+ const page = 1
+ const res = await api.get(`/api/articles?page=${page}&pageSize=${pageSize}`)
+
+ return res.data.items
+}
+
+(async () => {
+ const articles = await getArticles(30)
+
+ const url = 'https://art.shlisselburg.org'
+ const feed = new Feed({
+ title: 'Шлиссельбургская ДХШ',
+ id: url,
+ link: url,
+ feedLinks: {
+ atom: 'https://art.shlisselburg.org/feed.xml',
+ },
+ });
+
+ articles.forEach(article => {
+ feed.addItem({
+ title: article.title,
+ date: new Date(article.date),
+ id: article.id,
+ link: article.url,
+ content: article.post,
+ })
+ })
+
+ const content = feed.atom1()
+
+ await fs.writeFile('dist/feed.xml', content, { encoding: 'utf-8' })
+})()
+
\ No newline at end of file