packages feed

quandl-api 0.1.0.0 → 0.2.0.0

raw patch · 4 files changed

+104/−1 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.Quandl: SearchDoc :: Text -> Maybe Text -> Bool -> Text -> Text -> Day -> Text -> [Text] -> Text -> Text -> UTCTime -> Day -> Text -> SearchDoc
+ Data.Quandl: SearchPage :: Int -> Int -> Int -> [SearchSource] -> [SearchDoc] -> SearchPage
+ Data.Quandl: SearchSource :: Text -> Int -> Text -> Text -> Int -> Text -> SearchSource
+ Data.Quandl: data SearchDoc
+ Data.Quandl: data SearchPage
+ Data.Quandl: data SearchSource
+ Data.Quandl: instance Data SearchDoc
+ Data.Quandl: instance Data SearchPage
+ Data.Quandl: instance Data SearchSource
+ Data.Quandl: instance Eq SearchDoc
+ Data.Quandl: instance Eq SearchPage
+ Data.Quandl: instance Eq SearchSource
+ Data.Quandl: instance FromJSON SearchDoc
+ Data.Quandl: instance FromJSON SearchPage
+ Data.Quandl: instance FromJSON SearchSource
+ Data.Quandl: instance Show SearchDoc
+ Data.Quandl: instance Show SearchPage
+ Data.Quandl: instance Show SearchSource
+ Data.Quandl: instance Typeable SearchDoc
+ Data.Quandl: instance Typeable SearchPage
+ Data.Quandl: instance Typeable SearchSource
+ Data.Quandl: sdCode :: SearchDoc -> Text
+ Data.Quandl: sdColumnNames :: SearchDoc -> [Text]
+ Data.Quandl: sdDescription :: SearchDoc -> Text
+ Data.Quandl: sdDisplayUrl :: SearchDoc -> Maybe Text
+ Data.Quandl: sdFrequency :: SearchDoc -> Text
+ Data.Quandl: sdFromDate :: SearchDoc -> Day
+ Data.Quandl: sdName :: SearchDoc -> Text
+ Data.Quandl: sdPrivate :: SearchDoc -> Bool
+ Data.Quandl: sdSourceCode :: SearchDoc -> Text
+ Data.Quandl: sdSourceName :: SearchDoc -> Text
+ Data.Quandl: sdToDate :: SearchDoc -> Day
+ Data.Quandl: sdUpdatedAt :: SearchDoc -> UTCTime
+ Data.Quandl: sdUrlizeName :: SearchDoc -> Text
+ Data.Quandl: search :: [String] -> Maybe String -> Maybe Int -> Maybe Int -> IO (Maybe SearchPage)
+ Data.Quandl: spCurrentPage :: SearchPage -> Int
+ Data.Quandl: spDocs :: SearchPage -> [SearchDoc]
+ Data.Quandl: spPerPage :: SearchPage -> Int
+ Data.Quandl: spSources :: SearchPage -> [SearchSource]
+ Data.Quandl: spTotalCount :: SearchPage -> Int
+ Data.Quandl: ssCode :: SearchSource -> Text
+ Data.Quandl: ssDatasetsCount :: SearchSource -> Int
+ Data.Quandl: ssDescription :: SearchSource -> Text
+ Data.Quandl: ssHost :: SearchSource -> Text
+ Data.Quandl: ssId :: SearchSource -> Int
+ Data.Quandl: ssName :: SearchSource -> Text

Files

