{-# LANGUAGE OverloadedStrings #-} module Hakyll.Convert.Wordpress (readPosts, distill) where import Control.Monad import Data.Maybe import qualified Data.Text as T import Data.Time.Format (defaultTimeLocale, parseTimeM, rfc822DateFormat) import Data.XML.Types (Element (..), Name (..), elementChildren, elementText) import Hakyll.Convert.Common import Text.RSS.Import import Text.RSS.Syntax import qualified Text.XML as XML -- | Returns only public posts readPosts :: FilePath -> IO (Maybe [RSSItem]) readPosts f = do doc <- XML.readFile (XML.def :: XML.ParseSettings) f let root = XML.toXMLElement $ XML.documentRoot doc return $ fmap select (elementToRSS root) where select = filter isPublished . rssItems . rssChannel isPublished :: RSSItem -> Bool isPublished i = "publish" `elem` getStatus i distill :: Bool -> RSSItem -> DistilledPost distill extractComments item = DistilledPost { dpTitle = rssItemTitle item, dpBody = body, dpUri = link, dpTags = tags, dpCategories = categories, dpDate = date } where body = if extractComments then T.intercalate "\n" [ content, "", "
", "On ", pubdate, ", ", author, " wrote:", "
" ], "