Introducing Gallery Image feed

This commit is contained in:
James Purser 2024-10-20 14:29:49 +11:00
parent 23c9584cfe
commit cf440e2160
3 changed files with 103 additions and 4 deletions

View file

@ -317,6 +317,7 @@ export const getAllGalleryImages = async () => {
const { serverRuntimeConfig } = getConfig() const { serverRuntimeConfig } = getConfig()
const qs = require('qs') const qs = require('qs')
var query = qs.stringify({ var query = qs.stringify({
sort: ['createdAt:desc'],
populate: '*' populate: '*'
}) })

View file

@ -1,7 +1,7 @@
import { Feed } from "feed" import { Feed } from "feed"
import { Podcast } from 'podcast'; import { Podcast } from 'podcast';
import getConfig from 'next/config' import getConfig from 'next/config'
import { getAllPodcastSeries, getAllPosts, getProjectDetails } from "../external/cms" import { getAllGalleryImages, getAllPodcastSeries, getAllPosts, getProjectDetails } from "../external/cms"
import fs from "fs" import fs from "fs"
import config from './config' import config from './config'
import htmlFindReplaceElementAttrs from "html-find-replace-element-attrs" import htmlFindReplaceElementAttrs from "html-find-replace-element-attrs"
@ -31,7 +31,7 @@ export const generateRssFeed = async (filter) => {
email: "james@angrybeanie.com", email: "james@angrybeanie.com",
link: "https://twitter.com/purserj", link: "https://www.angrybeanie.com",
}; };
@ -235,3 +235,100 @@ export const generatePodcastFeeds = async () => {
}) })
} }
export const generateGalleryImageFeed = async () => {
const galleryImages = await getAllGalleryImages()
const Title = "Angry Beanie Gallery Image feed"
const Description = "A feed of the photos that I post"
const feedTitle = "gallery-image-feed"
const siteURL = config.siteURL;
const date = new Date();
const author = {
name: "James Purser",
email: "james@angrybeanie.com",
link: "https://www.angrybeanie.com",
};
const feed = new Feed({
title: Title,
description: Description,
id: siteURL,
link: siteURL,
image: `${siteURL}/public/images/logo.png`,
favicon: `${siteURL}/public/images/favicon.png`,
copyright: `All rights reserved ${date.getFullYear()}, James Purser`,
updated: date,
generator: "Feed for Node.js",
feedLinks: {
rss2: `${siteURL}/feed/${feedTitle}-feed.xml`,
json: `${siteURL}/feed/${feedTitle}-feed.json`,
atom: `${siteURL}/feed/${feedTitle}-atom.xml`,
},
author,
});
galleryImages.data.forEach((post) => {
const siteURL = config.siteURL;
const { serverRuntimeConfig, publicRuntimeConfig } = getConfig()
const imgUrl = `${siteURL}${post.attributes.Image.data.attributes.url}?width=700`
var postBody = `<img src="${imgUrl}" alt="${post.attributes.Image.data.attributes.alternativeText}" />`
const url = `${siteURL}/${post.attributes.galleries.data[0].attributes.Slug}/${post.attributes.Slug}`
feed.addItem({
title: post.attributes.Title,
id: url,
link: url,
description: postBody,
content: postBody,
author: [author],
contributor: [author],
date: new Date(post.attributes.publishedAt),
});
})
fs.writeFileSync(`./public/feed/${feedTitle}-feed.xml`, feed.rss2());
fs.writeFileSync(`./public/feed/${feedTitle}-atom.xml`, feed.atom1());
fs.writeFileSync(`./public/feed/${feedTitle}-feed.json`, feed.json1());
}

View file

@ -4,15 +4,16 @@ import PublishedInfo from '../components/publishedinfo.js'
import getConfig from 'next/config' import getConfig from 'next/config'
import Head from 'next/head' import Head from 'next/head'
import config from '../data/internal/config' import config from '../data/internal/config'
import { generatePodcastFeeds, generateRssFeed } from "../data/internal/feed-generator" import { generateGalleryImageFeed, generatePodcastFeeds, generateRssFeed } from "../data/internal/feed-generator"
import { generateSitemap } from "../data/internal/sitemap-generator" import { generateSitemap } from "../data/internal/sitemap-generator"
import { getLatestContent, getLatestPodcastEpisode } from "../data/external/cms" import { getLatestContent, getLatestPodcastEpisode } from "../data/external/cms"
import { getLatestGalleryImage } from "../data/external/cms" //import { getLatestGalleryImage } from "../data/external/cms"
export async function getStaticProps(context) { export async function getStaticProps(context) {
generateRssFeed() generateRssFeed()
generateRssFeed('tech-and-disability') generateRssFeed('tech-and-disability')
generatePodcastFeeds() generatePodcastFeeds()
generateGalleryImageFeed()
generateSitemap() generateSitemap()
const { serverRuntimeConfig } = getConfig() const { serverRuntimeConfig } = getConfig()