+ CHANGELOG.md view
@@ -0,0 +1,8 @@+quandl-api changes+------------------++0.2.0.0++* Add a function to access the Quandl search API. +  Contributed by mwm / fpcomplete.+
Data/Quandl.hs view
@@ -26,12 +26,18 @@         defaultOptions,         getTableWith, +        -- * Search for a table+        search,+         -- * Datatypes         Options(..),         Frequency(..),         Transformation(..),         Dataset(..),         Metadata(..),+        SearchSource(..),+        SearchDoc(..),+        SearchPage(..),          -- * Low-level functions         downloadJSON,@@ -115,6 +121,40 @@         daFrequency     :: T.Text               -- ^ The frequency of the returned data (daily, monthly, etc)     } deriving (Eq, Show, Data, Typeable) +-- | Results from Search calls.+data SearchSource = SearchSource {+        ssName          :: T.Text,              -- ^ Name of the source+        ssId            :: Int,                 -- ^ Source ID+        ssDescription   :: T.Text,              -- ^ Description of source+        ssHost          :: T.Text,              -- ^ Source Host site+        ssDatasetsCount :: Int,                 -- ^ count of datasets on host+        ssCode          :: T.Text               -- ^ Code to use in API.+    } deriving (Eq, Show, Data, Typeable)++data SearchDoc = SearchDoc {+        sdSourceCode       :: T.Text,           -- ^ Source code to use in API.+        sdDisplayUrl       :: Maybe T.Text,     -- ^ URL to fetch original data from.+        sdPrivate          :: Bool,             -- ^ Whether or not data is private+        sdUrlizeName       :: T.Text,           -- ^ Url encoded doc name.+        sdName             :: T.Text,           -- ^ Doc name.+        sdFromDate         :: Day,              -- ^ First date in source.+        sdDescription      :: T.Text,           -- ^ Description of data.+        sdColumnNames      :: [T.Text],         -- ^ Names of columns in data.+        sdFrequency        :: T.Text,           -- ^ Frequency of updates.+        sdSourceName       :: T.Text,           -- ^ Name of source database.+        sdUpdatedAt        :: UTCTime,          -- ^ Time of most recent updated.+        sdToDate           :: Day,              -- ^ Last day data is available.+        sdCode             :: T.Text            -- ^ Doc code to use in API.+    } deriving (Show, Eq, Data, Typeable)++data SearchPage = SearchPage {+        spTotalCount  :: Int,                   -- ^ Number of results available+        spCurrentPage :: Int,                   -- ^ Current page of results+        spPerPage     :: Int,                   -- ^ Results per page+        spSources     :: [SearchSource],        -- ^ Metadata for sources.+        spDocs        :: [SearchDoc]            -- ^ Actual documents found.+    } deriving (Eq, Show, Data, Typeable)+ ------------------------------------------------------------------------------- -- JSON Parsers @@ -165,6 +205,42 @@         v .: "frequency"     parseJSON _ = mzero +instance FromJSON SearchSource where+    parseJSON (Object v) = SearchSource <$>+        v .: "name" <*>+        v .: "id" <*>+        v .: "description" <*>+        v .: "host" <*>+        v .: "datasets_count" <*>+        v .: "code"+    parseJSON _ = mzero++instance FromJSON SearchDoc where+    parseJSON (Object v) = SearchDoc <$>+        v .: "source_code" <*>+        v .: "display_url" <*>+        v .: "private" <*>+        v .: "urlize_name" <*>+        v .: "name" <*>+        (asDay <$> v .:"from_date") <*>+        v .: "description" <*>+        v .: "column_names" <*>+        v .: "frequency" <*>+        v .: "source_name" <*>+        (asUTCTime <$> v .: "updated_at" ) <*>+        (asDay <$> v .: "to_date") <*>+        v .: "code"+    parseJSON _ = mzero++instance FromJSON SearchPage where+    parseJSON (Object v) = SearchPage <$>+        v .: "total_count" <*>+        v .: "current_page" <*>+        v .: "per_page" <*>+        v .: "sources" <*>+        v .: "docs"+    parseJSON _ = mzero+ ------------------------------------------------------------------------------- -- Public functions @@ -265,3 +341,19 @@     let toItem (source, table, column) = map toUpper source ++ "." ++ map toUpper table ++ (case column of { Nothing -> ""; Just c -> "." ++ show c })     in  intercalate "," $ map toItem items +-- | Search for terms, returning given page+search :: [String]                     -- ^ List of search terms+          -> Maybe String              -- ^ Auth Token+          -> Maybe Int                 -- ^ Number to display per page or Nothing+          -> Maybe Int                 -- ^ Page number to display or Nothing+          -> IO (Maybe SearchPage)     -- ^ Search results from Quandl, or Nothing if parsing failed.+search terms token per_page page = decode' <$> simpleHttp makeUrl where+  query = concatMap param [Just ("query", intercalate "+" terms),+                           fmap (\t -> ("auth_token", t)) token,+                           fmap (\p -> ("page", show p))  page,+                           fmap (\p -> ("per_page", show p)) per_page]+  param (Just (k, v)) = [(BC.pack k, Just $ BC.pack v)]+  param Nothing       = []+  makeUrl = BC.unpack $ toByteString $+            fromByteString "http://www.quandl.com/api/v1/datasets.json" <>+            renderQueryBuilder True query
README.md view
@@ -12,10 +12,12 @@ The `getTable` function is all you need to download tables. To get all data points for the dataset FRED/GDP: +    import Data.Quandl     getTable "FRED" "GDP" Nothing  Registered users should include their auth_token, like this: +    import Data.Quandl     getTable "FRED" "GDP" (Just "dsahFHUiewjjd")  ## Advanced Usage
quandl-api.cabal view
@@ -1,5 +1,5 @@ name:                quandl-api-version:             0.1.0.0+version:             0.2.0.0 copyright:           (c) 2014 Peter van den Brand homepage:            https://github.com/pvdbrand/quandl-api bug-reports:         https://github.com/pvdbrand/quandl-api/issues@@ -16,6 +16,7 @@  extra-source-files:     README.md+    CHANGELOG.md  source-repository head     type:     git