haskell-fake-user-agent 0.0.1 → 0.0.2
raw patch · 4 files changed
+54/−35 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- HTTP.FakeUserAgent: getBrowserString :: String -> IO String
+ HTTP.ThirdParty.FakeUserAgent: getBrowserStrings :: String -> IO [String]
+ HTTP.ThirdParty.FakeUserAgent: getLatestBrowserString :: String -> IO String
Files
- HTTP/FakeUserAgent.hs +0/−32
- HTTP/ThirdParty/FakeUserAgent.hs +36/−0
- README.md +15/−0
- haskell-fake-user-agent.cabal +3/−3
− HTTP/FakeUserAgent.hs
@@ -1,32 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-module HTTP.FakeUserAgent (getBrowserString) where--import Control.Lens ((^?))-import Data.ByteString.Lazy (ByteString, unpack)-import Data.Char (chr)-import Network.Wreq (get, responseBody)-import Text.HTML.TagSoup (parseTags, innerText, Tag(TagOpen, TagClose), (~/=))--getVersionsList :: [Tag ByteString] -> [Tag ByteString]-getVersionsList tags =- let tags1 = (drop 1 . dropWhile (~/= TagOpen ("div" :: String) [("id", "liste")])) tags in- takeWhile (~/= TagClose ("div" :: String)) tags1--getVersions :: [Tag ByteString] -> [ByteString] -> [ByteString]-getVersions [] accum = reverse accum-getVersions tags accum = - let tags1 = (drop 1 . dropWhile (~/= TagOpen ("li" :: String) [])) tags- match = takeWhile (~/= TagClose ("li" :: String)) tags1- tags2 = (drop 1 . dropWhile (~/= TagClose ("li" :: String))) tags1 in- case match of- [] -> getVersions tags2 accum- _ -> getVersions tags2 ((innerText match):accum)--getBrowserString :: String -> IO String-getBrowserString name = do- resp <- get ("http://useragentstring.com/pages/" ++ name ++ "/")- let Just body = resp ^? responseBody- let tags = parseTags body- let versions = getVersions (getVersionsList tags) []- let v:_ = versions- return $ (map (chr . fromEnum) . unpack) v
+ HTTP/ThirdParty/FakeUserAgent.hs view
@@ -0,0 +1,36 @@+{-# LANGUAGE OverloadedStrings #-}+module HTTP.ThirdParty.FakeUserAgent (getBrowserStrings, getLatestBrowserString) where++import Control.Lens ((^?))+import Data.ByteString.Lazy (ByteString, unpack)+import Data.Char (chr)+import Network.Wreq (get, responseBody)+import Text.HTML.TagSoup (parseTags, innerText, Tag(TagOpen, TagClose), (~/=))++getVersionsList :: [Tag ByteString] -> [Tag ByteString]+getVersionsList tags =+ let tags1 = (drop 1 . dropWhile (~/= TagOpen ("div" :: String) [("id", "liste")])) tags in+ takeWhile (~/= TagClose ("div" :: String)) tags1++getVersions :: [Tag ByteString] -> [ByteString] -> [ByteString]+getVersions [] accum = reverse accum+getVersions tags accum = + let tags1 = (drop 1 . dropWhile (~/= TagOpen ("li" :: String) [])) tags+ match = takeWhile (~/= TagClose ("li" :: String)) tags1+ tags2 = (drop 1 . dropWhile (~/= TagClose ("li" :: String))) tags1 in+ case match of+ [] -> getVersions tags2 accum+ _ -> getVersions tags2 ((innerText match):accum)++getBrowserStrings :: String -> IO [String]+getBrowserStrings name = do+ resp <- get ("http://useragentstring.com/pages/" ++ name ++ "/")+ let Just body = resp ^? responseBody+ let tags = parseTags body+ let versions = getVersions (getVersionsList tags) []+ return $ map ((map (chr . fromEnum) . unpack)) versions++getLatestBrowserString :: String -> IO String+getLatestBrowserString name = do+ latest:strings <- getBrowserStrings name+ return latest
README.md view
@@ -0,0 +1,15 @@+FAKE USER AGENT STRING+----------------------++Very simple library downloading current user agent strings from http://useragentstring.com++HOW TO USE+----------++# getBrowserStrings :: String -> IO [String]++returns a list of user agent strings for a given browser, where browser may be "Chrome", "Firefox", etc. (see http://useragentstring.com for the list of browsers)++# getLatestBrowserString :: String -> IO String++returns a head of the above list
haskell-fake-user-agent.cabal view
@@ -2,7 +2,7 @@ -- further documentation, see http://haskell.org/cabal/users-guide/ name: haskell-fake-user-agent-version: 0.0.1+version: 0.0.2 synopsis: Simple library for retrieving current user agent strings -- description: license: PublicDomain@@ -16,9 +16,9 @@ cabal-version: >=1.10 library- exposed-modules: HTTP.FakeUserAgent+ exposed-modules: HTTP.ThirdParty.FakeUserAgent -- other-modules: other-extensions: OverloadedStrings- build-depends: base >=4.8 && <4.9, lens >=4.14 && <4.15, bytestring >=0.10 && <0.11, wreq >=0.4 && <0.5, tagsoup >=0.13 && <0.14+ build-depends: base >=4.9 && <4.10, lens >=4.14, bytestring >=0.10, wreq >=0.4, tagsoup >=0.13 -- hs-source-dirs: default-language: Haskell2010