marvelite 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/README.md +26 -6
- data/Rakefile +5 -0
- data/lib/marvelite/api/client.rb +45 -7
- data/lib/marvelite/api/response.rb +7 -0
- data/lib/marvelite/version.rb +1 -1
- data/spec/fixtures/character.json +402 -0
- data/spec/fixtures/character_comics.json +3320 -0
- data/spec/fixtures/character_events.json +9105 -0
- data/spec/fixtures/character_series.json +5200 -0
- data/spec/fixtures/character_stories.json +1664 -0
- data/spec/fixtures/characters.json +3175 -0
- data/spec/marvelite/api/client_spec.rb +169 -16
- data/spec/spec_helper.rb +36 -1
- metadata +29 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcf2ccb0ede4085ab09804bc5d5cf1510d75a382
|
4
|
+
data.tar.gz: 7ade97ec9ff11f4880ce79ee2ca4a4751cf9eb1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0284135f3777d78c31ecd91dcb3f2f2c15d2744cfa28a21286211a03f5ec8f60f84625c873d16d12d1483ec537524ffb1498512df6ef9e88bede7f683f71d79
|
7
|
+
data.tar.gz: 151a57db1addd05f107654ca8b504cd199060432df8b714dfd4374be79e4634d117dc5a6e8671ab4dc65299e22a23a608f05c9f16b962da5fa1bab2d9ca8718d
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
## Changelog
|
2
|
+
|
3
|
+
### 0.0.3
|
4
|
+
* Adds basic testing setup
|
5
|
+
* Adds the ability to retrieve:
|
6
|
+
* character comics by passing a character name instead of a numeric id
|
7
|
+
* character events by passing a character name instead of a numeric id
|
8
|
+
* character series by passing a character name instead of a numeric id
|
9
|
+
* character stories by passing a character name instead of a numeric id
|
10
|
+
|
11
|
+
### 0.0.2
|
12
|
+
* Adds the following endpoints:
|
13
|
+
* retrieve character comics by connecting to the API's `/characters/:id/comics` endpoint
|
14
|
+
* retrieve character events by connecting to the API's `/characters/:id/events` endpoint
|
15
|
+
* retrieve character series by connecting to the API's `/characters/:id/series` endpoint
|
16
|
+
* retrieve character stories by connecting to the API's `/characters/:id/stories` endpoint
|
17
|
+
|
18
|
+
### 0.0.1
|
19
|
+
* Initial release and just two endpoints:
|
20
|
+
* retrieve characters by connecting to the API's `/characters` endpoint
|
21
|
+
* retrieve a character by connecting to the API's `/characters/:id` endpoint
|
data/README.md
CHANGED
@@ -33,7 +33,10 @@ Please register first in the [Marvel Comics Developer Portal](http://developer.m
|
|
33
33
|
### Instantiate a client
|
34
34
|
|
35
35
|
```ruby
|
36
|
-
client = Marvelite::API::Client.new(
|
36
|
+
client = Marvelite::API::Client.new(
|
37
|
+
:public_key => 'abcd1234',
|
38
|
+
:private_key => '5678efgh'
|
39
|
+
)
|
37
40
|
```
|
38
41
|
|
39
42
|
### Methods
|
@@ -69,28 +72,38 @@ client.character('Spider-Man')
|
|
69
72
|
|
70
73
|
#### character_comics
|
71
74
|
|
72
|
-
Fetches a list of comics containing a specific character. Requires a character id value (integer). Accepts optional params.
|
75
|
+
Fetches a list of comics containing a specific character. Requires a character id value (integer or string). Accepts optional params.
|
73
76
|
|
74
77
|
```ruby
|
75
78
|
client.character_comics(1009610)
|
79
|
+
client.character_comics('Spider-Man')
|
76
80
|
client.character_comics(
|
77
81
|
1009610,
|
78
82
|
{ :format => 'graphic novel', :limit => 10, :orderBy => 'title' }
|
79
83
|
)
|
84
|
+
client.character_comics(
|
85
|
+
'Spider-Man',
|
86
|
+
{ :format => 'graphic novel', :limit => 10, :orderBy => 'title' }
|
87
|
+
)
|
80
88
|
```
|
81
89
|
|
82
90
|
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getComicsCharacterCollection_get_2) for a complete list of params that you can pass to the `#character_comics` method.
|
83
91
|
|
84
92
|
#### character_events
|
85
93
|
|
86
|
-
Fetches a list of events in which a specific character appears. Requires a character id value (integer). Accepts optional params.
|
94
|
+
Fetches a list of events in which a specific character appears. Requires a character id value (integer or string). Accepts optional params.
|
87
95
|
|
88
96
|
```ruby
|
89
97
|
client.character_events(1009610)
|
98
|
+
client.character_events('Spider-Man')
|
90
99
|
client.character_events(
|
91
100
|
1009610,
|
92
101
|
{ :limit => 10, :orderBy => 'name' }
|
93
102
|
)
|
103
|
+
client.character_events(
|
104
|
+
'Spider-Man',
|
105
|
+
{ :limit => 10, :orderBy => 'name' }
|
106
|
+
)
|
94
107
|
```
|
95
108
|
|
96
109
|
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getCharacterEventsCollection_get_3) for a complete list of params that you can pass to the `#character_events` method.
|
@@ -98,14 +111,19 @@ See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#
|
|
98
111
|
|
99
112
|
#### character_series
|
100
113
|
|
101
|
-
Fetches a list of comic series in which a specific character appears. Requires a character id value (integer). Accepts optional params.
|
114
|
+
Fetches a list of comic series in which a specific character appears. Requires a character id value (integer or string). Accepts optional params.
|
102
115
|
|
103
116
|
```ruby
|
104
117
|
client.character_series(1009610)
|
118
|
+
client.character_series('Spider-Man')
|
105
119
|
client.character_series(
|
106
120
|
1009610,
|
107
121
|
{ :seriesType => 'ongoing', :limit => 10, :orderBy => 'title' }
|
108
122
|
)
|
123
|
+
client.character_series(
|
124
|
+
'Spider-Man',
|
125
|
+
{ :seriesType => 'ongoing', :limit => 10, :orderBy => 'title' }
|
126
|
+
)
|
109
127
|
```
|
110
128
|
|
111
129
|
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getCharacterSeriesCollection_get_4) for a complete list of params that you can pass to the `#character_series` method.
|
@@ -113,18 +131,20 @@ See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#
|
|
113
131
|
|
114
132
|
#### character_stories
|
115
133
|
|
116
|
-
Fetches a list of comic stories featuring a specific character. Requires a character id value (integer). Accepts optional params.
|
134
|
+
Fetches a list of comic stories featuring a specific character. Requires a character id value (integer or string). Accepts optional params.
|
117
135
|
|
118
136
|
```ruby
|
119
137
|
client.character_stories(1009610)
|
138
|
+
client.character_stories('Spider-Man')
|
120
139
|
client.character_stories(1009610, { :limit => 10, :offset => 20 })
|
140
|
+
client.character_stories('Spider-Man', { :limit => 10, :offset => 20 })
|
121
141
|
```
|
122
142
|
|
123
143
|
See the [Marvel Comics Interactive API Tester](http://developer.marvel.com/docs#!/public/getCharacterStoryCollection_get_5) for a complete list of params that you can pass to the `#character_stories` method.
|
124
144
|
|
125
145
|
## Responses
|
126
146
|
|
127
|
-
All requests to the API, return a `Marvelite::API::Response` object
|
147
|
+
All requests to the API, return a `Marvelite::API::Response` object if successful or a `Marvelite::API::ErrorResponse` if API response returns an error. These objects are nothing more than the raw API response enhanced with Hashie methods.
|
128
148
|
|
129
149
|
This way you gain several adavantages to manipulate the response, like:
|
130
150
|
|
data/Rakefile
CHANGED
data/lib/marvelite/api/client.rb
CHANGED
@@ -18,38 +18,59 @@ module Marvelite
|
|
18
18
|
|
19
19
|
def characters(query_params = {})
|
20
20
|
response = self.class.get("/#{api_version}/#{router.characters_path}", :query => params(query_params))
|
21
|
-
|
21
|
+
build_response_object(response)
|
22
22
|
end
|
23
23
|
|
24
24
|
def character(value)
|
25
25
|
by_name = value.is_a?(String) ? true : false
|
26
26
|
response = if by_name
|
27
|
-
|
27
|
+
find_character_by_name(value)
|
28
28
|
else
|
29
29
|
self.class.get("/#{api_version}/#{router.character_path(value)}", :query => params)
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
build_response_object(response)
|
33
33
|
end
|
34
34
|
|
35
35
|
def character_comics(id, query_params = {})
|
36
|
+
if id.is_a?(String)
|
37
|
+
character = find_character_by_name(id)
|
38
|
+
return false unless character
|
39
|
+
id = character.id
|
40
|
+
end
|
41
|
+
|
36
42
|
response = self.class.get("/#{api_version}/#{router.character_comics_path(id)}", :query => params(query_params))
|
37
|
-
|
43
|
+
build_response_object(response)
|
38
44
|
end
|
39
45
|
|
40
46
|
def character_events(id, query_params = {})
|
47
|
+
if id.is_a?(String)
|
48
|
+
character = find_character_by_name(id)
|
49
|
+
return false unless character
|
50
|
+
id = character.id
|
51
|
+
end
|
41
52
|
response = self.class.get("/#{api_version}/#{router.character_events_path(id)}", :query => params(query_params))
|
42
|
-
|
53
|
+
build_response_object(response)
|
43
54
|
end
|
44
55
|
|
45
56
|
def character_series(id, query_params = {})
|
57
|
+
if id.is_a?(String)
|
58
|
+
character = find_character_by_name(id)
|
59
|
+
return false unless character
|
60
|
+
id = character.id
|
61
|
+
end
|
46
62
|
response = self.class.get("/#{api_version}/#{router.character_series_path(id)}", :query => params(query_params))
|
47
|
-
|
63
|
+
build_response_object(response)
|
48
64
|
end
|
49
65
|
|
50
66
|
def character_stories(id, query_params = {})
|
67
|
+
if id.is_a?(String)
|
68
|
+
character = find_character_by_name(id)
|
69
|
+
return false unless character
|
70
|
+
id = character.id
|
71
|
+
end
|
51
72
|
response = self.class.get("/#{api_version}/#{router.character_stories_path(id)}", :query => params(query_params))
|
52
|
-
|
73
|
+
build_response_object(response)
|
53
74
|
end
|
54
75
|
|
55
76
|
private
|
@@ -67,6 +88,23 @@ module Marvelite
|
|
67
88
|
Time.now.to_i
|
68
89
|
end
|
69
90
|
end
|
91
|
+
|
92
|
+
def find_character_by_name(name)
|
93
|
+
response = self.characters(:name => name)
|
94
|
+
return false unless response[:data][:results].size > 0
|
95
|
+
|
96
|
+
response.id = response[:data][:results][0][:id]
|
97
|
+
response
|
98
|
+
end
|
99
|
+
|
100
|
+
def build_response_object(response)
|
101
|
+
case response["code"]
|
102
|
+
when 200
|
103
|
+
Response.new(response)
|
104
|
+
else
|
105
|
+
ErrorResponse.new(response)
|
106
|
+
end
|
107
|
+
end
|
70
108
|
end
|
71
109
|
end
|
72
110
|
end
|
@@ -6,5 +6,12 @@ module Marvelite
|
|
6
6
|
include Hashie::Extensions::MethodAccess
|
7
7
|
include Hashie::Extensions::IndifferentAccess
|
8
8
|
end
|
9
|
+
|
10
|
+
class ErrorResponse < Hash
|
11
|
+
include Hashie::Extensions::MergeInitializer
|
12
|
+
include Hashie::Extensions::KeyConversion
|
13
|
+
include Hashie::Extensions::MethodAccess
|
14
|
+
include Hashie::Extensions::IndifferentAccess
|
15
|
+
end
|
9
16
|
end
|
10
17
|
end
|
data/lib/marvelite/version.rb
CHANGED
@@ -0,0 +1,402 @@
|
|
1
|
+
{
|
2
|
+
"code": 200,
|
3
|
+
"status": "Ok",
|
4
|
+
"etag": "fc7e1550fb882c0f509568d508e1864742e7dbdb",
|
5
|
+
"data": {
|
6
|
+
"offset": 0,
|
7
|
+
"limit": 20,
|
8
|
+
"total": 1,
|
9
|
+
"count": 1,
|
10
|
+
"results": [
|
11
|
+
{
|
12
|
+
"id": 1009610,
|
13
|
+
"name": "Spider-Man",
|
14
|
+
"description": "Bitten by a radioactive spider, high school student Peter Parker gained the speed, strength and powers of a spider. Adopting the name Spider-Man, Peter hoped to start a career using his new abilities. Taught that with great power comes great responsibility, Spidey has vowed to use his powers to help people.",
|
15
|
+
"modified": "2013-10-24T13:52:13-0400",
|
16
|
+
"thumbnail": {
|
17
|
+
"path": "http://i.annihil.us/u/prod/marvel/i/mg/3/50/526548a343e4b",
|
18
|
+
"extension": "jpg"
|
19
|
+
},
|
20
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/characters/1009610",
|
21
|
+
"comics": {
|
22
|
+
"available": 2576,
|
23
|
+
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1009610/comics",
|
24
|
+
"items": [
|
25
|
+
{
|
26
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/43495",
|
27
|
+
"name": "A+X (2012) #2"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/320",
|
31
|
+
"name": "Actor Presents Spider-Man and the Incredible Hulk (2003) #1"
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/30885",
|
35
|
+
"name": "Age of Heroes (Trade Paperback)"
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/37257",
|
39
|
+
"name": "Alias (2003) #10"
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/37262",
|
43
|
+
"name": "Alias (2003) #15"
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/37255",
|
47
|
+
"name": "Alias Omnibus (Hardcover)"
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/12637",
|
51
|
+
"name": "Alpha Flight (1983) #1"
|
52
|
+
},
|
53
|
+
{
|
54
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/12668",
|
55
|
+
"name": "Alpha Flight (1983) #127"
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/6233",
|
59
|
+
"name": "Alpha Flight Classic Vol. 1 (Trade Paperback)"
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/16926",
|
63
|
+
"name": "Amazing Fantasy (1962) #15"
|
64
|
+
},
|
65
|
+
{
|
66
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/16214",
|
67
|
+
"name": "Amazing Fantasy Omnibus (Hardcover)"
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/5286",
|
71
|
+
"name": "Amazing Spider-Girl (2006)"
|
72
|
+
},
|
73
|
+
{
|
74
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/16151",
|
75
|
+
"name": "Amazing Spider-Girl (2006) #11"
|
76
|
+
},
|
77
|
+
{
|
78
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/13519",
|
79
|
+
"name": "Amazing Spider-Girl Vol. 1: Whatever Happened to the Daughter of Spider-Man (Trade Paperback)"
|
80
|
+
},
|
81
|
+
{
|
82
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/17305",
|
83
|
+
"name": "Amazing Spider-Girl Vol. 2: Comes the Carnage! (Trade Paperback)"
|
84
|
+
},
|
85
|
+
{
|
86
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/6481",
|
87
|
+
"name": "Amazing Spider-Man (1963)"
|
88
|
+
},
|
89
|
+
{
|
90
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/6482",
|
91
|
+
"name": "Amazing Spider-Man (1963) #1"
|
92
|
+
},
|
93
|
+
{
|
94
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/37894",
|
95
|
+
"name": "Amazing Spider-Man (1999) #1"
|
96
|
+
},
|
97
|
+
{
|
98
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/37895",
|
99
|
+
"name": "Amazing Spider-Man (1999) #2"
|
100
|
+
},
|
101
|
+
{
|
102
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/comics/6593",
|
103
|
+
"name": "Amazing Spider-Man (1963) #2"
|
104
|
+
}
|
105
|
+
],
|
106
|
+
"returned": 20
|
107
|
+
},
|
108
|
+
"series": {
|
109
|
+
"available": 530,
|
110
|
+
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1009610/series",
|
111
|
+
"items": [
|
112
|
+
{
|
113
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/16450",
|
114
|
+
"name": "A+X (2012 - Present)"
|
115
|
+
},
|
116
|
+
{
|
117
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/458",
|
118
|
+
"name": "Actor Presents Spider-Man and the Incredible Hulk (2003)"
|
119
|
+
},
|
120
|
+
{
|
121
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/10235",
|
122
|
+
"name": "Age of Heroes (2011)"
|
123
|
+
},
|
124
|
+
{
|
125
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/672",
|
126
|
+
"name": "Alias (2003)"
|
127
|
+
},
|
128
|
+
{
|
129
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/13383",
|
130
|
+
"name": "Alias Omnibus (2006)"
|
131
|
+
},
|
132
|
+
{
|
133
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/2116",
|
134
|
+
"name": "Alpha Flight (1983 - 1994)"
|
135
|
+
},
|
136
|
+
{
|
137
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/1983",
|
138
|
+
"name": "Alpha Flight Classic Vol. 1 (2007)"
|
139
|
+
},
|
140
|
+
{
|
141
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/2987",
|
142
|
+
"name": "Amazing Fantasy (1962)"
|
143
|
+
},
|
144
|
+
{
|
145
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/2707",
|
146
|
+
"name": "Amazing Fantasy Omnibus (2007)"
|
147
|
+
},
|
148
|
+
{
|
149
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/1126",
|
150
|
+
"name": "Amazing Spider-Girl (2006 - 2009)"
|
151
|
+
},
|
152
|
+
{
|
153
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/2234",
|
154
|
+
"name": "Amazing Spider-Girl Vol. 1: Whatever Happened to the Daughter of Spider-Man (2007)"
|
155
|
+
},
|
156
|
+
{
|
157
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/3101",
|
158
|
+
"name": "Amazing Spider-Girl Vol. 2: Comes the Carnage! (2007)"
|
159
|
+
},
|
160
|
+
{
|
161
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/1987",
|
162
|
+
"name": "Amazing Spider-Man (1963 - 1998)"
|
163
|
+
},
|
164
|
+
{
|
165
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/454",
|
166
|
+
"name": "Amazing Spider-Man (1999 - 2013)"
|
167
|
+
},
|
168
|
+
{
|
169
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/9802",
|
170
|
+
"name": "Amazing Spider-Man Annual (2010)"
|
171
|
+
},
|
172
|
+
{
|
173
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/5958",
|
174
|
+
"name": "Amazing Spider-Man Annual (2008 - Present)"
|
175
|
+
},
|
176
|
+
{
|
177
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/13205",
|
178
|
+
"name": "Amazing Spider-Man Annual (2010 - Present)"
|
179
|
+
},
|
180
|
+
{
|
181
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/2984",
|
182
|
+
"name": "Amazing Spider-Man Annual (1964 - Present)"
|
183
|
+
},
|
184
|
+
{
|
185
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/5376",
|
186
|
+
"name": "Amazing Spider-Man Family (2008 - 2009)"
|
187
|
+
},
|
188
|
+
{
|
189
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/series/9917",
|
190
|
+
"name": "Amazing Spider-Man MGC (2010)"
|
191
|
+
}
|
192
|
+
],
|
193
|
+
"returned": 20
|
194
|
+
},
|
195
|
+
"stories": {
|
196
|
+
"available": 4164,
|
197
|
+
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1009610/stories",
|
198
|
+
"items": [
|
199
|
+
{
|
200
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/483",
|
201
|
+
"name": "Interior #483",
|
202
|
+
"type": "interiorStory"
|
203
|
+
},
|
204
|
+
{
|
205
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/486",
|
206
|
+
"name": "Cover #486",
|
207
|
+
"type": "cover"
|
208
|
+
},
|
209
|
+
{
|
210
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/487",
|
211
|
+
"name": "Interior #487",
|
212
|
+
"type": "interiorStory"
|
213
|
+
},
|
214
|
+
{
|
215
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/499",
|
216
|
+
"name": "Interior #499",
|
217
|
+
"type": "interiorStory"
|
218
|
+
},
|
219
|
+
{
|
220
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/599",
|
221
|
+
"name": "Interior #599",
|
222
|
+
"type": "interiorStory"
|
223
|
+
},
|
224
|
+
{
|
225
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/805",
|
226
|
+
"name": "Interior #805",
|
227
|
+
"type": "interiorStory"
|
228
|
+
},
|
229
|
+
{
|
230
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/824",
|
231
|
+
"name": "Cover #824",
|
232
|
+
"type": "cover"
|
233
|
+
},
|
234
|
+
{
|
235
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/838",
|
236
|
+
"name": "3 of 3 - Family Business",
|
237
|
+
"type": "cover"
|
238
|
+
},
|
239
|
+
{
|
240
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/842",
|
241
|
+
"name": "1 of 1 - Secret of the Spider Shop",
|
242
|
+
"type": "cover"
|
243
|
+
},
|
244
|
+
{
|
245
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/867",
|
246
|
+
"name": "Interior #867",
|
247
|
+
"type": "interiorStory"
|
248
|
+
},
|
249
|
+
{
|
250
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/1018",
|
251
|
+
"name": "Cover #1018",
|
252
|
+
"type": "cover"
|
253
|
+
},
|
254
|
+
{
|
255
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/1019",
|
256
|
+
"name": "Interior #1019",
|
257
|
+
"type": "interiorStory"
|
258
|
+
},
|
259
|
+
{
|
260
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/1020",
|
261
|
+
"name": "Cover #1020",
|
262
|
+
"type": "cover"
|
263
|
+
},
|
264
|
+
{
|
265
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/1021",
|
266
|
+
"name": "Interior #1021",
|
267
|
+
"type": "interiorStory"
|
268
|
+
},
|
269
|
+
{
|
270
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/1022",
|
271
|
+
"name": "Cover #1022",
|
272
|
+
"type": "cover"
|
273
|
+
},
|
274
|
+
{
|
275
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/1023",
|
276
|
+
"name": "Interior #1023",
|
277
|
+
"type": "interiorStory"
|
278
|
+
},
|
279
|
+
{
|
280
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/1076",
|
281
|
+
"name": "4 of 4 - Golden Age",
|
282
|
+
"type": "cover"
|
283
|
+
},
|
284
|
+
{
|
285
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/1125",
|
286
|
+
"name": "6 of 6 - Sins Past",
|
287
|
+
"type": "cover"
|
288
|
+
},
|
289
|
+
{
|
290
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/1126",
|
291
|
+
"name": "6 of 6 - Sins Past",
|
292
|
+
"type": "interiorStory"
|
293
|
+
},
|
294
|
+
{
|
295
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/stories/1134",
|
296
|
+
"name": "Interior #1134",
|
297
|
+
"type": "interiorStory"
|
298
|
+
}
|
299
|
+
],
|
300
|
+
"returned": 20
|
301
|
+
},
|
302
|
+
"events": {
|
303
|
+
"available": 29,
|
304
|
+
"collectionURI": "http://gateway.marvel.com/v1/public/characters/1009610/events",
|
305
|
+
"items": [
|
306
|
+
{
|
307
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/116",
|
308
|
+
"name": "Acts of Vengeance!"
|
309
|
+
},
|
310
|
+
{
|
311
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/233",
|
312
|
+
"name": "Atlantis Attacks"
|
313
|
+
},
|
314
|
+
{
|
315
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/234",
|
316
|
+
"name": "Avengers Disassembled"
|
317
|
+
},
|
318
|
+
{
|
319
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/310",
|
320
|
+
"name": "Avengers VS X-Men"
|
321
|
+
},
|
322
|
+
{
|
323
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/296",
|
324
|
+
"name": "Chaos War"
|
325
|
+
},
|
326
|
+
{
|
327
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/238",
|
328
|
+
"name": "Civil War"
|
329
|
+
},
|
330
|
+
{
|
331
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/318",
|
332
|
+
"name": "Dark Reign"
|
333
|
+
},
|
334
|
+
{
|
335
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/240",
|
336
|
+
"name": "Days of Future Present"
|
337
|
+
},
|
338
|
+
{
|
339
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/246",
|
340
|
+
"name": "Evolutionary War"
|
341
|
+
},
|
342
|
+
{
|
343
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/302",
|
344
|
+
"name": "Fear Itself"
|
345
|
+
},
|
346
|
+
{
|
347
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/251",
|
348
|
+
"name": "House of M"
|
349
|
+
},
|
350
|
+
{
|
351
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/252",
|
352
|
+
"name": "Inferno"
|
353
|
+
},
|
354
|
+
{
|
355
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/253",
|
356
|
+
"name": "Infinity Gauntlet"
|
357
|
+
},
|
358
|
+
{
|
359
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/255",
|
360
|
+
"name": "Initiative"
|
361
|
+
},
|
362
|
+
{
|
363
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/258",
|
364
|
+
"name": "Kraven's Last Hunt"
|
365
|
+
},
|
366
|
+
{
|
367
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/151",
|
368
|
+
"name": "Maximum Carnage"
|
369
|
+
},
|
370
|
+
{
|
371
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/37",
|
372
|
+
"name": "Maximum Security"
|
373
|
+
},
|
374
|
+
{
|
375
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/154",
|
376
|
+
"name": "Onslaught"
|
377
|
+
},
|
378
|
+
{
|
379
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/266",
|
380
|
+
"name": "Other - Evolve or Die"
|
381
|
+
},
|
382
|
+
{
|
383
|
+
"resourceURI": "http://gateway.marvel.com/v1/public/events/269",
|
384
|
+
"name": "Secret Invasion"
|
385
|
+
}
|
386
|
+
],
|
387
|
+
"returned": 20
|
388
|
+
},
|
389
|
+
"urls": [
|
390
|
+
{
|
391
|
+
"type": "detail",
|
392
|
+
"url": "http://marvel.com/comics/characters/1009610/spider-man?utm_campaign=apiRef&utm_source=85ec0830b5958f4f46ea2fa898a76ef2"
|
393
|
+
},
|
394
|
+
{
|
395
|
+
"type": "wiki",
|
396
|
+
"url": "http://marvel.com/universe/Spider-Man_(Peter_Parker)?utm_campaign=apiRef&utm_source=85ec0830b5958f4f46ea2fa898a76ef2"
|
397
|
+
}
|
398
|
+
]
|
399
|
+
}
|
400
|
+
]
|
401
|
+
}
|
402
|
+
}
|