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. (-:
gem install 'marvel_api'
or add gem 'marvel_api'
to your Gemfile and bundle
.
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
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.
GET /v1/public/characters
@client.characters
@client.characters(name: 'Thanos')
@client.characters(nameStartsWith: 'Th', orderBy: 'modified')
GET /v1/public/characters/{characterId}
@client.character(1009652)
GET /v1/public/characters/{characterId}/comics
@client.character_comics(1009652)
@client.character_comics(1009652, titleStartsWith: 'Infinity', hasDigitalIssue: true)
GET /v1/public/characters/{characterId}/events
@client.character_events(1009652)
@client.character_events(1009652, name: 'Infinity Gauntlet')
GET /v1/public/characters/{characterId}/series
@client.character_series(1009652)
@client.character_series(1009652, contains: 'hardcover')
GET /v1/public/characters/{characterId}/stories
@client.character_stories(1009652)
@client.character_stories(1009652, limit: 50)
GET /v1/public/comics
@client.comics
@client.comics(title: 'Daredevil')
@client.comics(startYear: 1950, issueNumber: 1)
GET /v1/public/comics/{comicId}
@client.comic(29380)
GET /v1/public/comics/{comicId}/characters
@client.comic_characters(34249)
@client.comic_characters(34249, orderBy: 'name')
GET /v1/public/comics/{comicId}/creators
@client.comic_creators(34249)
@client.comic_creators(34249, lastNameStartsWith: 'V')
GET /v1/public/comics/{comicId}/events
@client.comic_events(27272)
@client.comic_events(27272, orderBy: '-startDate')
GET /v1/public/comics/{comicId}/stories
@client.comic_stories(27272)
@client.comic_stories(27272, creators: [600, 801])
GET /v1/public/creators
@client.creators
@client.creators(firstName: 'Frank', lastName: 'Miller')
@client.creators(lastNameStartsWith: 'Mo', limit: 20, offset: 20)
GET /v1/public/creators/{creatorId}
@client.creator(15)
GET /v1/public/creators/{creatorId}/comics
@client.creator_comics(15)
@client.creator_comics(15, format: 'trade paperback')
GET /v1/public/creators/{creatorId}/events
@client.creator_events(30)
@client.creator_events(30, nameStartsWith: 'Civil')
GET /v1/public/creators/{creatorId}/series
@client.creator_series(30)
@client.creator_series(30, seriesType: 'limited')
GET /v1/public/creators/{creatorId}/stories
@client.creator_stories(30)
@client.creator_stories(30, limit: 40, offset: 7750)
GET /v1/public/events
@client.events
@client.events(name: 'Infinity Gauntlet')
@client.events(characters: [1009156, 1009652])
GET /v1/public/events/{eventId}
@client.event(227)
GET /v1/public/events/{eventId}/characters
@client.event_characters(227)
@client.event_characters(227, modifiedSince: '2014-04-29')
GET /v1/public/events/{eventId}/comics
@client.event_comics(227)
@client.event_comics(227, hasDigitalIssue: true, orderBy: 'onsaleDate')
GET /v1/public/events/{eventId}/creators
@client.event_creators(227)
@@client.event_creators(227, lastNameStartsWith: 'Lar')
GET /v1/public/events/{eventId}/series
@client.event_series(227)
@client.event_series(227, startYear: 1995, seriesType: 'limited')
GET /v1/public/events/{eventId}/stories
@client.event_stories(227)
@client.event_stories(227, orderBy: 'id', limit: 30, offset: 20)
GET /v1/public/series
@client.series
@client.series(title: 'Uncanny X-Men')
@client.series(titleStartsWith: 'Astonishing', orderBy: 'startYear', limit: 100)
GET /v1/public/series/{seriesId}
@client.serie(354)
GET /v1/public/series/{seriesId}/characters
@client.series_characters(354)
@client.series_characters(354, nameStartsWith: 'Iron')
GET /v1/public/series/{seriesId}/comics
@client.series_comics(354)
@client.series_comics(354, issueNumber: 1)
GET /v1/public/series/{seriesId}/creators
@client.series_creators(354)
@client.series_creators(354, lastName: 'Kirby')
GET /v1/public/series/{seriesId}/events
@client.series_events(354)
@client.series_events(354, orderBy: 'startDate')
GET /v1/public/series/{seriesId}/stories
@client.series_stories(354)
@client.series_stories(354, modifiedSince: '2013-06-01')
GET /v1/public/stories
@client.stories
@client.stories(creators: 15)
@client.stories(characters: [1009156, 1009652], orderBy: '-modified')
GET /v1/public/stories/{storyId}
@client.story(6320)
GET /v1/public/stories/{storyId}/characters
@client.story_characters(14410)
@client.story_characters(14410, nameStartsWith: 'D')
GET /v1/public/stories/{storyId}/comics
@client.story_comics(126)
@client.story_comics(126, format: 'trade paperback')
GET /v1/public/stories/{storyId}/creators
@client.story_creators(126)
@client.story_creators(126, lastNameStartsWith: 'S')
GET /v1/public/stories/{storyId}/events
@client.story_events(12964)
@client.story_events(12964, orderBy: 'name')
GET /v1/public/stories/{storyId}/series
@client.story_series(126)
@client.story_series(126, titleStartsWith: 'Infinity')
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.
Copyright (c) 2014 Rahul Horé. See LICENSE.txt for further details.