nhentai-api 0.1.3 → 0.2.0

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 +161 -5
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8dd0b6a81d6a3cb6ca3b9ad1327d4753d60fa0a742692f23ef297cf190f1422
4
- data.tar.gz: 8f145277e1338775784dd3b297cd747a67ca2257df8012d0353d81993eff338d
3
+ metadata.gz: 8056e30327e8ad7dd214acbd23a73b0898bda87daf17fbcdc0ec1bb3b3fb5084
4
+ data.tar.gz: a7d647dadb32275444c83a734113555969e4d55e17269002c1c3874b24c49b60
5
5
  SHA512:
6
- metadata.gz: 388c4685aaabad1a83f7c150f6a11ebbe2f626d249ef8e355773862e33e5f47ceec707f29fff6fca3bf1e9104ac9a07e4e4d1a9d11de9c8f4a566b4a60c1dea8
7
- data.tar.gz: bbbcc5bec9476f012ce8a1c6721f7405063bfcc4bab58ddb03f1ff51dbcb8cb3cf5d5f1f7180e4229632654205f1c906a9d3d7cf3592cc144ebd82a532cca49f
6
+ metadata.gz: 262a7875d02e1e0ae90042d5e2cc23a01a7c16dba4ed807e43fdab2054f2ef2ac01a8400340f9ada475d0e46a4a5c97e36cfe894d6cf44b3bd81cc32d6aa3d77
7
+ data.tar.gz: 995ee6712f274ff77d9ce8baf557d26f0d333afcdb2cc6c2d007fdc13461056a0c22fe131f608ae19ec26c3cfb2c8c8a8e7ec30df40c676abb1181ee5f7b37ea
@@ -1,7 +1,7 @@
1
1
  require 'net/http'
2
2
  require 'time'
3
3
 
4
- class Tag
4
+ class Info
5
5
  attr_reader :id, :name, :count, :url
6
6
 
7
7
  def initialize(id, name, count, url)
@@ -18,8 +18,10 @@ class Doujinshi
18
18
  def initialize(id)
19
19
  @id = id
20
20
  @client = Net::HTTP.get_response(URI("https://nhentai.net/g/#{@id}/"))
21
- @media_id = @client.body.match(%r{\/([0-9]+)\/cover.jpg})[1]
22
- @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.jpg})[1]
23
+ @count_pages = @client.body.match(/([0-9]+) pages/)[1].to_i
24
+ end
23
25
  end
24
26
 
25
27
  #
@@ -31,7 +33,7 @@ class Doujinshi
31
33
  # doujinshi.exists? #=> true
32
34
  #
33
35
  def exists?
34
- @client.code == 200
36
+ @client.code == '200'
35
37
  end
36
38
 
37
39
  #
@@ -183,6 +185,7 @@ class Doujinshi
183
185
  #
184
186
  # Give all parodies of a doujinshi
185
187
  #
188
+ # @since 0.1.0
186
189
  # @see Doujinshi#tags
187
190
  #
188
191
  def parodies
@@ -194,6 +197,7 @@ class Doujinshi
194
197
  #
195
198
  # Give a counter of parodies
196
199
  #
200
+ # @since 0.1.0
197
201
  # @see Doujinshi#count_tags
198
202
  #
199
203
  def count_parodies
@@ -205,6 +209,7 @@ class Doujinshi
205
209
  #
206
210
  # Check if a particular doujinshi have some parodies
207
211
  #
212
+ # @since 0.1.0
208
213
  # @see Doujinshi#tags?
209
214
  #
210
215
  def parodies?
@@ -214,6 +219,7 @@ class Doujinshi
214
219
  #
215
220
  # Give all characters of a doujinshi
216
221
  #
222
+ # @since 0.1.0
217
223
  # @see Doujinshi#tags
218
224
  #
219
225
  def characters
@@ -225,6 +231,7 @@ class Doujinshi
225
231
  #
226
232
  # Give a counter of characters
227
233
  #
234
+ # @since 0.1.0
228
235
  # @see Doujinshi#count_tags
229
236
  #
230
237
  def count_characters
@@ -236,6 +243,7 @@ class Doujinshi
236
243
  #
237
244
  # Check if a particular doujinshi have some characters
238
245
  #
246
+ # @since 0.1.0
239
247
  # @see Doujinshi#tags?
