nhentai-api 0.1.2 → 0.1.3

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 +210 -15
  3. metadata +2 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f1b6ecef6e264747bde463e1cbd116c7442fafb2b188a932b3a1b8cceaca9d68
4
- data.tar.gz: '00069935751c8f2da32d66202d73bc9dc2e9e9faf022e62bdeb64594a1682de1'
3
+ metadata.gz: f8dd0b6a81d6a3cb6ca3b9ad1327d4753d60fa0a742692f23ef297cf190f1422
4
+ data.tar.gz: 8f145277e1338775784dd3b297cd747a67ca2257df8012d0353d81993eff338d
5
5
  SHA512:
6
- metadata.gz: 8977d2bdb5dec34bfb89ffa7d8c9da3f340f232a72a288e30107530137be4017edea3c88f121576dd0f236f43533804120c3696010bce72afca383c82e127c0e
7
- data.tar.gz: 1b4c8d969ca11d23d0a8f46c1520689fc63a03f5a15f25ea30d5745970350eb8765892814555212001031fa878ea5c396046e0040eec9d77b00164b904b350f2
6
+ metadata.gz: 388c4685aaabad1a83f7c150f6a11ebbe2f626d249ef8e355773862e33e5f47ceec707f29fff6fca3bf1e9104ac9a07e4e4d1a9d11de9c8f4a566b4a60c1dea8
7
+ data.tar.gz: bbbcc5bec9476f012ce8a1c6721f7405063bfcc4bab58ddb03f1ff51dbcb8cb3cf5d5f1f7180e4229632654205f1c906a9d3d7cf3592cc144ebd82a532cca49f
data/lib/nhentai-api.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'net/http'
2
2
  require 'time'
3
- require 'pp'
4
3
 
5
4
  class Tag
6
5
  attr_reader :id, :name, :count, :url
@@ -14,177 +13,373 @@ class Tag
14
13
  end
15
14
 
16
15
  class Doujinshi
17
- attr_reader :id, :client, :media_id, :count
16
+ attr_reader :id, :client, :media_id, :count_pages
18
17
 
19
18
  def initialize(id)
20
19
  @id = id
21
20
  @client = Net::HTTP.get_response(URI("https://nhentai.net/g/#{@id}/"))
22
21
  @media_id = @client.body.match(%r{\/([0-9]+)\/cover.jpg})[1]
23
- @count = @client.body.match(/([0-9]+) pages/)[1].to_i
22
+ @count_pages = @client.body.match(/([0-9]+) pages/)[1].to_i
24
23
  end
25
24
 
25
+ #
26
+ # Check if a doujinshi with the given id exist
27
+ #
28
+ # @return [Bool] true if the doujinshi exist, otherwise false
29
+ # @since 0.1.0
30
+ # @example
31
+ # doujinshi.exists? #=> true
32
+ #
26
33
  def exists?
27
34
  @client.code == 200
28
35
  end
29
36
 
37
+ #
38
+ # Give the title of a doujinshi
39
+ #
40
+ # @return [String] the title of a given doujinshi
41
+ # @since 0.1.0
42
+ # @example
43
+ # doujinshi.title #=> '[Illumination. (Ogadenmon)] Android no Ecchi na Yatsu | Horny Androids (NieR:Automata) [English] =TLL + mrwayne= [Digital]'
44
+ #
30
45
  def title
31
46
  @client.body.match(%r{<div id="info">\s+<h1>(.+)<\/h1>})[1]
32
47
  end
33
48
 
49
+ #
50
+ # Give the cover's URL of a doujinshi
51
+ #
52
+ # @return [String] the cover's URL of a given doujinshi
53
+ # @since 0.1.0
54
+ # @example
55
+ # doujinshi.cover #=> 'https://t.nhentai.net/galleries/1170172/cover.jpg'
56
+ #
34
57
  def cover
35
58
  "https://t.nhentai.net/galleries/#{@media_id}/cover.jpg"
36
59
  end
37
60
 
61
+ #
62
+ # Give the URL of a given page of a doujinshi
63
+ #
64
+ # @param [Integer] page a particular page of a doujinshi
65
+ # @return [String] the URL of a given page of a doujinshi
66
+ # @since 0.1.0
67
+ # @example
68
+ # doujinshi.get_page #=> 'https://i.nhentai.net/galleries/1170172/1.jpg'
69
+ # doujinshi.get_page(10) #=> 'https://i.nhentai.net/galleries/1170172/10.jpg'
70
+ #
38
71
  def page(page = 1)
