A thin wrapper for the Hyperpublic API, which uses
Network.HTTP.Enumerator to fetch results and Data.Aeson to return them
as JSON. The Web.Hyperpublic.Places and Web.Hyperpublic.Offers modules
wrap find
and show
methods of the Places+
(http://www.hyperpublic.com/placesplus) and Geo Deals and Events
(http://www.hyperpublic.com/deals) endpoints, respectively. The next
release of this package will also wrap the create
method of Places+. Full
API documentation can be found at http://developer.hyperpublic.com/.
Web.Hyperpublic.Places and Web.Hyperpublic.Offers export the functions
find
and show
, where each works similarly across the two modules. The
next release of this package will also wrap the create
method of Places+.
Examples (included in the distribution as Examples.hs
):
{-# LANGUAGE OverloadedStrings #-} module Main where import Data.Aeson import Data.ByteString.Char8 () import qualified Data.Map as M import Data.Maybe import Data.Text import qualified Data.Vector as V import Web.Hyperpublic import qualified Web.Hyperpublic.Places as Places import qualified Web.Hyperpublic.Offers as Offers -- Sequence the two examples. main :: IO () main = placeNamesNearHq >> offerDescr -- Find places near Hyperpublic HQ and print the name of each. placeNamesNearHq :: IO () placeNamesNearHq = let json = Places.find auth [( "address" , "416 W 13th St, New York, NY 10014" )] in json >>= putStrLn . show . getNames where getNames (Array arr) = mapMaybe getName $ V.toList arr getName (Object obj) = getTextField obj "display_name" -- Find the offer with id 4e90567c297a200001008db9 and print its description. offerDescr :: IO () offerDescr = let json = Offers.show auth "4e90567c297a200001008db9" in json >>= putStrLn . show . getDescr where getDescr (Object obj) = maybe "" id $ getTextField obj "description" -- Create an authorization record. Get your own credentials at -- http://www.hyperpublic.com/registerapi auth :: HpAuth auth = HpAuth { clientId = "8UufhI6bCKQXKMBn7AUWO67Yq6C8RkfD0BGouTke" , clientSecret = "zdoROY5XRN0clIWsEJyKzHedSK4irYee8jpnOXaP" } -- Extract a text field from an 'Data.Aeson.Object'. getTextField :: Object -> Text -> Maybe Text getTextField obj txt = M.lookup txt obj >>= resultToMaybe . fromJSON where resultToMaybe (Success a) = Just a resultToMaybe (Error _) = Nothing
Documentation
A record for passing around API authorization credentials.