The taggy-lens package

[Tags: bsd3, library]

Lenses, folds, traversals and prisms for taggy.

This greatly simplifies your life when dealing with the ugly world of Real Life HTML. Here's an example. It lists the date, author and package name of all the recent package uploads entries from the hackage page of the same name. Note that it uses wreq to fetch the Hackage page.

 module Main (main) where

 import Control.Lens (to, only,(^?),ix, toListOf)
 import Data.ByteString.Lazy (ByteString)
 import Data.Text (Text)
 import Data.Text.Encoding.Error (lenientDecode)
 import Data.Text.Lazy.Encoding (decodeUtf8With)
 import Network.HTTP.Client (Response)
 import Network.Wreq (responseBody, get)
 import Text.Taggy (Node)
 import Text.Taggy.Lens (html, elements, children, contents,allNamed)

 data Upload =
   Upload Text -- ^ date
          Text -- ^ author
          Text -- ^ package name
   deriving (Show)

 table :: [Node] -> Maybe Upload
 table row = do
   date    <- row ^? ix 0 . contents
   author  <- row ^? ix 1 . contents
   package <- row ^? ix 2 . elements . contents
   return $ Upload date author package

 recentPackages :: Response ByteString -> [Maybe Upload]
 recentPackages = toListOf
                $ responseBody . to (decodeUtf8With lenientDecode)
                . html . allNamed (only "tr") . children . to table

 main :: IO ()
 main = get "https://hackage.haskell.org/packages/recent" >>= print `fmap` recentPackages

Report any problem on our issues page on github.


Properties

Versions0.1, 0.1.1, 0.1.2
Dependenciesbase (>=4.5 && <5), lens (>=4), taggy (>=0.1), text, unordered-containers
LicenseBSD3
Copyright2014 Alp Mestanogullari, Vikram Verma
AuthorAlp Mestanogullari, Vikram Verma
Maintaineralpmestan@gmail.com
CategoryText, Web
Home pagehttp://github.com/alpmestan/taggy-lens
Upload dateTue Jul 15 17:15:55 UTC 2014
Uploaded byAlpMestanogullari
DistributionsNixOS:0.1.2
Downloads188 total (29 in last 30 days)

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees