KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

gatsby-plugin-feedの使い方の覚書

gatsby starter blogのマークダウンを元にしていたらgatsby-plugin-feedを書き換えずにそのまま使えるけれど、markdownじゃなくてjsonで記事を出力に変更していたから使い方を覚える必要があった。

サンプルコードには記事個別のタイトルの指定の仕方が乗っていなかったのでどうやるのかがコードを良く読むまで気づかなかった。 Object.assignはオブジェクトの要素をまとめる意味があり、node.frontmatterのなかにtitleが含まれている。それをgraphqlで取得。

markdownformatterの書き方

---
title:
date:
---
本文

意味としては{title:node.frontmatter.title}を略してあるわけだ。

 {
      resolve: `gatsby-plugin-feed`,
      options: {
        feeds: [
          {
            serialize: ({ query: { site, allMarkdownRemark } }) => {
              return allMarkdownRemark.nodes.map(node => {
                return Object.assign({}, node.frontmatter, {
                  description: node.excerpt,
                  date: node.frontmatter.date,
                  url: site.siteMetadata.siteUrl + node.fields.slug,
                  guid: site.siteMetadata.siteUrl + node.fields.slug,
                  custom_elements: [{ "content:encoded": node.html }],
                })
              })
            },
            query: `
              {
                allMarkdownRemark(
                  sort: { order: DESC, fields: [frontmatter___date] },
                ) {
                  nodes {
                    excerpt
                    html
                    fields {
                      slug
                    }
                    frontmatter {
                      title
                      date
                    }
                  }
                }
              }
            `,
            output: "/rss.xml",
            title: "Your Site's RSS Feed",
          },
        ],

www.gatsbyjs.com

実際のコードはこうなった。

    {
      resolve: `gatsby-plugin-feed`,
      options: {
        query: `
          {
            site {
              siteMetadata {
                title
                description
                siteUrl
                site_url: siteUrl
              }
            }
          }
        `,
        feeds: [
          {
            serialize: ({ query: { site, allFile } }) => {
              return allFile.edges.map(edge => {
                return Object.assign({}, edge.node.childJson.Saletitle, {
                  title:edge.node.childJson.Saletitle,
                  description: edge.node.childJson.Saletitle,
                  date: edge.node.childJson.Date,
                  url: site.siteMetadata.siteUrl + edge.node.fields.slug,
                  guid: site.siteMetadata.siteUrl + edge.node.fields.slug,
                })
              })
            },
            query: `{
             allFile(filter: {extension: {eq: "json"}}, sort: {childrenJson: {Date: DESC}}) {
               edges {
                 node {
                   fields {
                     slug
                   }
                   childJson {
                     Date
                     Saletitle
                   }
                 }
               }
             }
            }`,
            output: "/rss.xml",
            title: "kindleセールチェック RSS Feed",
          },
        ],
      },