如何从内容丰富的 RSS 源数据中获取 html 元素(gatsby-plugin-feed)
How to get the html elements from Contentful Raw Data for RSS-feeds (gatsby-plugin-feed)
我正在忙着尝试使用 gatsby-plugin-feed@3.4.0
和 gatsby@3.4.0
(最新的最新的)来解决我的 RSS 源的最新重大变化。
这是我的配置:(gatsby-config.js
)
{
resolve: 'gatsby-plugin-feed',
options: {
query: `
{
site {
siteMetadata {
title
author
description
bizEmail
authorEmail
siteUrl
site_url: siteUrl
}
}
}
`,
setup: ({ query: { site } }, options) => ({
...options,
title: 'Menefex WMB: RSS Feeds',
description: site.siteMetadata.description,
site_url: site.siteMetadata.siteUrl,
feed_url: `${site.siteMetadata.siteUrl}/rss.xml`,
image_url: 'https://i.postimg.cc/JnqZPb3f/Gx-FAVICON.png',
webMaster: `${site.siteMetadata.bizEmail} (${site.siteMetadata.title})`,
managingEditor: `${site.siteMetadata.authorEmail} (${site.siteMetadata.author})`,
copyright: `© 2019 - ${new Date().getFullYear()} ${
site.siteMetadata.title
}, Alle rechten voorbehouden.`,
language: 'nl',
generator: 'GatsbyJS',
ttl: '60',
custom_namespaces: {
webfeeds: 'http://webfeeds.org/rss/1.0',
},
custom_elements: [
{
'webfeeds:cover': {
_attr: {
image: 'https://i.postimg.cc/WbsmfwKc/Gx-NEWLOGO.png',
},
},
},
{ 'webfeeds:icon': 'https://i.postimg.cc/JnqZPb3f/Gx-FAVICON.png' },
{ 'webfeeds:logo': 'https://i.postimg.cc/JnqZPb3f/Gx-FAVICON.png' },
{ 'webfeeds:accentColor': 'FFCC00' },
{
'webfeeds:related': {
_attr: {
layout: 'card',
target: 'browser',
},
},
},
],
}),
feeds: [
{
serialize: ({ query: { site, allContentfulBlogPost } }) =>
allContentfulBlogPost.edges.map((edge) => ({
title: edge.node.title,
author: site.siteMetadata.authorEmail,
description: edge.node.subtitle,
date: edge.node.updatedAt,
url: `${site.siteMetadata.siteUrl}/blog/${edge.node.slug}`,
guid: edge.node.updatedAt,
enclosure: {
url: `https:${edge.node.image.file.url}`,
},
custom_elements: [
{
'webfeeds:featuredImage': `https:${edge.node.image.file.url}`,
},
{
'content:encoded': JSON.stringify(edge.node.body),
},
],
})),
query: `
{
allContentfulBlogPost(sort: { fields: publishedDate, order: DESC }) {
edges {
node {
title
subtitle
slug
updatedAt
body {
raw
references {
... on ContentfulAsset {
contentful_id
__typename
fixed(width: 1600) {
width
height
src
srcSet
}
}
}
}
image {
file {
url
}
}
}
}
}
}
`,
output: '/rss.xml',
title: 'Menefex WMB: RSS Feeds',
// optional configuration to insert feed reference in pages:
// if `string` is used, it will be used to create RegExp and then test if pathname of
// current page satisfied this regular expression;
// if not provided or `undefined`, all pages will have feed reference inserted
match: '^/blog/',
// optional configuration to specify external rss feed, such as feedburner
link: 'https://feeds.feedburner.com/GimmixWMB',
},
],
},
},
通过上面的代码,我得到了下面的代码; (焦点:content:encoded)。我认为这不是 good/enough 查看我的 rssfeeds 的正确方式。 如何将原始数据解析为 html 个元素?
在将我的 Gatsby 项目迁移到 v3 之前,我曾经让这段代码处于工作状态:
它现在抱怨使用 CreateType/createSchemaCustomization 函数并且我的 rssHtml
在 GrapQhl 游乐场无法访问。
我的gatsby-node.js
const { documentToHtmlString } = require('@contentful/rich-text-html-renderer');
exports.createResolvers = ({ createResolvers }) => {
createResolvers({
contentfulBlogPostBodyRichTextNode: {
rssHtml: {
type: 'String',
resolve: (source) => documentToHtmlString(source),
},
},
});
};
我在这里缺少什么? 在此先感谢。
查看您的屏幕截图,edge.node.body
有 raw
字段,我认为这就是您要解析的内容。尝试将该值传递给 documentToHtmlString
调用
resolve: (source) => documentToHtmlString(JSON.parse(source.raw)),
并在您的 RSS 提要配置中传递新的解析值
'content:encoded': edge.node.body.rssHtml,
您不妨尝试在 gatsby-config.js
文件中直接使用 @contentful/rich-text-html-renderer
并避免添加自定义解析器
const { documentToHtmlString } = require('@contentful/rich-text-html-renderer');
...
'content:encoded': documentToHtmlString(edge.node.body.raw),
...
我正在忙着尝试使用 gatsby-plugin-feed@3.4.0
和 gatsby@3.4.0
(最新的最新的)来解决我的 RSS 源的最新重大变化。
这是我的配置:(gatsby-config.js
)
{
resolve: 'gatsby-plugin-feed',
options: {
query: `
{
site {
siteMetadata {
title
author
description
bizEmail
authorEmail
siteUrl
site_url: siteUrl
}
}
}
`,
setup: ({ query: { site } }, options) => ({
...options,
title: 'Menefex WMB: RSS Feeds',
description: site.siteMetadata.description,
site_url: site.siteMetadata.siteUrl,
feed_url: `${site.siteMetadata.siteUrl}/rss.xml`,
image_url: 'https://i.postimg.cc/JnqZPb3f/Gx-FAVICON.png',
webMaster: `${site.siteMetadata.bizEmail} (${site.siteMetadata.title})`,
managingEditor: `${site.siteMetadata.authorEmail} (${site.siteMetadata.author})`,
copyright: `© 2019 - ${new Date().getFullYear()} ${
site.siteMetadata.title
}, Alle rechten voorbehouden.`,
language: 'nl',
generator: 'GatsbyJS',
ttl: '60',
custom_namespaces: {
webfeeds: 'http://webfeeds.org/rss/1.0',
},
custom_elements: [
{
'webfeeds:cover': {
_attr: {
image: 'https://i.postimg.cc/WbsmfwKc/Gx-NEWLOGO.png',
},
},
},
{ 'webfeeds:icon': 'https://i.postimg.cc/JnqZPb3f/Gx-FAVICON.png' },
{ 'webfeeds:logo': 'https://i.postimg.cc/JnqZPb3f/Gx-FAVICON.png' },
{ 'webfeeds:accentColor': 'FFCC00' },
{
'webfeeds:related': {
_attr: {
layout: 'card',
target: 'browser',
},
},
},
],
}),
feeds: [
{
serialize: ({ query: { site, allContentfulBlogPost } }) =>
allContentfulBlogPost.edges.map((edge) => ({
title: edge.node.title,
author: site.siteMetadata.authorEmail,
description: edge.node.subtitle,
date: edge.node.updatedAt,
url: `${site.siteMetadata.siteUrl}/blog/${edge.node.slug}`,
guid: edge.node.updatedAt,
enclosure: {
url: `https:${edge.node.image.file.url}`,
},
custom_elements: [
{
'webfeeds:featuredImage': `https:${edge.node.image.file.url}`,
},
{
'content:encoded': JSON.stringify(edge.node.body),
},
],
})),
query: `
{
allContentfulBlogPost(sort: { fields: publishedDate, order: DESC }) {
edges {
node {
title
subtitle
slug
updatedAt
body {
raw
references {
... on ContentfulAsset {
contentful_id
__typename
fixed(width: 1600) {
width
height
src
srcSet
}
}
}
}
image {
file {
url
}
}
}
}
}
}
`,
output: '/rss.xml',
title: 'Menefex WMB: RSS Feeds',
// optional configuration to insert feed reference in pages:
// if `string` is used, it will be used to create RegExp and then test if pathname of
// current page satisfied this regular expression;
// if not provided or `undefined`, all pages will have feed reference inserted
match: '^/blog/',
// optional configuration to specify external rss feed, such as feedburner
link: 'https://feeds.feedburner.com/GimmixWMB',
},
],
},
},
通过上面的代码,我得到了下面的代码; (焦点:content:encoded)。我认为这不是 good/enough 查看我的 rssfeeds 的正确方式。 如何将原始数据解析为 html 个元素?
在将我的 Gatsby 项目迁移到 v3 之前,我曾经让这段代码处于工作状态:
它现在抱怨使用 CreateType/createSchemaCustomization 函数并且我的 rssHtml
在 GrapQhl 游乐场无法访问。
我的gatsby-node.js
const { documentToHtmlString } = require('@contentful/rich-text-html-renderer');
exports.createResolvers = ({ createResolvers }) => {
createResolvers({
contentfulBlogPostBodyRichTextNode: {
rssHtml: {
type: 'String',
resolve: (source) => documentToHtmlString(source),
},
},
});
};
我在这里缺少什么? 在此先感谢。
查看您的屏幕截图,edge.node.body
有 raw
字段,我认为这就是您要解析的内容。尝试将该值传递给 documentToHtmlString
调用
resolve: (source) => documentToHtmlString(JSON.parse(source.raw)),
并在您的 RSS 提要配置中传递新的解析值
'content:encoded': edge.node.body.rssHtml,
您不妨尝试在 gatsby-config.js
文件中直接使用 @contentful/rich-text-html-renderer
并避免添加自定义解析器
const { documentToHtmlString } = require('@contentful/rich-text-html-renderer');
...
'content:encoded': documentToHtmlString(edge.node.body.raw),
...