UP | HOME

emacs-使用ox-rss导出rss.xml文件

[2024-05-22 周三 21:41]

设置 ox-rss ,可参考此链接:

https://nicolasknoebber.com/posts/blogging-with-emacs-and-org.html#org9edef43

("rss"
           :publishing-directory ,my/publish-directory
           :base-directory ,website-directory
           :base-extension "org"
           :exclude ".*"
           :include ,(my/ox-files)
           :publishing-function publish-posts-rss-feed
           :rss-extension "xml"
           :html-link-home "https://tomoemami.github.io/blog"
           :html-link-use-abs-url t
           :html-link-org-files-as-html t
           :auto-sitemap t
           :sitemap-function posts-rss-feed
           :sitemap-title "TomoeMami's Blog"
           :sitemap-filename "rss.org"
           :sitemap-style list
           :sitemap-sort-files anti-chronologically
           :sitemap-format-entry format-posts-rss-feed-entry)

(require 'ox-rss)
(defun posts-rss-feed (title list)
  "Generate a sitemap of posts that is exported as a RSS feed.
TITLE is the title of the RSS feed.  LIST is an internal
representation for the files to include.  PROJECT is the current
project."
  (concat
   "#+TITLE: " title "\n\n"
   (org-list-to-subtree list)))

(defun publish-posts-rss-feed (plist filename dir)
  "Publish PLIST to RSS when FILENAME is rss.org.
DIR is the location of the output."
  (if (equal "rss.org" (file-name-nondirectory filename))
      (org-rss-publish-to-rss plist filename dir)))

(defun format-posts-rss-feed-entry (entry _style project)
  "Format ENTRY for the posts RSS feed in PROJECT."
  (let* (
         (title (org-publish-find-title entry project))
         (link (concat (file-name-sans-extension entry) ".html"))
         (pubdate (format-time-string (cdr org-time-stamp-formats)
                                      (org-publish-find-date entry project))))
    (message pubdate)
    (format "%s
:properties:
:rss_permalink: %s
:pubdate: %s
:ROAM_EXCLUDE: t
:end:\n"
            title
            link
            pubdate)))

此处 :ROAM_EXCLUDE: t 是为了避免org-roam把生成的 rss.org 文件添加到org-roam的数据库中。

然后需要修改 org-roamorg-roam-capture-templates ,为文件添加 DATE 属性:

(setq org-roam-capture-templates
      '(("d" "default" plain "[%<%Y-%m-%d %H:%M>]\n%?" :target
  (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+date: <%<%Y-%m-%d %H:%M>>
")
  :unnarrowed t)))

这样一来,rss生成函数就能读取到文件创建的日期并将其作为RSS的 pubdate 了。

根据 这个PR ,目前 org-publish 会缓存 :title/:date/:index 属性且不更新,如果手动修改了以上属性需要删除掉缓存文件再重新导出。

▲ 编辑于 [2024-08-22 周四 11:09] | © Published by Emacs 30.0.50 (Org mode 9.7.10) on [2024-08-22 周四 11:25] | RSS