nhentai-api 0.1.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nhentai-api.rb +390 -26
  3. metadata +7 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34fc4c8aba56d86dec53095de372746d7b168a4997cf7cd47d135aa6de0f4098
4
- data.tar.gz: d90796862bddb36ffe361a467d5727e3ae08c0d916075be304e9be13c62aa69c
3
+ metadata.gz: 32a8382ebb1c8c5d33c1ea5baa94070fc31c788e31c628c7708fa6b29d839d94
4
+ data.tar.gz: 1481e553fa7663d4898b07f60814413be9efb5ccd8c233bf84d0c08281edf934
5
5
  SHA512:
6
- metadata.gz: 2b72edd65733a0b407414c272a481a319801c944afea09379975df1a1ba5e03d57d3147864f8f564fff125f6e21595aa451867072e13bb0184a03af98d9cb46f
7
- data.tar.gz: 560fcbe879cccef3a63160077981c46659a3fb2fcae65579251c62f6661d03d28583e300a20acb8e3001173065c40557863a4548f7ad717708a936537bb33812
6
+ metadata.gz: 585e38f3cb7d7397158535f4bca3dd10fde1fb70bcf4ecddff39eaee1178a6f1cb50ad668897e838087265ab1d61e1617bddbdcede672d1f8de46fd6a5945a7c
7
+ data.tar.gz: a5246ab1e9eec631fed5a883822e9190bf004e88840b6cc9d3a13cb516371019a61c77a7808d04eaebd325ba5a23e823c930351f16f5063164cc8b963fd5c2e5
@@ -1,6 +1,7 @@
1
1
  require 'net/http'
2
+ require 'time'
2
3
 
3
- class Tag
4
+ class Info
4
5
  attr_reader :id, :name, :count, :url
5
6
 
6
7
  def initialize(id, name, count, url)
@@ -17,172 +18,535 @@ class Doujinshi
17
18
  def initialize(id)
18
19
  @id = id
19
20
  @client = Net::HTTP.get_response(URI("https://nhentai.net/g/#{@id}/"))
20
- @media_id = @client.body.match(%r{\/([0-9]+)\/cover.jpg})[1]
21
- @count_pages = @client.body.match(/([0-9]+) pages/)[1].to_i
21
+ if self.exists?
22
+ @media_id = @client.body.match(%r{\/([0-9]+)\/cover})[1]
23
+ @count_pages = @client.body.match(/Pages:\s*.*>([0-9]+)</)[1].to_i
24
+ end
22
25
  end
23
26
 
27
+ #
28
+ # Check if a doujinshi with the given id exist
29
+ #
30
+ # @return [Bool] true if the doujinshi exist, otherwise false
31
+ # @since 0.1.0
32
+ # @example
33
+ # doujinshi.exists? #=> true
34
+ #
24
35
  def exists?
25
- @client.code == 200
36
+ @client.code == '200'
26
37
  end
27
38
 
39
+ #
40
+ # Give the title of a doujinshi
41
+ #
42
+ # @return [String] the title of a given doujinshi
43
+ # @since 0.1.0
44
+ # @example
45
+ # doujinshi.title #=> '[Illumination. (Ogadenmon)] Android no Ecchi na Yatsu | Horny Androids (NieR:Automata) [English] =TLL + mrwayne= [Digital]'
46
+ #
28
47
  def title
29
- @client.body.match(%r{<div id="info">\s+<h1>(.+)<\/h1>})[1]
48
+ @client.body.match(/"pretty">(.*?)</)[1]
30
49
  end
31
50
 
51
+ #
52
+ # Give the cover's URL of a doujinshi
53
+ #
54
+ # @return [String] the cover's URL of a given doujinshi
55
+ # @since 0.1.0
56
+ # @example
57
+ # doujinshi.cover #=> 'https://t.nhentai.net/galleries/1170172/cover.jpg'
58
+ #
32
59
  def cover
