O-I / marvel

Ruby wrapper for the Marvel API
https://rubygems.org/gems/marvel_api
MIT License
15 stars 5 forks source link

marvel_api

Build Status Coverage Status

Ruby bindings for the Marvel API. In active development. Feel free to contribute! Need Ruby 1.9.2 support or don't like Faraday? Check out the marvelite gem for an alternative. (-:

Installation

gem install 'marvel_api' or add gem 'marvel_api' to your Gemfile and bundle.

Configuration

You'll need an API key — get yours here. Configure like so:

@client = Marvel::Client.new

@client.configure do |config|
  config.api_key = 'YOUR_API_KEY'
  config.private_key = 'YOUR_PRIVATE_KEY'
end

Usage

Descriptions and examples of the supported actions are below. Note, all methods currently return an Array of Hashie::Mash objects if successful; otherwise, a Marvel::Response::Error is returned. For a more detailed explanation of available actions and an exhaustive list of acceptable query parameters, see Marvel's own developer documentation. Each method described below links to the associated call in Marvel's interactive API tester.

Characters

@client.characters
@client.characters(name: 'Thanos')
@client.characters(nameStartsWith: 'Th', orderBy: 'modified')
@client.character(1009652)
@client.character_comics(1009652)
@client.character_comics(1009652, titleStartsWith: 'Infinity', hasDigitalIssue: true)
@client.character_events(1009652)
@client.character_events(1009652, name: 'Infinity Gauntlet')
@client.character_series(1009652)
@client.character_series(1009652, contains: 'hardcover')
@client.character_stories(1009652)
@client.character_stories(1009652, limit: 50)

Comics

@client.comics
@client.comics(title: 'Daredevil')
@client.comics(startYear: 1950, issueNumber: 1)
@client.comic(29380)
@client.comic_characters(34249)
@client.comic_characters(34249, orderBy: 'name')
@client.comic_creators(34249)
@client.comic_creators(34249, lastNameStartsWith: 'V')
@client.comic_events(27272)
@client.comic_events(27272, orderBy: '-startDate')
@client.comic_stories(27272)
@client.comic_stories(27272, creators: [600, 801])

Creators

@client.creators
@client.creators(firstName: 'Frank', lastName: 'Miller')
@client.creators(lastNameStartsWith: 'Mo', limit: 20, offset: 20)
@client.creator(15)
@client.creator_comics(15)
@client.creator_comics(15, format: 'trade paperback')
@client.creator_events(30)
@client.creator_events(30, nameStartsWith: 'Civil')
@client.creator_series(30)
@client.creator_series(30, seriesType: 'limited')
@client.creator_stories(30)
@client.creator_stories(30, limit: 40, offset: 7750)

Events

@client.events
@client.events(name: 'Infinity Gauntlet')
@client.events(characters: [1009156, 1009652])
@client.event(227)
@client.event_characters(227)
@client.event_characters(227, modifiedSince: '2014-04-29')
@client.event_comics(227)
@client.event_comics(227, hasDigitalIssue: true, orderBy: 'onsaleDate')
@client.event_creators(227)
@@client.event_creators(227, lastNameStartsWith: 'Lar')
@client.event_series(227)
@client.event_series(227, startYear: 1995, seriesType: 'limited')
@client.event_stories(227)
@client.event_stories(227, orderBy: 'id', limit: 30, offset: 20)

Series

@client.series
@client.series(title: 'Uncanny X-Men')
@client.series(titleStartsWith: 'Astonishing', orderBy: 'startYear', limit: 100)
@client.serie(354)
@client.series_characters(354)
@client.series_characters(354, nameStartsWith: 'Iron')
@client.series_comics(354)
@client.series_comics(354, issueNumber: 1)
@client.series_creators(354)
@client.series_creators(354, lastName: 'Kirby')
@client.series_events(354)
@client.series_events(354, orderBy: 'startDate')
@client.series_stories(354)
@client.series_stories(354, modifiedSince: '2013-06-01')

Stories

@client.stories
@client.stories(creators: 15)
@client.stories(characters: [1009156, 1009652], orderBy: '-modified')
@client.story(6320)
@client.story_characters(14410)
@client.story_characters(14410, nameStartsWith: 'D')
@client.story_comics(126)
@client.story_comics(126, format: 'trade paperback')
@client.story_creators(126)
@client.story_creators(126, lastNameStartsWith: 'S')
@client.story_events(12964)
@client.story_events(12964, orderBy: 'name')
@client.story_series(126)
@client.story_series(126, titleStartsWith: 'Infinity')

Etags

Most successful responses contain an etag attribute that can be used to check whether the content of the requested resource has remained the same since the last request.

thanos = @client.character(1009652)
@client.character(1009652, etag: thanos.etag)

If the content has not changed, a Marvel::Response::Error with code 304 and status 'Not Modified' is returned and you can use your cached content knowing that it is up-to-date and that you saved some bandwidth. If the content has changed or the Etag is invalid, the resource you requested will be returned.

Contributing to marvel_api

Copyright

Copyright (c) 2014 Rahul Horé. See LICENSE.txt for further details.