如何解决如何从 RSS 源的 Contentful Raw Data 中获取 html 元素 (gatsby-plugin-feed)
我正在竭尽全力使用 gatsby-plugin-feed@3.4.0
和 gatsby@3.4.0
(最新的最新版本)解决我的 RSSfeed 的最新重大更改。
这是我的配置:(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',// 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',
通过上面的代码,我得到了下面的代码; (焦点:内容:编码)。我认为这不足以/不足以以正确的方式查看我的 rssfeed。 如何将原始数据解析为 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,
您不妨尝试直接在您的 @contentful/rich-text-html-renderer
文件中使用 gatsby-config.js
并避免添加自定义解析器
const { documentToHtmlString } = require('@contentful/rich-text-html-renderer');
...
'content:encoded': documentToHtmlString(edge.node.body.raw),...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。