240
248
  #
241
249
  def characters?
@@ -245,6 +253,7 @@ class Doujinshi
245
253
  #
246
254
  # Give all artists of a doujinshi
247
255
  #
256
+ # @since 0.1.0
248
257
  # @see Doujinshi#tags
249
258
  #
250
259
  def artists
@@ -256,6 +265,7 @@ class Doujinshi
256
265
  #
257
266
  # Give a counter of artists
258
267
  #
268
+ # @since 0.1.0
259
269
  # @see Doujinshi#count_tags
260
270
  #
261
271
  def count_artists
@@ -267,6 +277,7 @@ class Doujinshi
267
277
  #
268
278
  # Check if a particular doujinshi have some artists
269
279
  #
280
+ # @since 0.1.0
270
281
  # @see Doujinshi#tags?
271
282
  #
272
283
  def artists?
@@ -276,6 +287,7 @@ class Doujinshi
276
287
  #
277
288
  # Give all groups of a doujinshi
278
289
  #
290
+ # @since 0.1.0
279
291
  # @see Doujinshi#tags
280
292
  #
281
293
  def groups
@@ -287,6 +299,7 @@ class Doujinshi
287
299
  #
288
300
  # Give a counter of groups
289
301
  #
302
+ # @since 0.1.0
290
303
  # @see Doujinshi#count_tags
291
304
  #
292
305
  def count_groups
@@ -298,6 +311,7 @@ class Doujinshi
298
311
  #
299
312
  # Check if a particular doujinshi have some groups
300
313
  #
314
+ # @since 0.1.0
301
315
  # @see Doujinshi#tags?
302
316
  #
303
317
  def groups?
@@ -307,6 +321,7 @@ class Doujinshi
307
321
  #
308
322
  # Give all languages of a doujinshi
309
323
  #
324
+ # @since 0.1.0
310
325
  # @see Doujinshi#tags
311
326
  #
312
327
  def languages
@@ -318,6 +333,7 @@ class Doujinshi
318
333
  #
319
334
  # Give a counter of languages
320
335
  #
336
+ # @since 0.1.0
321
337
  # @see Doujinshi#count_tags
322
338
  #
323
339
  def count_languages
@@ -329,6 +345,7 @@ class Doujinshi
329
345
  #
330
346
  # Check if a particular doujinshi have some languages
331
347
  #
348
+ # @since 0.1.0
332
349
  # @see Doujinshi#tags?
333
350
  #
334
351
  def languages?
@@ -338,6 +355,7 @@ class Doujinshi
338
355
  #
339
356
  # Give all categories of a doujinshi
340
357
  #
358
+ # @since 0.1.0
341
359
  # @see Doujinshi#tags
342
360
  #
343
361
  def categories
@@ -349,6 +367,7 @@ class Doujinshi
349
367
  #
350
368
  # Give a counter of categories
351
369
  #
370
+ # @since 0.1.0
352
371
  # @see Doujinshi#count_tags
353
372
  #
354
373
  def count_categories
@@ -360,6 +379,7 @@ class Doujinshi
360
379
  #
361
380
  # Check if a particular doujinshi have some categories
362
381
  #
382
+ # @since 0.1.0
363
383
  # @see Doujinshi#tags?
364
384
  #
365
385
  def categories?
@@ -379,7 +399,143 @@ class Doujinshi
379
399
  count = line.match(/\((.+?)\)</)[1].tr(',', '').to_i
