artbase 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -3
- data/Manifest.txt +3 -6
- data/README.md +274 -39
- data/Rakefile +38 -29
- data/bin/artbase +17 -17
- data/lib/artbase/attributes.rb +83 -83
- data/lib/artbase/collection/base.rb +268 -0
- data/lib/artbase/collection/image.rb +39 -39
- data/lib/artbase/collection/opensea.rb +297 -484
- data/lib/artbase/collection/token.rb +362 -72
- data/lib/artbase/collection.rb +12 -12
- data/lib/artbase/helper.rb +168 -149
- data/lib/artbase/image/sample.rb +31 -0
- data/lib/artbase/image.rb +31 -75
- data/lib/artbase/retry.rb +41 -0
- data/lib/artbase/tool.rb +169 -159
- data/lib/artbase/version.rb +22 -22
- data/lib/artbase.rb +103 -42
- metadata +22 -12
- data/LICENSE.md +0 -116
- data/lib/artbase/image/24x24.rb +0 -68
- data/lib/artbase/image/32x32.rb +0 -43
- data/lib/artbase/image/60x60.rb +0 -70
- data/lib/artbase/image/80x80.rb +0 -90
- data/lib/artbase/opensea.rb +0 -144
data/LICENSE.md
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
CC0 1.0 Universal
|
2
|
-
|
3
|
-
Statement of Purpose
|
4
|
-
|
5
|
-
The laws of most jurisdictions throughout the world automatically confer
|
6
|
-
exclusive Copyright and Related Rights (defined below) upon the creator and
|
7
|
-
subsequent owner(s) (each and all, an "owner") of an original work of
|
8
|
-
authorship and/or a database (each, a "Work").
|
9
|
-
|
10
|
-
Certain owners wish to permanently relinquish those rights to a Work for the
|
11
|
-
purpose of contributing to a commons of creative, cultural and scientific
|
12
|
-
works ("Commons") that the public can reliably and without fear of later
|
13
|
-
claims of infringement build upon, modify, incorporate in other works, reuse
|
14
|
-
and redistribute as freely as possible in any form whatsoever and for any
|
15
|
-
purposes, including without limitation commercial purposes. These owners may
|
16
|
-
contribute to the Commons to promote the ideal of a free culture and the
|
17
|
-
further production of creative, cultural and scientific works, or to gain
|
18
|
-
reputation or greater distribution for their Work in part through the use and
|
19
|
-
efforts of others.
|
20
|
-
|
21
|
-
For these and/or other purposes and motivations, and without any expectation
|
22
|
-
of additional consideration or compensation, the person associating CC0 with a
|
23
|
-
Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
|
24
|
-
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
|
25
|
-
and publicly distribute the Work under its terms, with knowledge of his or her
|
26
|
-
Copyright and Related Rights in the Work and the meaning and intended legal
|
27
|
-
effect of CC0 on those rights.
|
28
|
-
|
29
|
-
1. Copyright and Related Rights. A Work made available under CC0 may be
|
30
|
-
protected by copyright and related or neighboring rights ("Copyright and
|
31
|
-
Related Rights"). Copyright and Related Rights include, but are not limited
|
32
|
-
to, the following:
|
33
|
-
|
34
|
-
i. the right to reproduce, adapt, distribute, perform, display, communicate,
|
35
|
-
and translate a Work;
|
36
|
-
|
37
|
-
ii. moral rights retained by the original author(s) and/or performer(s);
|
38
|
-
|
39
|
-
iii. publicity and privacy rights pertaining to a person's image or likeness
|
40
|
-
depicted in a Work;
|
41
|
-
|
42
|
-
iv. rights protecting against unfair competition in regards to a Work,
|
43
|
-
subject to the limitations in paragraph 4(a), below;
|
44
|
-
|
45
|
-
v. rights protecting the extraction, dissemination, use and reuse of data in
|
46
|
-
a Work;
|
47
|
-
|
48
|
-
vi. database rights (such as those arising under Directive 96/9/EC of the
|
49
|
-
European Parliament and of the Council of 11 March 1996 on the legal
|
50
|
-
protection of databases, and under any national implementation thereof,
|
51
|
-
including any amended or successor version of such directive); and
|
52
|
-
|
53
|
-
vii. other similar, equivalent or corresponding rights throughout the world
|
54
|
-
based on applicable law or treaty, and any national implementations thereof.
|
55
|
-
|
56
|
-
2. Waiver. To the greatest extent permitted by, but not in contravention of,
|
57
|
-
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
|
58
|
-
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
|
59
|
-
and Related Rights and associated claims and causes of action, whether now
|
60
|
-
known or unknown (including existing as well as future claims and causes of
|
61
|
-
action), in the Work (i) in all territories worldwide, (ii) for the maximum
|
62
|
-
duration provided by applicable law or treaty (including future time
|
63
|
-
extensions), (iii) in any current or future medium and for any number of
|
64
|
-
copies, and (iv) for any purpose whatsoever, including without limitation
|
65
|
-
commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
|
66
|
-
the Waiver for the benefit of each member of the public at large and to the
|
67
|
-
detriment of Affirmer's heirs and successors, fully intending that such Waiver
|
68
|
-
shall not be subject to revocation, rescission, cancellation, termination, or
|
69
|
-
any other legal or equitable action to disrupt the quiet enjoyment of the Work
|
70
|
-
by the public as contemplated by Affirmer's express Statement of Purpose.
|
71
|
-
|
72
|
-
3. Public License Fallback. Should any part of the Waiver for any reason be
|
73
|
-
judged legally invalid or ineffective under applicable law, then the Waiver
|
74
|
-
shall be preserved to the maximum extent permitted taking into account
|
75
|
-
Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
|
76
|
-
is so judged Affirmer hereby grants to each affected person a royalty-free,
|
77
|
-
non transferable, non sublicensable, non exclusive, irrevocable and
|
78
|
-
unconditional license to exercise Affirmer's Copyright and Related Rights in
|
79
|
-
the Work (i) in all territories worldwide, (ii) for the maximum duration
|
80
|
-
provided by applicable law or treaty (including future time extensions), (iii)
|
81
|
-
in any current or future medium and for any number of copies, and (iv) for any
|
82
|
-
purpose whatsoever, including without limitation commercial, advertising or
|
83
|
-
promotional purposes (the "License"). The License shall be deemed effective as
|
84
|
-
of the date CC0 was applied by Affirmer to the Work. Should any part of the
|
85
|
-
License for any reason be judged legally invalid or ineffective under
|
86
|
-
applicable law, such partial invalidity or ineffectiveness shall not
|
87
|
-
invalidate the remainder of the License, and in such case Affirmer hereby
|
88
|
-
affirms that he or she will not (i) exercise any of his or her remaining
|
89
|
-
Copyright and Related Rights in the Work or (ii) assert any associated claims
|
90
|
-
and causes of action with respect to the Work, in either case contrary to
|
91
|
-
Affirmer's express Statement of Purpose.
|
92
|
-
|
93
|
-
4. Limitations and Disclaimers.
|
94
|
-
|
95
|
-
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
96
|
-
surrendered, licensed or otherwise affected by this document.
|
97
|
-
|
98
|
-
b. Affirmer offers the Work as-is and makes no representations or warranties
|
99
|
-
of any kind concerning the Work, express, implied, statutory or otherwise,
|
100
|
-
including without limitation warranties of title, merchantability, fitness
|
101
|
-
for a particular purpose, non infringement, or the absence of latent or
|
102
|
-
other defects, accuracy, or the present or absence of errors, whether or not
|
103
|
-
discoverable, all to the greatest extent permissible under applicable law.
|
104
|
-
|
105
|
-
c. Affirmer disclaims responsibility for clearing rights of other persons
|
106
|
-
that may apply to the Work or any use thereof, including without limitation
|
107
|
-
any person's Copyright and Related Rights in the Work. Further, Affirmer
|
108
|
-
disclaims responsibility for obtaining any necessary consents, permissions
|
109
|
-
or other rights required for any use of the Work.
|
110
|
-
|
111
|
-
d. Affirmer understands and acknowledges that Creative Commons is not a
|
112
|
-
party to this document and has no duty or obligation with respect to this
|
113
|
-
CC0 or use of the Work.
|
114
|
-
|
115
|
-
For more information, please see
|
116
|
-
<http://creativecommons.org/publicdomain/zero/1.0/>
|
data/lib/artbase/image/24x24.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
PIXEL_OFFSETS['24x24'] = {
|
4
|
-
######################
|
5
|
-
# 269x269 (24x24)
|
6
|
-
# assume 11px per pixel 11x24 = 264 + 5 = 269
|
7
|
-
#
|
8
|
-
# e.g. 24.times {|i| puts "#{(5+i*11+5.0/24.0*i).to_i} => #{i}," }
|
9
|
-
'269x269' => {
|
10
|
-
5 => 0,
|
11
|
-
16 => 1,
|
12
|
-
27 => 2,
|
13
|
-
38 => 3,
|
14
|
-
49 => 4,
|
15
|
-
61 => 5,
|
16
|
-
72 => 6,
|
17
|
-
83 => 7,
|
18
|
-
94 => 8,
|
19
|
-
105 => 9,
|
20
|
-
117 => 10,
|
21
|
-
128 => 11,
|
22
|
-
139 => 12,
|
23
|
-
150 => 13,
|
24
|
-
161 => 14,
|
25
|
-
173 => 15,
|
26
|
-
184 => 16,
|
27
|
-
195 => 17,
|
28
|
-
206 => 18,
|
29
|
-
217 => 19,
|
30
|
-
229 => 20,
|
31
|
-
240 => 21,
|
32
|
-
251 => 22,
|
33
|
-
262 => 23,
|
34
|
-
},
|
35
|
-
|
36
|
-
|
37
|
-
######################
|
38
|
-
# 512x512 (24x24)
|
39
|
-
# assume 21px per pixel 21x24 = 504 + 8 = 512
|
40
|
-
#
|
41
|
-
# e.g. 24.times {|i| puts "#{(12+i*21+8.0/24.0*i).to_i} => #{i}," }
|
42
|
-
'512x512' => {
|
43
|
-
12 => 0,
|
44
|
-
33 => 1,
|
45
|
-
54 => 2,
|
46
|
-
76 => 3,
|
47
|
-
97 => 4,
|
48
|
-
118 => 5,
|
49
|
-
140 => 6,
|
50
|
-
161 => 7,
|
51
|
-
182 => 8,
|
52
|
-
204 => 9,
|
53
|
-
225 => 10,
|
54
|
-
246 => 11,
|
55
|
-
268 => 12,
|
56
|
-
289 => 13,
|
57
|
-
310 => 14,
|
58
|
-
332 => 15,
|
59
|
-
353 => 16,
|
60
|
-
374 => 17,
|
61
|
-
396 => 18,
|
62
|
-
417 => 19,
|
63
|
-
438 => 20,
|
64
|
-
460 => 21,
|
65
|
-
481 => 22,
|
66
|
-
502 => 23,
|
67
|
-
},
|
68
|
-
}
|
data/lib/artbase/image/32x32.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
|
2
|
-
PIXEL_OFFSETS['32x32'] = {
|
3
|
-
######################
|
4
|
-
# 320x320 (32x32)
|
5
|
-
# assume 10px per pixel 10x32 = 320
|
6
|
-
#
|
7
|
-
# e.g. 32.times {|i| puts "#{5+i*10} => #{i}," }
|
8
|
-
'320x320' => {
|
9
|
-
5 => 0,
|
10
|
-
15 => 1,
|
11
|
-
25 => 2,
|
12
|
-
35 => 3,
|
13
|
-
45 => 4,
|
14
|
-
55 => 5,
|
15
|
-
65 => 6,
|
16
|
-
75 => 7,
|
17
|
-
85 => 8,
|
18
|
-
95 => 9,
|
19
|
-
105 => 10,
|
20
|
-
115 => 11,
|
21
|
-
125 => 12,
|
22
|
-
135 => 13,
|
23
|
-
145 => 14,
|
24
|
-
155 => 15,
|
25
|
-
165 => 16,
|
26
|
-
175 => 17,
|
27
|
-
185 => 18,
|
28
|
-
195 => 19,
|
29
|
-
205 => 20,
|
30
|
-
215 => 21,
|
31
|
-
225 => 22,
|
32
|
-
235 => 23,
|
33
|
-
245 => 24,
|
34
|
-
255 => 25,
|
35
|
-
265 => 26,
|
36
|
-
275 => 27,
|
37
|
-
285 => 28,
|
38
|
-
295 => 29,
|
39
|
-
305 => 30,
|
40
|
-
315 => 31,
|
41
|
-
},
|
42
|
-
}
|
43
|
-
|
data/lib/artbase/image/60x60.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
|
2
|
-
PIXEL_OFFSETS['60x60'] = {
|
3
|
-
'512x512' => {
|
4
|
-
###########
|
5
|
-
# 512x512 (60x60)
|
6
|
-
# assume 8px 60*8 = 480 + 32 = 512
|
7
|
-
#
|
8
|
-
# e.g. 60.times {|i| puts "#{(4+i*8+32.0/60.0*i).to_i} => #{i}," }
|
9
|
-
4 => 0,
|
10
|
-
12 => 1,
|
11
|
-
21 => 2,
|
12
|
-
29 => 3,
|
13
|
-
38 => 4,
|
14
|
-
46 => 5,
|
15
|
-
55 => 6,
|
16
|
-
63 => 7,
|
17
|
-
72 => 8,
|
18
|
-
80 => 9,
|
19
|
-
89 => 10,
|
20
|
-
97 => 11,
|
21
|
-
106 => 12,
|
22
|
-
114 => 13,
|
23
|
-
123 => 14,
|
24
|
-
132 => 15,
|
25
|
-
140 => 16,
|
26
|
-
149 => 17,
|
27
|
-
157 => 18,
|
28
|
-
166 => 19,
|
29
|
-
174 => 20,
|
30
|
-
183 => 21,
|
31
|
-
191 => 22,
|
32
|
-
200 => 23,
|
33
|
-
208 => 24,
|
34
|
-
217 => 25,
|
35
|
-
225 => 26,
|
36
|
-
234 => 27,
|
37
|
-
242 => 28,
|
38
|
-
251 => 29,
|
39
|
-
260 => 30,
|
40
|
-
268 => 31,
|
41
|
-
277 => 32,
|
42
|
-
285 => 33,
|
43
|
-
294 => 34,
|
44
|
-
302 => 35,
|
45
|
-
311 => 36,
|
46
|
-
319 => 37,
|
47
|
-
328 => 38,
|
48
|
-
336 => 39,
|
49
|
-
345 => 40,
|
50
|
-
353 => 41,
|
51
|
-
362 => 42,
|
52
|
-
370 => 43,
|
53
|
-
379 => 44,
|
54
|
-
388 => 45,
|
55
|
-
396 => 46,
|
56
|
-
405 => 47,
|
57
|
-
413 => 48,
|
58
|
-
422 => 49,
|
59
|
-
430 => 50,
|
60
|
-
439 => 51,
|
61
|
-
447 => 52,
|
62
|
-
456 => 53,
|
63
|
-
464 => 54,
|
64
|
-
473 => 55,
|
65
|
-
481 => 56,
|
66
|
-
490 => 57,
|
67
|
-
498 => 58,
|
68
|
-
507 => 59,
|
69
|
-
},
|
70
|
-
}
|
data/lib/artbase/image/80x80.rb
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
|
2
|
-
PIXEL_OFFSETS['80x80'] = {
|
3
|
-
'512x512' => {
|
4
|
-
###########
|
5
|
-
# 512x512 (80x80)
|
6
|
-
# assume 6px 80*6 = 480 + 32 = 512
|
7
|
-
#
|
8
|
-
# e.g. 80.times {|i| puts "#{(3+i*6+32.0/80.0*i).to_i} => #{i}," }
|
9
|
-
3 => 0,
|
10
|
-
9 => 1,
|
11
|
-
15 => 2,
|
12
|
-
22 => 3,
|
13
|
-
28 => 4,
|
14
|
-
35 => 5,
|
15
|
-
41 => 6,
|
16
|
-
47 => 7,
|
17
|
-
54 => 8,
|
18
|
-
60 => 9,
|
19
|
-
67 => 10,
|
20
|
-
73 => 11,
|
21
|
-
79 => 12,
|
22
|
-
86 => 13,
|
23
|
-
92 => 14,
|
24
|
-
99 => 15,
|
25
|
-
105 => 16,
|
26
|
-
111 => 17,
|
27
|
-
118 => 18,
|
28
|
-
124 => 19,
|
29
|
-
131 => 20,
|
30
|
-
137 => 21,
|
31
|
-
143 => 22,
|
32
|
-
150 => 23,
|
33
|
-
156 => 24,
|
34
|
-
163 => 25,
|
35
|
-
169 => 26,
|
36
|
-
175 => 27,
|
37
|
-
182 => 28,
|
38
|
-
188 => 29,
|
39
|
-
195 => 30,
|
40
|
-
201 => 31,
|
41
|
-
207 => 32,
|
42
|
-
214 => 33,
|
43
|
-
220 => 34,
|
44
|
-
227 => 35,
|
45
|
-
233 => 36,
|
46
|
-
239 => 37,
|
47
|
-
246 => 38,
|
48
|
-
252 => 39,
|
49
|
-
259 => 40,
|
50
|
-
265 => 41,
|
51
|
-
271 => 42,
|
52
|
-
278 => 43,
|
53
|
-
284 => 44,
|
54
|
-
291 => 45,
|
55
|
-
297 => 46,
|
56
|
-
303 => 47,
|
57
|
-
310 => 48,
|
58
|
-
316 => 49,
|
59
|
-
323 => 50,
|
60
|
-
329 => 51,
|
61
|
-
335 => 52,
|
62
|
-
342 => 53,
|
63
|
-
348 => 54,
|
64
|
-
355 => 55,
|
65
|
-
361 => 56,
|
66
|
-
367 => 57,
|
67
|
-
374 => 58,
|
68
|
-
380 => 59,
|
69
|
-
387 => 60,
|
70
|
-
393 => 61,
|
71
|
-
399 => 62,
|
72
|
-
406 => 63,
|
73
|
-
412 => 64,
|
74
|
-
419 => 65,
|
75
|
-
425 => 66,
|
76
|
-
431 => 67,
|
77
|
-
438 => 68,
|
78
|
-
444 => 69,
|
79
|
-
451 => 70,
|
80
|
-
457 => 71,
|
81
|
-
463 => 72,
|
82
|
-
470 => 73,
|
83
|
-
476 => 74,
|
84
|
-
483 => 75,
|
85
|
-
489 => 76,
|
86
|
-
495 => 77,
|
87
|
-
502 => 78,
|
88
|
-
508 => 79,
|
89
|
-
}
|
90
|
-
}
|
data/lib/artbase/opensea.rb
DELETED
@@ -1,144 +0,0 @@
|
|
1
|
-
|
2
|
-
module OpenSea
|
3
|
-
|
4
|
-
#############
|
5
|
-
# read meta data into struct
|
6
|
-
|
7
|
-
class Meta
|
8
|
-
def self.read( path )
|
9
|
-
txt = File.open( path, 'r:utf-8' ) { |f| f.read }
|
10
|
-
data = JSON.parse( txt )
|
11
|
-
new( data )
|
12
|
-
end
|
13
|
-
|
14
|
-
|
15
|
-
def initialize( data )
|
16
|
-
@data = data
|
17
|
-
|
18
|
-
assets = @data['assets']
|
19
|
-
if assets.size != 1
|
20
|
-
puts "!! error - expected one asset per file only - got #{assets.size} - sorry"
|
21
|
-
exit 1
|
22
|
-
end
|
23
|
-
|
24
|
-
@asset = assets[0]
|
25
|
-
end
|
26
|
-
|
27
|
-
def name
|
28
|
-
@name ||= _normalize( @asset['name'] )
|
29
|
-
end
|
30
|
-
|
31
|
-
def description
|
32
|
-
@description ||= _normalize( @asset['description'] )
|
33
|
-
end
|
34
|
-
|
35
|
-
## note: auto-convert "" (empty string) to nil
|
36
|
-
def image_original_url() _blank( @asset['image_original_url'] ); end
|
37
|
-
def image_url() _blank( @asset['image_url'] ); end
|
38
|
-
|
39
|
-
|
40
|
-
def token_id() @asset['token_id']; end ## note: keep id as string as is - why? why not?
|
41
|
-
|
42
|
-
|
43
|
-
def traits
|
44
|
-
@traits ||= begin
|
45
|
-
traits = []
|
46
|
-
## keep traits as (simple)
|
47
|
-
## ordered array of pairs for now
|
48
|
-
##
|
49
|
-
## in a step two make lookup via hash table
|
50
|
-
## or such easier / "automagic"
|
51
|
-
|
52
|
-
@asset[ 'traits' ].each do |t|
|
53
|
-
trait_type = t['trait_type'].strip
|
54
|
-
trait_value = t['value'].strip
|
55
|
-
traits << [trait_type, trait_value]
|
56
|
-
end
|
57
|
-
|
58
|
-
traits
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
### "private" convenience / helper methods
|
65
|
-
def _normalize( str )
|
66
|
-
return if str.nil? ## check: check for nil - why? why not?
|
67
|
-
|
68
|
-
## normalize string
|
69
|
-
## remove leading and trailing spaces
|
70
|
-
## collapse two and more spaces into one
|
71
|
-
## change unicode space to ascii
|
72
|
-
str = str.gsub( "\u{00a0}", ' ' )
|
73
|
-
str = str.strip.gsub( /[ ]{2,}/, ' ' )
|
74
|
-
str
|
75
|
-
end
|
76
|
-
|
77
|
-
def _blank( o ) ## auto-convert "" (empty string) into nil
|
78
|
-
if o && o.strip.empty?
|
79
|
-
nil
|
80
|
-
else
|
81
|
-
o
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end # class Meta
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
BASE = 'https://api.opensea.io/api/v1/assets?collection={collection}&order_direction=asc&offset={offset}&limit=1'
|
89
|
-
|
90
|
-
## todo/check: rename to query or search or such - why? why not?
|
91
|
-
##
|
92
|
-
## add self.collect( collection, offset: 0 ) helper or such - why? why not?
|
93
|
-
def self.assets( collection:, offset: 0 )
|
94
|
-
src = BASE.sub( '{collection}', collection ).
|
95
|
-
sub( '{offset}', offset.to_s )
|
96
|
-
|
97
|
-
call( src )
|
98
|
-
end
|
99
|
-
|
100
|
-
|
101
|
-
def self.call( src ) ## get response as (parsed) json (hash table)
|
102
|
-
uri = URI.parse( src )
|
103
|
-
|
104
|
-
http = Net::HTTP.new( uri.host, uri.port )
|
105
|
-
|
106
|
-
puts "[debug] GET #{uri.request_uri} uri=#{uri}"
|
107
|
-
|
108
|
-
headers = {
|
109
|
-
'User-Agent' => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36",
|
110
|
-
#'User-Agent' => "ruby v#{RUBY_VERSION}",
|
111
|
-
}
|
112
|
-
|
113
|
-
|
114
|
-
request = Net::HTTP::Get.new( uri.request_uri, headers )
|
115
|
-
if uri.instance_of? URI::HTTPS
|
116
|
-
http.use_ssl = true
|
117
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
118
|
-
end
|
119
|
-
|
120
|
-
response = http.request( request )
|
121
|
-
|
122
|
-
if response.code == '200'
|
123
|
-
puts "#{response.code} #{response.message} - content_type: #{response.content_type}, content_length: #{response.content_length}"
|
124
|
-
|
125
|
-
text = response.body.to_s
|
126
|
-
text = text.force_encoding( Encoding::UTF_8 )
|
127
|
-
|
128
|
-
data = JSON.parse( text )
|
129
|
-
data
|
130
|
-
else
|
131
|
-
puts "!! ERROR:"
|
132
|
-
puts "#{response.code} #{response.message}"
|
133
|
-
exit 1
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end # module OpenSea
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
#####
|
142
|
-
# add convenience alias
|
143
|
-
Opensea = OpenSea
|
144
|
-
|