liblastfm: Lastfm API interface

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Provides interface to Lastfm REST API, supports XML and JSON formats.


[Skip to Readme]

Properties

Versions 0.0.1.0, 0.0.2.1, 0.0.2.2, 0.0.3.0, 0.0.3.1, 0.0.3.2, 0.0.3.3, 0.0.3.4, 0.0.3.5, 0.0.3.6, 0.0.3.7, 0.0.3.8, 0.1.0.0, 0.1.1.0, 0.1.1.1, 0.1.1.2, 0.2.0.0, 0.3.0.0, 0.3.2.0, 0.4.0.0, 0.4.0.0, 0.4.1.0, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.7.0
Change log CHANGELOG.md
Dependencies aeson, base (>=4 && <5), bytestring, cereal, containers (>=0.5), contravariant, crypto-api, http-client (>=0.3), http-client-tls (>=0.2), network, profunctors, pureMD5, semigroups, text, void, xml-conduit (>=1.1) [details]
License MIT
Author Matvey Aksenov, Dmitry Malikov
Maintainer Matvey Aksenov <matvey.aksenov@gmail.com>
Category Network APIs
Source repo head: git clone https://github.com/supki/liblastfm
Uploaded by MatveyAksenov at 2014-06-12T07:55:38Z

Modules

Flags

Manual Flags

NameDescriptionDefault
test-api

a real API test

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for liblastfm-0.4.0.0

[back to package description]

liblastfm

Hackage Build Status Build Status

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

Introduction

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

Once request is ready, liblastfm can 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:

>>> import           Network.Lastfm            -- a bunch of useful utilities
>>> 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:

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

Wiki describes how to parse responses.

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 (Show (IO (Either LastfmError r0)))
      arising from a use of `print'
    Possible fix:
      add an instance declaration for (Show (IO (Either LastfmError r0)))
    In the first argument of `print', namely `it'
    In a stmt of an interactive GHCi command: print it

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

A note on testing

To test Lastfm API compatibility (api test suite)—specifically, authentication requiring examples—you will need to set HASKELL_LIBLASTFM_APIKEY, HASKELL_LIBLASTFM_SESSIONKEY, and HASKELL_LIBLASTFM_SECRET environment variables to your api key, session key, and secret respectively; for example (bash):

export HASKELL_LIBLASTFM_APIKEY="__API_KEY__"
export HASKELL_LIBLASTFM_SESSIONKEY="__SESSION_KEY__"
export HASKELL_LIBLASTFM_SECRET="__SECRET__"

Please, consult Lastfm API documentation and examples/*-authentication.hs examples if you don't know where to get your credentials.