Readme for liblastfm-0.3.2.0

liblastfm

Hackage Build Status Build Status

Complete API interface to last.fm service. Documentation is available in two flavours:

General introduction

liblastfm provides Applicative interface for constructing requests. Also, it handles all machinery needed to prepare request for sending:

Once request is ready, liblastfm may send it and get you back a response. Response format might be:

Installation

To install either use hackage:

% cabal install liblastfm

Or git:

% git clone git@github.com:supki/liblastfm
% cd liblastfm
% cabal install

Usage

Suppose, you need to use tag.search API method. First find it in liblastfm: Tag would be the name of the module and search would be the name of function. Here it is. So import a couple of modules:

ghci> import Network.Lastfm -- a bunch of useful utilities
ghci> import qualified Network.Lastfm.Tag as Tag -- for Tag.search

Now you may you applicative <*> for required and <* or *> for optional parameters to construct desired request:

Tag.search <*> tag "russian-folk" <* limit 3 <*> apiKey "29effec263316a1f8a97f753caaa83e0" <* json

To send constructed request use lastfm:

ghci> lastfm $ Tag.search <*> tag "russian-folk" <* limit 10 <*> apiKey "29effec263316a1f8a97f753caaa83e0" <* json
Just (Object fromList [("results",Object fromList [("tagmatches", ...

How to parse responses is described in wiki.

FAQ

Q: I'm getting the following error. How do I fix it?

> Artist.getInfo <*> artist "Pink Floyd" <*> apiKey "29effec263316a1f8a97f753caaa83e0"

<interactive>:8:27:
    Couldn't match expected type `Data.Text.Lazy.Internal.Text'
                with actual type `[Char]

A: This means you haven't OverloadedStrings extension enabled. To enable it (either one works):

Q: I'm getting the following error. How do I fix it?

> lastfm (Artist.getInfo <*> artist "Pink Floyd" <*> apiKey "29effec263316a1f8a97f753caaa83e0")

<interactive>:13:1:
    No instance for (Network.Lastfm.Response.Supported f0)
      arising from a use of `lastfm'
    The type variable `f0' is ambiguous
    Possible fix: add a type signature that fixes these type variable(s)
    Note: there are several potential instances:
      instance Network.Lastfm.Response.Supported 'XML
        -- Defined at src/Network/Lastfm/Response.hs:66:10
      instance Network.Lastfm.Response.Supported 'JSON
        -- Defined at src/Network/Lastfm/Response.hs:51:10

A: This error message indicates that GHC cannot infer response format for Request. To fix it, add use json or xml helpers, depending on your needs

> lastfm (Artist.getInfo <*> artist "Pink Floyd" <*> apiKey "29effec263316a1f8a97f753caaa83e0" <* json)
Just (Object fromList [("artist" ...
> lastfm (Artist.getInfo <*> artist "Pink Floyd" <*> apiKey "29effec263316a1f8a97f753caaa83e0" <* xml)
"<?xml version=\"1.0\" ...