39
72
  res = @client.body.match(%r{https://t.nhentai.net/galleries/#{@media_id}/#{page}t\.(.{3})"})
40
73
 
41
74
  "https://i.nhentai.net/galleries/#{@media_id}/#{page}.#{res[1]}"
42
75
  end
43
76
 
77
+ #
78
+ # Give the URL of a all pages of a doujinshi
79
+ #
80
+ # @return [Array] array pages' URL
81
+ # @since 0.1.0
82
+ # @example
83
+ # doujinshi.pages #=> ['https://i.nhentai.net/galleries/1170172/1.jpg', ..., 'https://i.nhentai.net/galleries/1170172/31.jpg']
84
+ #
44
85
  def pages
45
86
  (1..@count_pages).map { |page| page(page) }
46
87
  end
47
88
 
89
+ #
90
+ # Give the thumbnail's URL of a given page of a doujinshi
91
+ #
92
+ # @param [Integer] page a particular page of a doujinshi
93
+ # @return [String] the thumbnail's URL of a given page of a doujinshi
94
+ # @since 0.1.0
95
+ # @example
96
+ # doujinshi.get_thumbnail #=> 'https://t.nhentai.net/galleries/1170172/1t.jpg'
97
+ # doujinshi.get_thumbnail(10) #=> 'https://t.nhentai.net/galleries/1170172/10t.jpg'
98
+ #
48
99
  def thumbnail(page = 1)
49
100
  res = @client.body.match(%r{https://t.nhentai.net/galleries/#{@media_id}/(#{page}t\..{3})"})
50
101
 
51
102
  "https://t.nhentai.net/galleries/#{@media_id}/#{res[1]}"
52
103
  end
53
104
 
105
+ #
106
+ # Give the URL of a all thumbnails of a doujinshi
107
+ #
108
+ # @return [Array] an array thumbnails' URL
109
+ # @since 0.1.0
110
+ # @example
111
+ # doujinshi.thumbnails #=> ['https://t.nhentai.net/galleries/1170172/1t.jpg',..., 'https://t.nhentai.net/galleries/1170172/31t.jpg']
112
+ #
54
113
  def thumbnails
55
114
  (1..@count_pages).map { |page| thumbnail(page) }
56
115
  end
57
116
 
58
- def num_favorites
117
+ #
118
+ # Give the number of favorites on a doujinshi
119
+ #
120
+ # @return [Integer] a counter of favorites on a given doujinshi
121
+ # @since 0.1.0
122
+ # @example
123
+ # doujinshi.num_favorites #=> 13326
124
+ #
125
+ def count_favorites
59
126
  regex = %r{<span>Favorite <span class="nobold">.(\d+).<\/span><\/span>}
60
127
 
61
128
  @client.body.match(regex)[1].to_i
62
129
  end
63
130
 
131
+ #
132
+ # Give the upload date of a doujinshi
133
+ #
134
+ # @return [Integer] the upload date of a given doujinshi
135
+ # @since 0.1.0
136
+ # @example
137
+ # doujinshi.upload_date #=> 2018-01-17 15:56:16 +0000
138
+ #
64
139
  def upload_date
65
140
  Time.iso8601(@client.body.match(/datetime="(.+)"/)[1])
66
141
  end
67
142
 
68
- def parse_tags(res)
69
- res.split(%r{<a(.+?)<\/a>}).reject(&:empty?).map do |line|
70
- id = line.match(/tag-(\d+)/)[1]
71
- name = line.match(/">(.+?)</)[1].strip
72
- count = line.match(/\((.+?)\)</)[1].tr(',', '').to_i
73
- url = line.match(/href=\"(.+?)\"/)[1]
74
-
75
- Tag.new(id, name, count, url)
76
- end
77
- end
78
-
143
+ #
144
+ # Give all tags of a doujinshi
145
+ #
146
+ # @return [Array] of Tag class of a given doujinshi
147
+ # @since 0.1.0
148
+ # @example
149
+ # doujinshi.tags
150
+ #
79
151
  def tags
80
152
  res = @client.body.match(%r{Tags:\s*<span class="tags">(.+)<\/span>})
81
153
 
82
154
  parse_tags(res[1])
83
155
  end
84
156
 
157
+ #
158
+ # Give a counter of tags
159
+ #
160
+ # @return [Integer] of tags
161
+ # @since 0.1.0
162
+ # @example
163
+ # doujinshi.count_tags #=> 9
164
+ #
85
165
  def count_tags
86
166
  res = @client.body.match(%r{Tags:\s*<span class="tags">(.+)<\/span>})
87
167
 
88
168
  res.nil? ? 0 : parse_tags(res[1]).length
89
169
  end
90
170
 
171
+ #
172
+ # Check if a particular doujinshi have some tags
173
+ #
174
+ # @return [Bool] true if the doujinshi have tags, otherwise false
175
+ # @since 0.1.0
176
+ # @example
177
+ # doujinshi.tags? #=> true
178
+ #
91
179
  def tags?
92
180
  !@client.body.match(%r{Tags:\s*<span class="tags">(.+)<\/span>}).nil?
93
181
  end
94
182
 
183
+ #
184
+ # Give all parodies of a doujinshi
185
+ #
186
+ # @see Doujinshi#tags
187
+ #
95
188
  def parodies
96
189
  res = @client.body.match(%r{Parodies:\s+<span class="tags">(.+)<\/span>})
97
190
 
98
191
  parse_tags(res[1])
99
192
  end
100
193
 
194
+ #
195
+ # Give a counter of parodies
196
+ #
197
+ # @see Doujinshi#count_tags
198
+ #
101
199
  def count_parodies
102
200
  res = @client.body.match(%r{Parodies:\s+<span class="tags">(.+)<\/span>})
103
201
 
104
202
  res.nil? ? 0 : parse_tags(res[1]).length
105
203
  end
106
204
 
205
+ #
206
+ # Check if a particular doujinshi have some parodies
207
+ #
208
+ # @see Doujinshi#tags?
209
+ #
107
210
  def parodies?
108
211
  !@client.body.match(%r{Parodies:\s+<span class="tags">(.+)<\/span>}).nil?
109
212
  end
110
213
 
214
+ #
215
+ # Give all characters of a doujinshi
216
+ #
217
+ # @see Doujinshi#tags
218
+ #
111
219
  def characters
112
220
  res = @client.body.match(%r{Characters:\s+<span class="tags">(.+)<\/span>})
113
221
 
114
222
  parse_tags(res[1])
115
223
  end
116
224
 
225
+ #
226
+ # Give a counter of characters
227
+ #
228
+ # @see Doujinshi#count_tags
229
+ #
117
230
  def count_characters
118
231
  res = @client.body.match(%r{Characters:\s+<span class="tags">(.+)<\/span>})
119
232
 
120
233
  res.nil? ? 0 : parse_tags(res[1]).length
121
234
  end
122
235
 
236
+ #
237
+ # Check if a particular doujinshi have some characters
238
+ #
239
+ # @see Doujinshi#tags?
240
+ #
123
241
  def characters?
124
242
  !@client.body.match(%r{Characters:\s+<span class="tags">(.+)<\/span>}).nil?
125
243
  end
126
244
 
245
+ #
246
+ # Give all artists of a doujinshi
247
+ #
248
+ # @see Doujinshi#tags
249
+ #
127
250
  def artists
128
251
  res = @client.body.match(%r{Artists:\s+<span class="tags">(.+)<\/span>})
129
252
 
130
253
  parse_tags(res[1])
131
254
  end
132
255
 
256
+ #
257
+ # Give a counter of artists
258
+ #
259
+ # @see Doujinshi#count_tags
260
+ #
133
261
  def count_artists
134
262
  res = @client.body.match(%r{Artists:\s+<span class="tags">(.+)<\/span>})
135
263
 
136
264
  res.nil? ? 0 : parse_tags(res[1]).length
137
265
  end
138
266
 
267
+ #
268
+ # Check if a particular doujinshi have some artists
269
+ #
270
+ # @see Doujinshi#tags?
271
+ #
139
272
  def artists?
140
273
  !@client.body.match(%r{Artists:\s+<span class="tags">(.+)<\/span>}).nil?
141
274
  end
142
275
 
276
+ #
277
+ # Give all groups of a doujinshi
278
+ #
279
+ # @see Doujinshi#tags
280
+ #
143
281
  def groups
144
282
  res = @client.body.match(%r{Groups:\s+<span class="tags">(.+)<\/span>})
145
283
 
146
284
  parse_tags(res[1])
147
285
  end
148
286
 
287
+ #
288
+ # Give a counter of groups
289
+ #
290
+ # @see Doujinshi#count_tags
291
+ #
149
292
  def count_groups
150
293
  res = @client.body.match(%r{Groups:\s+<span class="tags">(.+)<\/span>})
151
294
 
152
295
  res.nil? ? 0 : parse_tags(res[1]).length
153
296
  end
154
297
 
298
+ #
299
+ # Check if a particular doujinshi have some groups
300
+ #
301
+ # @see Doujinshi#tags?
302
+ #
155
303
  def groups?
156
304
  !@client.body.match(%r{Groups:\s+<span class="tags">(.+)<\/span>}).nil?
157
305
  end
158
306
 
307
+ #
308
+ # Give all languages of a doujinshi
309
+ #
310
+ # @see Doujinshi#tags
311
+ #
159
312
  def languages
160
313
  res = @client.body.match(%r{Languages:\s+<span class="tags">(.+)<\/span>})
161
314
 
162
315
  parse_tags(res[1])
163
316
  end
164
317
 
318
+ #
319
+ # Give a counter of languages
320
+ #
321
+ # @see Doujinshi#count_tags
322
+ #
165
323
  def count_languages
166
324
  res = @client.body.match(%r{Languages:\s+<span class="tags">(.+)<\/span>})
167
325
 
168
326
  res.nil? ? 0 : parse_tags(res[1]).length
169
327
  end
170
328
 
329
+ #
330
+ # Check if a particular doujinshi have some languages
331
+ #
332
+ # @see Doujinshi#tags?
333
+ #
171
334
  def languages?
172
335
  !@client.body.match(%r{Languages:\s+<span class="tags">(.+)<\/span>}).nil?
173
336
  end
174
337
 
338
+ #
339
+ # Give all categories of a doujinshi
340
+ #
341
+ # @see Doujinshi#tags
342
+ #
175
343
  def categories
176
344
  res = @client.body.match(%r{Categories:\s+<span class="tags">(.+)<\/span>})
177
345
 
178
346
  parse_tags(res[1])
179
347
  end
180
348
 
349
+ #
350
+ # Give a counter of categories
351
+ #
352
+ # @see Doujinshi#count_tags
353
+ #
181
354
  def count_categories
182
355
  res = @client.body.match(%r{Categories:\s+<span class="tags">(.+)<\/span>})
183
356
 
184
357
  res.nil? ? 0 : parse_tags(res[1]).length
185
358
  end
186
359
 
360
+ #
361
+ # Check if a particular doujinshi have some categories
362
+ #
363
+ # @see Doujinshi#tags?
364
+ #
187
365
  def categories?
188
366
  !@client.body.match(%r{Categories:\s+<span class="tags">(.+)<\/span>}).nil?
189
367
  end
368
+
369
+ #
370
+ # @private
371
+ #
372
+
373
+ private
374
+
375
+ def parse_tags(res)
376
+ res.split(%r{<a(.+?)<\/a>}).reject(&:empty?).map do |line|
377
+ id = line.match(/tag-(\d+)/)[1]
378
+ name = line.match(/">(.+?)</)[1].strip
379
+ count = line.match(/\((.+?)\)</)[1].tr(',', '').to_i
380
+ url = line.match(/href=\"(.+?)\"/)[1]
381
+
382
+ Tag.new(id, name, count, url)
383
+ end
384
+ end
190
385
  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.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gael Roussel
@@ -21,6 +21,7 @@ homepage: https://rubygems.org/gems/nhentai-api
21
21
  licenses:
22
22
  - MIT
23
23
  metadata:
24
+ documentation_uri: https://www.rubydoc.info/github/groussel42/nhentai-api
24
25
  source_code_uri: https://github.com/groussel42/nhentai-api
25
26
  post_install_message:
26
27
  rdoc_options: []