33
- "https://t.nhentai.net/galleries/#{@media_id}/cover.jpg"
60
+ res = @client.body.match(%r{https://t.nhentai.net/galleries/#{@media_id}/cover\.(.{3})"})
61
+
62
+ "https://t.nhentai.net/galleries/#{@media_id}/cover.#{res[1]}"
34
63
  end
35
64
 
65
+ #
66
+ # Give the URL of a given page of a doujinshi
67
+ #
68
+ # @param [Integer] page a particular page of a doujinshi
69
+ # @return [String] the URL of a given page of a doujinshi
70
+ # @since 0.1.0
71
+ # @example
72
+ # doujinshi.get_page #=> 'https://i.nhentai.net/galleries/1170172/1.jpg'
73
+ # doujinshi.get_page(10) #=> 'https://i.nhentai.net/galleries/1170172/10.jpg'
74
+ #
36
75
  def page(page = 1)
37
76
  res = @client.body.match(%r{https://t.nhentai.net/galleries/#{@media_id}/#{page}t\.(.{3})"})
38
77
 
39
78
  "https://i.nhentai.net/galleries/#{@media_id}/#{page}.#{res[1]}"
40
79
  end
41
80
 
81
+ #
82
+ # Give the URL of a all pages of a doujinshi
83
+ #
84
+ # @return [Array] array pages' URL
85
+ # @since 0.1.0
86
+ # @example
87
+ # doujinshi.pages #=> ['https://i.nhentai.net/galleries/1170172/1.jpg', ..., 'https://i.nhentai.net/galleries/1170172/31.jpg']
88
+ #
42
89
  def pages
43
90
  (1..@count_pages).map { |page| page(page) }
44
91
  end
45
92
 
93
+ #
94
+ # Give the thumbnail's URL of a given page of a doujinshi
95
+ #
96
+ # @param [Integer] page a particular page of a doujinshi
97
+ # @return [String] the thumbnail's URL of a given page of a doujinshi
98
+ # @since 0.1.0
99
+ # @example
100
+ # doujinshi.get_thumbnail #=> 'https://t.nhentai.net/galleries/1170172/1t.jpg'
101
+ # doujinshi.get_thumbnail(10) #=> 'https://t.nhentai.net/galleries/1170172/10t.jpg'
102
+ #
46
103
  def thumbnail(page = 1)
47
104
  res = @client.body.match(%r{https://t.nhentai.net/galleries/#{@media_id}/(#{page}t\..{3})"})
48
105
 
49
106
  "https://t.nhentai.net/galleries/#{@media_id}/#{res[1]}"
50
107
  end
51
108
 
109
+ #
110
+ # Give the URL of a all thumbnails of a doujinshi
111
+ #
112
+ # @return [Array] an array thumbnails' URL
113
+ # @since 0.1.0
114
+ # @example
115
+ # doujinshi.thumbnails #=> ['https://t.nhentai.net/galleries/1170172/1t.jpg',..., 'https://t.nhentai.net/galleries/1170172/31t.jpg']
116
+ #
52
117
  def thumbnails
53
118
  (1..@count_pages).map { |page| thumbnail(page) }
54
119
  end
55
120
 
56
- def num_favorites
121
+ #
122
+ # Give the number of favorites on a doujinshi
123
+ #
124
+ # @return [Integer] a counter of favorites on a given doujinshi
125
+ # @since 0.1.0
126
+ # @example
127
+ # doujinshi.num_favorites #=> 13326
128
+ #
129
+ def count_favorites
57
130
  regex = %r{<span>Favorite <span class="nobold">.(\d+).<\/span><\/span>}
58
131
 
59
132
  @client.body.match(regex)[1].to_i
60
133
  end
61
134
 
135
+ #
136
+ # Give the upload date of a doujinshi
137
+ #
138
+ # @return [Integer] the upload date of a given doujinshi
139
+ # @since 0.1.0
140
+ # @example
141
+ # doujinshi.upload_date #=> 2018-01-17 15:56:16 +0000
142
+ #
62
143
  def upload_date
63
- Time.parse(@client.body.match(/datetime="(.+)"/)[1])
64
- end
65
-
66
- def parse_tags(res)
67
- res.split(%r{<a(.+?)<\/a>}).reject(&:empty?).map do |line|
68
- id = line.match(/tag-(\d+)/)[1]
69
- name = line.match(/">(.+?)</)[1].strip
70
- count = line.match(/\((.+?)\)</)[1].tr(',', '').to_i
71
- url = line.match(/href=\"(.+?)\"/)[1]
72
-
73
- Tag.new(id, name, count, url)
74
- end
144
+ Time.iso8601(@client.body.match(/<time .+ datetime="(.*?)"/)[1])
75
145
  end
76
146
 
147
+ #
148
+ # Give all tags of a doujinshi
149
+ #
150
+ # @return [Array] of Tag class of a given doujinshi
151
+ # @since 0.1.0
152
+ # @example
153
+ # doujinshi.tags
154
+ #
77
155
  def tags
78
156
  res = @client.body.match(%r{Tags:\s*<span class="tags">(.+)<\/span>})
157
+ return [] if res.nil?
79
158
 
80
159
  parse_tags(res[1])
81
160
  end
82
161
 
162
+ #
163
+ # Give a counter of tags
164
+ #
165
+ # @return [Integer] of tags
166
+ # @since 0.1.0
167
+ # @example
168
+ # doujinshi.count_tags #=> 9
169
+ #
83
170
  def count_tags
84
171
  res = @client.body.match(%r{Tags:\s*<span class="tags">(.+)<\/span>})
85
172
 
86
- res.nil? ? 0 : parse_tags(res[1]).count
173
+ res.nil? ? 0 : parse_tags(res[1]).length
87
174
  end
88
175
 
176
+ #
177
+ # Check if a particular doujinshi have some tags
178
+ #
179
+ # @return [Bool] true if the doujinshi have tags, otherwise false
180
+ # @since 0.1.0
181
+ # @example
182
+ # doujinshi.tags? #=> true
183
+ #
89
184
  def tags?
90
185
  !@client.body.match(%r{Tags:\s*<span class="tags">(.+)<\/span>}).nil?
91
186
  end
92
187
 
188
+ #
189
+ # Give all parodies of a doujinshi
190
+ #
191
+ # @since 0.1.0
192
+ # @see Doujinshi#tags
193
+ #
93
194
  def parodies
94
195
  res = @client.body.match(%r{Parodies:\s+<span class="tags">(.+)<\/span>})
196
+ return [] if res.nil?
95
197
 
96
198
  parse_tags(res[1])
97
199
  end
98
200
 
201
+ #
202
+ # Give a counter of parodies
203
+ #
204
+ # @since 0.1.0
205
+ # @see Doujinshi#count_tags
206
+ #
99
207
  def count_parodies
100
208
  res = @client.body.match(%r{Parodies:\s+<span class="tags">(.+)<\/span>})
101
209
 
102
- res.nil? ? 0 : parse_tags(res[1]).count
210
+ res.nil? ? 0 : parse_tags(res[1]).length
103
211
  end
104
212
 
213
+ #
214
+ # Check if a particular doujinshi have some parodies
215
+ #
216
+ # @since 0.1.0
217
+ # @see Doujinshi#tags?
218
+ #
105
219
  def parodies?
106
220
  !@client.body.match(%r{Parodies:\s+<span class="tags">(.+)<\/span>}).nil?
107
221
  end
108
222
 
223
+ #
224
+ # Give all characters of a doujinshi
225
+ #
226
+ # @since 0.1.0
227
+ # @see Doujinshi#tags
228
+ #
109
229
  def characters
110
230
  res = @client.body.match(%r{Characters:\s+<span class="tags">(.+)<\/span>})
231
+ return [] if res.nil?
111
232
 
112
233
  parse_tags(res[1])
113
234
  end
114
235
 
236
+ #
237
+ # Give a counter of characters
238
+ #
239
+ # @since 0.1.0
240
+ # @see Doujinshi#count_tags
241
+ #
115
242
  def count_characters
116
243
  res = @client.body.match(%r{Characters:\s+<span class="tags">(.+)<\/span>})
117
244
 
118
- res.nil? ? 0 : parse_tags(res[1]).count
245
+ res.nil? ? 0 : parse_tags(res[1]).length
119
246
  end
120
247
 
248
+ #
249
+ # Check if a particular doujinshi have some characters
250
+ #
251
+ # @since 0.1.0
252
+ # @see Doujinshi#tags?
253
+ #
121
254
  def characters?
122
255
  !@client.body.match(%r{Characters:\s+<span class="tags">(.+)<\/span>}).nil?
123
256
  end
124
257
 
258
+ #
259
+ # Give all artists of a doujinshi
260
+ #
261
+ # @since 0.1.0
262
+ # @see Doujinshi#tags
263
+ #
125
264
  def artists
126
265
  res = @client.body.match(%r{Artists:\s+<span class="tags">(.+)<\/span>})
266
+ return [] if res.nil?
127
267
 
128
268
  parse_tags(res[1])
129
269
  end
130
270
 
271
+ #
272
+ # Give a counter of artists
273
+ #
274
+ # @since 0.1.0
275
+ # @see Doujinshi#count_tags
276
+ #
131
277
  def count_artists
132
278
  res = @client.body.match(%r{Artists:\s+<span class="tags">(.+)<\/span>})
133
279
 
134
- res.nil? ? 0 : parse_tags(res[1]).count
280
+ res.nil? ? 0 : parse_tags(res[1]).length
135
281
  end
136
282
 
283
+ #
284
+ # Check if a particular doujinshi have some artists
285
+ #
286
+ # @since 0.1.0
287
+ # @see Doujinshi#tags?
288
+ #
137
289
  def artists?
138
290
  !@client.body.match(%r{Artists:\s+<span class="tags">(.+)<\/span>}).nil?
139
291
  end
140
292
 
293
+ #
294
+ # Give all groups of a doujinshi
295
+ #
296
+ # @since 0.1.0
297
+ # @see Doujinshi#tags
298
+ #
141
299
  def groups
142
300
  res = @client.body.match(%r{Groups:\s+<span class="tags">(.+)<\/span>})
301
+ return [] if res.nil?
143
302
 
144
303
  parse_tags(res[1])
145
304
  end
146
305
 
306
+ #
307
+ # Give a counter of groups
308
+ #
309
+ # @since 0.1.0
310
+ # @see Doujinshi#count_tags
311
+ #
147
312
  def count_groups
148
313
  res = @client.body.match(%r{Groups:\s+<span class="tags">(.+)<\/span>})
149
314
 
150
- res.nil? ? 0 : parse_tags(res[1]).count
315
+ res.nil? ? 0 : parse_tags(res[1]).length
151
316
  end
152
317
 
318
+ #
319
+ # Check if a particular doujinshi have some groups
320
+ #
321
+ # @since 0.1.0
322
+ # @see Doujinshi#tags?
323
+ #
153
324
  def groups?
154
325
  !@client.body.match(%r{Groups:\s+<span class="tags">(.+)<\/span>}).nil?
155
326
  end
156
327
 
328
+ #
329
+ # Give all languages of a doujinshi
330
+ #
331
+ # @since 0.1.0
332
+ # @see Doujinshi#tags
333
+ #
157
334
  def languages
158
335
  res = @client.body.match(%r{Languages:\s+<span class="tags">(.+)<\/span>})
336
+ return [] if res.nil?
159
337
 
160
338
  parse_tags(res[1])
161
339
  end
162
340
 
341
+ #
342
+ # Give a counter of languages
343
+ #
344
+ # @since 0.1.0
345
+ # @see Doujinshi#count_tags
346
+ #
163
347
  def count_languages
164
348
  res = @client.body.match(%r{Languages:\s+<span class="tags">(.+)<\/span>})
165
349
 
166
- res.nil? ? 0 : parse_tags(res[1]).count
350
+ res.nil? ? 0 : parse_tags(res[1]).length
167
351
  end
168
352
 
353
+ #
354
+ # Check if a particular doujinshi have some languages
355
+ #
356
+ # @since 0.1.0
357
+ # @see Doujinshi#tags?
358
+ #
169
359
  def languages?
170
360
  !@client.body.match(%r{Languages:\s+<span class="tags">(.+)<\/span>}).nil?
171
361
  end
172
362
 
363
+ #
364
+ # Give all categories of a doujinshi
365
+ #
366
+ # @since 0.1.0
367
+ # @see Doujinshi#tags
368
+ #
173
369
  def categories
174
370
  res = @client.body.match(%r{Categories:\s+<span class="tags">(.+)<\/span>})
371
+ return [] if res.nil?
175
372
 
176
373
  parse_tags(res[1])
177
374
  end
178
375
 
376
+ #
377
+ # Give a counter of categories
378
+ #
379
+ # @since 0.1.0
380
+ # @see Doujinshi#count_tags
381
+ #
179
382
  def count_categories
180
383
  res = @client.body.match(%r{Categories:\s+<span class="tags">(.+)<\/span>})
181
384
 
182
- res.nil? ? 0 : parse_tags(res[1]).count
385
+ res.nil? ? 0 : parse_tags(res[1]).length
183
386
  end
184
387
 
388
+ #
389
+ # Check if a particular doujinshi have some categories
390
+ #
391
+ # @since 0.1.0
392
+ # @see Doujinshi#tags?
393
+ #
185
394
  def categories?
186
395
  !@client.body.match(%r{Categories:\s+<span class="tags">(.+)<\/span>}).nil?
187
396
  end
397
+
398
+ #
399
+ # @private
400
+ #
401
+
402
+ private
403
+
404
+ def parse_tags(res)
405
+ res.split(%r{<a(.+?)<\/a>}).reject(&:empty?).map do |line|
406
+ id = line.match(/tag-(\d+)/)[1]
407
+ name = line.match(/">(.+?)</)[1].strip
408
+ count = line.match(/class="count">(\d+.)</)[1]
409
+ url = line.match(/href=\"(.+?)\"/)[1]
410
+
411
+ count = count[-1] == 'K' ? count.to_i * 1000 : count.to_i
412
+
413
+ Info.new(id, name, count, url)
414
+ end
415
+ end
416
+ end
417
+
418
+ class Tag
419
+ #
420
+ # List all doujinshi of the page of a given tag
421
+ #
422
+ # @param [String] keyword of the research
423
+ # @param [Integer] sort optional, 1 is sorting by time, 2 is by popularity
424
+ # @param [Integer] page each page can return 25 doujinshi
425
+ # @return [Array] array of Info
426
+ # @since 0.2.0
427
+ #
428
+ def self.listing(keyword, sort = 1, page = 1)
429
+ keyword.tr!(' ', '-')
430
+ sort = sort == 1 ? '' : 'popular'
431
+ client = Net::HTTP.get_response(URI("https://nhentai.net/tag/#{keyword}/#{sort}?page=#{page}"))
432
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
433
+
434
+ parse_tags(res)
435
+ end
436
+
437
+ #
438
+ # @private
439
+ #
440
+ def self.parse_tags(res)
441
+ res.map do |line|
442
+ id = line.match(%r{/g/(\d+)/})[1]
443
+ name = line.match(%r{<div class="caption">(.+)</div>})[1].strip
444
+ count = 1
445
+ url = "/g/#{id}"
446
+
447
+ Info.new(id, name, count, url)
448
+ end
449
+ end
450
+ end
451
+
452
+ class Parody < Tag
453
+ #
454
+ # List all doujinshi of the page of a given parody
455
+ #
456
+ # @since 0.2.0
457
+ # @see Tag#listing
458
+ #
459
+ def self.listing(keyword, sort = 1, page = 1)
460
+ keyword.tr!(' ', '-')
461
+ sort = sort == 1 ? '' : 'popular'
462
+ client = Net::HTTP.get_response(URI("https://nhentai.net/parody/#{keyword}/#{sort}?page=#{page}"))
463
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
464
+
465
+ parse_tags(res)
466
+ end
467
+ end
468
+
469
+ class Character < Tag
470
+ #
471
+ # List all doujinshi of the page of a given character
472
+ #
473
+ # @since 0.2.0
474
+ # @see Tag#listing
475
+ #
476
+ def self.listing(keyword, sort = 1, page = 1)
477
+ keyword.tr!(' ', '-')
478
+ sort = sort == 1 ? '' : 'popular'
479
+ client = Net::HTTP.get_response(URI("https://nhentai.net/character/#{keyword}/#{sort}?page=#{page}"))
480
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
481
+
482
+ parse_tags(res)
483
+ end
484
+ end
485
+
486
+ class Artist < Tag
487
+ #
488
+ # List all doujinshi of the page of a given artists
489
+ #
490
+ # @since 0.2.0
491
+ # @see Tag#listing
492
+ #
493
+ def self.listing(keyword, sort = 1, page = 1)
494
+ keyword.tr!(' ', '-')
495
+ sort = sort == 1 ? '' : 'popular'
496
+ client = Net::HTTP.get_response(URI("https://nhentai.net/artist/#{keyword}/#{sort}?page=#{page}"))
497
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
498
+
499
+ parse_tags(res)
500
+ end
501
+ end
502
+
503
+ class Group < Tag
504
+ #
505
+ # List all doujinshi of the page of a given group
506
+ #
507
+ # @since 0.2.0
508
+ # @see Tag#listing
509
+ #
510
+ def self.listing(keyword, sort = 1, page = 1)
511
+ keyword.tr!(' ', '-')
512
+ sort = sort == 1 ? '' : 'popular'
513
+ client = Net::HTTP.get_response(URI("https://nhentai.net/group/#{keyword}/#{sort}?page=#{page}"))
514
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
515
+
516
+ parse_tags(res)
517
+ end
518
+ end
519
+
520
+ class Language < Tag
521
+ #
522
+ # List all doujinshi of the page of a given language
523
+ #
524
+ # @since 0.2.0
525
+ # @see Tag#listing
526
+ #
527
+ def self.listing(keyword, sort = 1, page = 1)
528
+ keyword.tr!(' ', '-')
529
+ sort = sort == 1 ? '' : 'popular'
530
+ client = Net::HTTP.get_response(URI("https://nhentai.net/language/#{keyword}/#{sort}?page=#{page}"))
531
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
532
+
533
+ parse_tags(res)
534
+ end
535
+ end
536
+
537
+ class Category < Tag
538
+ #
539
+ # List all doujinshi of the page of a given category
540
+ #
541
+ # @since 0.2.0
542
+ # @see Tag#listing
543
+ #
544
+ def self.listing(keyword, sort = 1, page = 1)
545
+ keyword.tr!(' ', '-')
546
+ sort = sort == 1 ? '' : 'popular'
547
+ client = Net::HTTP.get_response(URI("https://nhentai.net/category/#{keyword}/#{sort}?page=#{page}"))
548
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
549
+
550
+ parse_tags(res)
551
+ end
188
552
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nhentai-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gael Roussel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-06 00:00:00.000000000 Z
11
+ date: 2020-07-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: nhentai-api is a basic and easy to use API for nhentai.net
14
- email: groussel42@gmail.com
14
+ email: gaelroussel@protonmail.com
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
@@ -21,7 +21,8 @@ homepage: https://rubygems.org/gems/nhentai-api
21
21
  licenses:
22
22
  - MIT
23
23
  metadata:
24
- source_code_uri: https://github.com/groussel42/nhentai-api
24
+ documentation_uri: https://www.rubydoc.info/github/groussel42/nhentai-api
25
+ source_code_uri: https://github.com/Mraiih/nhentai-api
25
26
  post_install_message:
26
27
  rdoc_options: []
27
28
  require_paths:
@@ -37,7 +38,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
38
  - !ruby/object:Gem::Version
38
39
  version: '0'
39
40
  requirements: []
40
- rubygems_version: 3.0.3
41
+ rubyforge_project:
42
+ rubygems_version: 2.7.6
41
43
  signing_key:
42
44
  specification_version: 4
43
45
  summary: nhentai-api is a basic and easy to use API for nhentai.net