380
400
  url = line.match(/href=\"(.+?)\"/)[1]
381
401
 
382
- Tag.new(id, name, count, url)
402
+ Info.new(id, name, count, url)
383
403
  end
384
404
  end
385
405
  end
406
+
407
+ class Tag
408
+ #
409
+ # List all doujinshi of the page of a given tag
410
+ #
411
+ # @param [String] keyword of the research
412
+ # @param [Integer] sort optional, 1 is sorting by time, 2 is by popularity
413
+ # @param [Integer] page each page can return 25 doujinshi
414
+ # @return [Array] array of Info
415
+ # @since 0.2.0
416
+ #
417
+ def self.listing(keyword, sort = 1, page = 1)
418
+ keyword.tr!(' ', '-')
419
+ sort = sort == 1 ? '' : 'popular'
420
+ client = Net::HTTP.get_response(URI("https://nhentai.net/tag/#{keyword}/#{sort}?page=#{page}"))
421
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
422
+
423
+ parse_tags(res)
424
+ end
425
+
426
+ #
427
+ # @private
428
+ #
429
+ def self.parse_tags(res)
430
+ res.map do |line|
431
+ id = line.match(%r{/g/(\d+)/})[1]
432
+ name = line.match(%r{<div class="caption">(.+)</div>})[1].strip
433
+ count = 1
434
+ url = "/g/#{id}"
435
+
436
+ Info.new(id, name, count, url)
437
+ end
438
+ end
439
+ end
440
+
441
+ class Parody < Tag
442
+ #
443
+ # List all doujinshi of the page of a given parody
444
+ #
445
+ # @since 0.2.0
446
+ # @see Tag#listing
447
+ #
448
+ def self.listing(keyword, sort = 1, page = 1)
449
+ keyword.tr!(' ', '-')
450
+ sort = sort == 1 ? '' : 'popular'
451
+ client = Net::HTTP.get_response(URI("https://nhentai.net/parody/#{keyword}/#{sort}?page=#{page}"))
452
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
453
+
454
+ parse_tags(res)
455
+ end
456
+ end
457
+
458
+ class Character < Tag
459
+ #
460
+ # List all doujinshi of the page of a given character
461
+ #
462
+ # @since 0.2.0
463
+ # @see Tag#listing
464
+ #
465
+ def self.listing(keyword, sort = 1, page = 1)
466
+ keyword.tr!(' ', '-')
467
+ sort = sort == 1 ? '' : 'popular'
468
+ client = Net::HTTP.get_response(URI("https://nhentai.net/character/#{keyword}/#{sort}?page=#{page}"))
469
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
470
+
471
+ parse_tags(res)
472
+ end
473
+ end
474
+
475
+ class Artist < Tag
476
+ #
477
+ # List all doujinshi of the page of a given artists
478
+ #
479
+ # @since 0.2.0
480
+ # @see Tag#listing
481
+ #
482
+ def self.listing(keyword, sort = 1, page = 1)
483
+ keyword.tr!(' ', '-')
484
+ sort = sort == 1 ? '' : 'popular'
485
+ client = Net::HTTP.get_response(URI("https://nhentai.net/artist/#{keyword}/#{sort}?page=#{page}"))
486
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
487
+
488
+ parse_tags(res)
489
+ end
490
+ end
491
+
492
+ class Group < Tag
493
+ #
494
+ # List all doujinshi of the page of a given group
495
+ #
496
+ # @since 0.2.0
497
+ # @see Tag#listing
498
+ #
499
+ def self.listing(keyword, sort = 1, page = 1)
500
+ keyword.tr!(' ', '-')
501
+ sort = sort == 1 ? '' : 'popular'
502
+ client = Net::HTTP.get_response(URI("https://nhentai.net/group/#{keyword}/#{sort}?page=#{page}"))
503
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
504
+
505
+ parse_tags(res)
506
+ end
507
+ end
508
+
509
+ class Language < Tag
510
+ #
511
+ # List all doujinshi of the page of a given language
512
+ #
513
+ # @since 0.2.0
514
+ # @see Tag#listing
515
+ #
516
+ def self.listing(keyword, sort = 1, page = 1)
517
+ keyword.tr!(' ', '-')
518
+ sort = sort == 1 ? '' : 'popular'
519
+ client = Net::HTTP.get_response(URI("https://nhentai.net/language/#{keyword}/#{sort}?page=#{page}"))
520
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
521
+
522
+ parse_tags(res)
523
+ end
524
+ end
525
+
526
+ class Category < Tag
527
+ #
528
+ # List all doujinshi of the page of a given category
529
+ #
530
+ # @since 0.2.0
531
+ # @see Tag#listing
532
+ #
533
+ def self.listing(keyword, sort = 1, page = 1)
534
+ keyword.tr!(' ', '-')
535
+ sort = sort == 1 ? '' : 'popular'
536
+ client = Net::HTTP.get_response(URI("https://nhentai.net/category/#{keyword}/#{sort}?page=#{page}"))
537
+ res = client.body.split(%r{<div class="gallery".+?>(.+)</div>}).select { |line| line.include?('<a href="/g/') }
538
+
539
+ parse_tags(res)
540
+ end
541
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nhentai-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gael Roussel