opendmm 0.1.4 → 0.1.5

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 (193) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/Rakefile +35 -27
  4. data/bin/opendmm +7 -7
  5. data/lib/opendmm.rb +35 -26
  6. data/lib/opendmm/maker.rb +18 -59
  7. data/lib/opendmm/makers/aknr.rb +18 -34
  8. data/lib/opendmm/makers/ako3.rb +18 -34
  9. data/lib/opendmm/makers/anna_and_hanako.rb +20 -36
  10. data/lib/opendmm/makers/apa.rb +19 -35
  11. data/lib/opendmm/makers/aroma.rb +40 -54
  12. data/lib/opendmm/makers/attackers.rb +30 -48
  13. data/lib/opendmm/makers/aurora.rb +24 -40
  14. data/lib/opendmm/makers/baltan.rb +20 -36
  15. data/lib/opendmm/makers/befree.rb +22 -38
  16. data/lib/opendmm/makers/bi.rb +24 -40
  17. data/lib/opendmm/makers/bijin_majo.rb +19 -35
  18. data/lib/opendmm/makers/candy.rb +27 -43
  19. data/lib/opendmm/makers/caribbean.rb +21 -36
  20. data/lib/opendmm/makers/cross.rb +22 -39
  21. data/lib/opendmm/makers/dip.rb +22 -38
  22. data/lib/opendmm/makers/dmm_collection.rb +19 -35
  23. data/lib/opendmm/makers/ebody.rb +22 -38
  24. data/lib/opendmm/makers/ideapocket.rb +42 -60
  25. data/lib/opendmm/makers/kawaii.rb +21 -37
  26. data/lib/opendmm/makers/kira_kira.rb +21 -37
  27. data/lib/opendmm/makers/madonna.rb +21 -37
  28. data/lib/opendmm/makers/moodyz.rb +41 -44
  29. data/lib/opendmm/makers/munekyunkissa.rb +21 -37
  30. data/lib/opendmm/makers/opera.rb +27 -43
  31. data/lib/opendmm/makers/oppai.rb +33 -51
  32. data/lib/opendmm/makers/premium.rb +23 -39
  33. data/lib/opendmm/makers/prestige.rb +40 -58
  34. data/lib/opendmm/makers/ran_maru.rb +29 -46
  35. data/lib/opendmm/makers/s1.rb +21 -37
  36. data/lib/opendmm/makers/s_cute.rb +41 -55
  37. data/lib/opendmm/makers/sod.rb +23 -39
  38. data/lib/opendmm/makers/tameikegoro.rb +22 -38
  39. data/lib/opendmm/makers/to_satsu.rb +20 -36
  40. data/lib/opendmm/makers/waap.rb +24 -41
  41. data/lib/opendmm/search_engine.rb +20 -0
  42. data/lib/opendmm/search_engines/dmm.rb +38 -58
  43. data/lib/opendmm/search_engines/jav_library.rb +32 -63
  44. data/lib/opendmm/site.rb +73 -0
  45. data/lib/opendmm/utils.rb +22 -2
  46. data/lib/opendmm/version.rb +1 -1
  47. data/test/{fixtures → dmm_fixtures}/DMYJ-001.json +1 -1
  48. data/test/fixture_test.rb +17 -13
  49. data/test/{fixtures → jav_library_fixtures}/XV-100.json +0 -0
  50. data/test/{fixtures → jav_library_fixtures}/XV-1000.json +0 -0
  51. data/test/{fixtures → maker_fixtures}/ABP-013.json +0 -0
  52. data/test/{fixtures → maker_fixtures}/ABS-014.json +0 -0
  53. data/test/{fixtures → maker_fixtures}/ABY-003.json +0 -0
  54. data/test/{fixtures → maker_fixtures}/ADN-019.json +0 -0
  55. data/test/{fixtures → maker_fixtures}/AIR-017.json +1 -1
  56. data/test/{fixtures → maker_fixtures}/AKO-011.json +1 -1
  57. data/test/{fixtures → maker_fixtures}/ALB-182.json +0 -0
  58. data/test/{fixtures → maker_fixtures}/ANND-066.json +0 -0
  59. data/test/{fixtures → maker_fixtures}/AP-001.json +0 -0
  60. data/test/{fixtures → maker_fixtures}/APAA-182.json +0 -0
  61. data/test/{fixtures → maker_fixtures}/APAK-051.json +0 -0
  62. data/test/{fixtures → maker_fixtures}/ARM-191.json +0 -0
  63. data/test/{fixtures → maker_fixtures}/ARMG-223.json +0 -0
  64. data/test/{fixtures → maker_fixtures}/ATID-183.json +0 -0
  65. data/test/{fixtures → maker_fixtures}/BBI-104.json +0 -0
  66. data/test/{fixtures → maker_fixtures}/BEB-001.json +0 -0
  67. data/test/{fixtures → maker_fixtures}/BF-175.json +0 -0
  68. data/test/{fixtures → maker_fixtures}/BID-017.json +0 -0
  69. data/test/{fixtures → maker_fixtures}/BIJN-006.json +0 -0
  70. data/test/{fixtures → maker_fixtures}/BLK-049.json +0 -0
  71. data/test/{fixtures → maker_fixtures}/BRA-002.json +0 -0
  72. data/test/{fixtures → maker_fixtures}/BWB-005.json +0 -0
  73. data/test/{fixtures → maker_fixtures}/CHN-008.json +0 -0
  74. data/test/{fixtures → maker_fixtures}/CHS-015.json +0 -0
  75. data/test/{fixtures → maker_fixtures}/CLUB-003.json +0 -0
  76. data/test/{fixtures → maker_fixtures}/CND-012.json +0 -0
  77. data/test/{fixtures → maker_fixtures}/CND-062.json +0 -0
  78. data/test/{fixtures → maker_fixtures}/CRAD-099.json +0 -0
  79. data/test/{fixtures → maker_fixtures}/CRPD-451.json +0 -0
  80. data/test/{fixtures → maker_fixtures}/CRSS-013.json +0 -0
  81. data/test/{fixtures → maker_fixtures}/CWM-156.json +1 -1
  82. data/test/fixtures/Carib 021511-620.json b/data/test/maker_fixtures/Carib → 021511-620.json +0 -0
  83. data/test/{fixtures → maker_fixtures}/DCOL-017.json +1 -1
  84. data/test/{fixtures → maker_fixtures}/DGL-007.json +1 -1
  85. data/test/{fixtures → maker_fixtures}/DOM-045.json +0 -0
  86. data/test/{fixtures → maker_fixtures}/EBOD-109.json +0 -0
  87. data/test/{fixtures → maker_fixtures}/ECB-078.json +1 -1
  88. data/test/{fixtures → maker_fixtures}/EDD-189.json +0 -0
  89. data/test/{fixtures → maker_fixtures}/ESK-232.json +0 -0
  90. data/test/{fixtures → maker_fixtures}/EZD-369.json +0 -0
  91. data/test/{fixtures → maker_fixtures}/FSET-399.json +0 -0
  92. data/test/{fixtures → maker_fixtures}/HAZ-009.json +0 -0
  93. data/test/{fixtures → maker_fixtures}/HON-001.json +0 -0
  94. data/test/{fixtures → maker_fixtures}/IDBD-447.json +0 -0
  95. data/test/{fixtures → maker_fixtures}/INU-013.json +0 -0
  96. data/test/{fixtures → maker_fixtures}/IPSD-041.json +0 -0
  97. data/test/{fixtures → maker_fixtures}/IPTD-464.json +0 -0
  98. data/test/{fixtures → maker_fixtures}/IPTD-629.json +0 -0
  99. data/test/{fixtures → maker_fixtures}/IPZ-005.json +0 -0
  100. data/test/{fixtures → maker_fixtures}/JBD-153.json +0 -0
  101. data/test/{fixtures → maker_fixtures}/JBS-004.json +0 -0
  102. data/test/{fixtures → maker_fixtures}/JOB-010.json +0 -0
  103. data/test/{fixtures → maker_fixtures}/JUC-285.json +0 -0
  104. data/test/{fixtures → maker_fixtures}/JUFD-137.json +0 -0
  105. data/test/{fixtures → maker_fixtures}/JUX-007.json +0 -0
  106. data/test/{fixtures → maker_fixtures}/JUX-119.json +0 -0
  107. data/test/{fixtures → maker_fixtures}/KAWD-249.json +1 -1
  108. data/test/{fixtures → maker_fixtures}/KIRD-147.json +0 -0
  109. data/test/{fixtures → maker_fixtures}/KISD-042.json +0 -0
  110. data/test/{fixtures → maker_fixtures}/LLR-005.json +0 -0
  111. data/test/{fixtures → maker_fixtures}/MAS-042.json +0 -0
  112. data/test/{fixtures → maker_fixtures}/MBD-148.json +0 -0
  113. data/test/{fixtures → maker_fixtures}/MDC-002.json +0 -0
  114. data/test/{fixtures → maker_fixtures}/MDYD-544.json +0 -0
  115. data/test/{fixtures → maker_fixtures}/MEK-008.json +0 -0
  116. data/test/{fixtures → maker_fixtures}/MIAD-490.json +0 -0
  117. data/test/{fixtures → maker_fixtures}/MIDD-599.json +0 -0
  118. data/test/{fixtures → maker_fixtures}/MIDD-643.json +0 -0
  119. data/test/{fixtures → maker_fixtures}/MIDD-644.json +0 -0
  120. data/test/{fixtures → maker_fixtures}/MIDE-004.json +0 -0
  121. data/test/{fixtures → maker_fixtures}/MIGD-284.json +0 -0
  122. data/test/{fixtures → maker_fixtures}/MIGD-336.json +0 -0
  123. data/test/{fixtures → maker_fixtures}/MIGD-337.json +0 -0
  124. data/test/{fixtures → maker_fixtures}/MIMK-005.json +0 -0
  125. data/test/{fixtures → maker_fixtures}/MINT-004.json +0 -0
  126. data/test/{fixtures → maker_fixtures}/MIQD-010.json +0 -0
  127. data/test/{fixtures → maker_fixtures}/MIRD-071.json +0 -0
  128. data/test/{fixtures → maker_fixtures}/MIRD-072.json +0 -0
  129. data/test/{fixtures → maker_fixtures}/MIRD-073.json +0 -0
  130. data/test/{fixtures → maker_fixtures}/MIXS-005.json +0 -0
  131. data/test/{fixtures → maker_fixtures}/MMY-010.json +0 -0
  132. data/test/{fixtures → maker_fixtures}/NAGE-001.json +0 -0
  133. data/test/{fixtures → maker_fixtures}/NDR-001.json +0 -0
  134. data/test/{fixtures → maker_fixtures}/NOF-003.json +0 -0
  135. data/test/{fixtures → maker_fixtures}/NPS-130.json +0 -0
  136. data/test/{fixtures → maker_fixtures}/OBA-045.json +1 -1
  137. data/test/{fixtures → maker_fixtures}/ONSD-570.json +0 -0
  138. data/test/{fixtures → maker_fixtures}/OPUD-125.json +1 -1
  139. data/test/{fixtures → maker_fixtures}/OSR-003.json +0 -0
  140. data/test/{fixtures → maker_fixtures}/PARM-028.json +0 -0
  141. data/test/{fixtures → maker_fixtures}/PBD-134.json +0 -0
  142. data/test/{fixtures → maker_fixtures}/PGD-306.json +0 -0
  143. data/test/{fixtures → maker_fixtures}/PJD-085.json +0 -0
  144. data/test/{fixtures → maker_fixtures}/PPB-008.json +0 -0
  145. data/test/{fixtures → maker_fixtures}/PPP-001.json +0 -0
  146. data/test/{fixtures → maker_fixtures}/PPPD-102.json +1 -1
  147. data/test/{fixtures → maker_fixtures}/PPSD-028.json +1 -1
  148. data/test/{fixtures → maker_fixtures}/PPT-004.json +0 -0
  149. data/test/{fixtures → maker_fixtures}/PTS-230.json +0 -0
  150. data/test/{fixtures → maker_fixtures}/PTV-001.json +0 -0
  151. data/test/{fixtures → maker_fixtures}/PXD-027.json +0 -0
  152. data/test/{fixtures → maker_fixtures}/RAW-005.json +0 -0
  153. data/test/{fixtures → maker_fixtures}/RBD-183.json +0 -0
  154. data/test/fixtures/S-Cute 248_hibiki_07.json b/data/test/maker_fixtures/S-Cute → 248_hibiki_07.json +0 -0
  155. data/test/fixtures/S-Cute 353_rena_01.json b/data/test/maker_fixtures/S-Cute → 353_rena_01.json +0 -0
  156. data/test/fixtures/S-Cute ps5_07_rimu.json b/data/test/maker_fixtures/S-Cute → ps5_07_rimu.json +0 -0
  157. data/test/fixtures/S-Cute ps6_99_reona.json b/data/test/maker_fixtures/S-Cute → ps6_99_reona.json +0 -0
  158. data/test/fixtures/S-Cute ps7_83_akari2.json b/data/test/maker_fixtures/S-Cute → ps7_83_akari2.json +0 -0
  159. data/test/fixtures/S-Cute swm_05_risa2.json b/data/test/maker_fixtures/S-Cute → swm_05_risa2.json +0 -0
  160. data/test/{fixtures → maker_fixtures}/SAD-031.json +0 -0
  161. data/test/{fixtures → maker_fixtures}/SDDE-312.json +0 -0
  162. data/test/{fixtures → maker_fixtures}/SDMT-802.json +0 -0
  163. data/test/{fixtures → maker_fixtures}/SDMU-008.json +0 -0
  164. data/test/{fixtures → maker_fixtures}/SDNM-011.json +0 -0
  165. data/test/{fixtures → maker_fixtures}/SET-007.json +0 -0
  166. data/test/{fixtures → maker_fixtures}/SGA-001.json +1 -0
  167. data/test/{fixtures → maker_fixtures}/SHKD-415.json +3 -3
  168. data/test/{fixtures → maker_fixtures}/SNIS-041.json +0 -0
  169. data/test/{fixtures → maker_fixtures}/SOE-259.json +0 -0
  170. data/test/{fixtures → maker_fixtures}/SPC-001.json +0 -0
  171. data/test/{fixtures → maker_fixtures}/SPS-008.json +0 -0
  172. data/test/{fixtures → maker_fixtures}/SRS-015.json +0 -0
  173. data/test/{fixtures → maker_fixtures}/SSPD-077.json +0 -0
  174. data/test/{fixtures → maker_fixtures}/STAR-359.json +0 -0
  175. data/test/{fixtures → maker_fixtures}/SUPD-065.json +0 -0
  176. data/test/{fixtures → maker_fixtures}/TDT-018.json +0 -0
  177. data/test/{fixtures → maker_fixtures}/TMAM-034.json +0 -0
  178. data/test/{fixtures → maker_fixtures}/TMCY-039.json +0 -0
  179. data/test/{fixtures → maker_fixtures}/TMDI-040.json +0 -0
  180. data/test/{fixtures → maker_fixtures}/TMEM-044.json +0 -0
  181. data/test/{fixtures → maker_fixtures}/TMVI-042.json +0 -0
  182. data/test/{fixtures → maker_fixtures}/TRD-062.json +0 -0
  183. data/test/{fixtures → maker_fixtures}/TYOD-232.json +1 -1
  184. data/test/{fixtures → maker_fixtures}/URE-011.json +0 -0
  185. data/test/{fixtures → maker_fixtures}/WA-201.json +0 -0
  186. data/test/{fixtures → maker_fixtures}/WAT-003.json +0 -0
  187. data/test/{fixtures → maker_fixtures}/WPC-002.json +0 -0
  188. data/test/{fixtures → maker_fixtures}/WSS-231.json +1 -1
  189. data/test/{fixtures → maker_fixtures}/XND-023.json +0 -0
  190. data/test/{fixtures → maker_fixtures}/YRH-008.json +0 -0
  191. data/test/{fixtures → maker_fixtures}/YRZ-009.json +0 -0
  192. data/test/{fixtures → maker_fixtures}/ZEX-068.json +0 -0
  193. metadata +294 -292
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a6ea973455b774abc19e51008836971866daac43
4
- data.tar.gz: 6c38bdafae17d2f0babc4a962fa405601ae235ee
3
+ metadata.gz: 07cd647f8aaa049f14ea6485efb50f227954265c
4
+ data.tar.gz: 1b086c6958c894635be7435740d06f5dc505e701
5
5
  SHA512:
6
- metadata.gz: 15834035612a443ac0ece31c4b907ab9d2e50bdee73302327bc4ab31ac1f036a09c751a03c6af33843ab94751336a99cfae03505837bb6eb518c77dd74eca6f4
7
- data.tar.gz: 8d7d852fe2f8b9271b476b646fc885ad0ce7fb6f94827cc4a423463fec24fa4c586a6ea35f305621d038043447834230cb82dfc0c8234b74fc632f579a259b26
6
+ metadata.gz: ff95d011bdda8bcb5b2ddd0ed5ce0e96efacf253a1a2d0dbf757355accbe3d206480ef15d509d8e27f52fd86831e9d44f57c8b474d7fbc9a377a79d0bd28b686
7
+ data.tar.gz: fb94f7d85805152bb42e4f23dc3b236eedb5b816f7fe990ad4fec5f6999f806523bf0006d46c23bbac213a50e4c275f02f11bd1814da155299e1993843a6fd58
@@ -1,3 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.1.2
4
+ branch:
5
+ only:
6
+ - master
data/Rakefile CHANGED
@@ -15,7 +15,7 @@ namespace :fixture do
15
15
  puts "#{args[:id]} not found"
16
16
  next
17
17
  end
18
- File.open(File.join(File.dirname(__FILE__) + "/test/fixtures/#{args[:id]}.json"), 'w') do |file|
18
+ File.open(File.join(File.dirname(__FILE__) + "/test/maker_fixtures/#{args[:id]}.json"), 'w') do |file|
19
19
  puts "Generating #{args[:id]}.json"
20
20
  file.puts JSON.pretty_generate(fixture)
21
21
  end
@@ -23,7 +23,7 @@ namespace :fixture do
23
23
 
24
24
  desc 'Regenerate all fixtures'
25
25
  task :regenerate => :install do
26
- Dir[File.dirname(__FILE__) + '/test/fixtures/*.json'].each do |path|
26
+ Dir[File.dirname(__FILE__) + '/test/maker_fixtures/*.json'].each do |path|
27
27
  File.open(path, 'w') do |file|
28
28
  id = File.basename(path, '.json')
29
29
  puts "Generating #{id}.json"
@@ -39,35 +39,43 @@ namespace :maker do
39
39
  File.open(File.join(File.dirname(__FILE__) + "/lib/opendmm/makers/#{args[:name].underscore}.rb"), 'w') do |file|
40
40
  puts "Generating #{args[:name].underscore}.rb"
41
41
  file.puts <<-CODE
42
- module OpenDMM
43
- module Maker
44
- module #{args[:name].underscore.classify}
45
- include Maker
42
+ base_uri 'example.com'
46
43
 
47
- module Site
48
- include HTTParty
49
- base_uri 'example.com'
44
+ register_product(
45
+ /^(EXAM)-?(\d{3})$/i,
46
+ '#{$1.downcase}#{$2}',
47
+ )
50
48
 
51
- def self.item(name)
52
- case name
53
- when /^(EXAM)-?(\\d{3})$/i
54
- get("/#\{$1.downcase\}#\{$2\}")
55
- end
56
- end
57
- end
49
+ private
58
50
 
59
- module Parser
60
- def self.parse(content)
61
- page_uri = content.request.last_uri
62
- html = Nokogiri::HTML(content)
63
- return {
64
- page: page_uri.to_s,
65
- }
66
- end
67
- end
68
- end
69
- end
51
+ def self.parse_product_html(html)
52
+ {
53
+ # actresses: Array
54
+ # actress_types: Array
55
+ # boobs: String
56
+ # brand: String
57
+ # categories: Array
58
+ # code: String
59
+ # cover_image: String
60
+ # description: String
61
+ # directors: Array
62
+ # genres: Array
63
+ # label: String
64
+ # maker: String
65
+ # movie_length: String
66
+ # page: String
67
+ # release_date: String
68
+ # sample_images: Array
69
+ # scenes: Array
70
+ # series: String
71
+ # subtitle: String
72
+ # theme: String
73
+ # thumbnail_image: String
74
+ # title: String
75
+ # __extra: Hash
76
+ }
70
77
  end
78
+
71
79
  CODE
72
80
  end
73
81
  end
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "json"
4
- require "optparse"
5
- require "pp"
6
- require "opendmm"
3
+ require 'json'
4
+ require 'optparse'
5
+ require 'pp'
6
+ require 'opendmm'
7
7
 
8
8
  options = { json: false }
9
9
  OptionParser.new do |opts|
10
- opts.on("-j", "--[no-]json", "JSON mode") do |j|
10
+ opts.on('-j', '--[no-]json', 'JSON mode') do |j|
11
11
  options[:json] = j
12
12
  end
13
13
  end.parse!
14
14
 
15
- details = OpenDMM.search!(ARGV.first)
15
+ details = OpenDMM.search(ARGV.first, true)
16
16
  if details
17
17
  if options[:json]
18
18
  puts JSON.pretty_generate(details)
@@ -20,5 +20,5 @@ if details
20
20
  pp details
21
21
  end
22
22
  else
23
- puts "Unknown product: " + ARGV.first
23
+ puts 'Unknown product: ' + ARGV.first
24
24
  end
@@ -1,34 +1,43 @@
1
1
  require 'opendmm/version'
2
2
  require 'opendmm/maker'
3
- require 'opendmm/search_engines/jav_library'
4
- require 'opendmm/search_engines/dmm'
3
+ require 'opendmm/search_engine'
5
4
 
6
5
  module OpenDMM
7
- def self.search!(name)
8
- details = Maker.search(name) ||
9
- SearchEngine::JavLibrary.search(name) ||
10
- SearchEngine::Dmm.search(name)
11
- return nil unless details
12
- details = details.squish_hard
13
- details[:cover_image] = join_if_relative(details[:page], details[:cover_image])
14
- details[:thumbnail_image] = join_if_relative(details[:page], details[:thumbnail_image])
15
- details[:sample_images] = details[:sample_images].map do |uri|
16
- join_if_relative(details[:page], uri)
17
- end if details[:sample_images]
18
- details[:movie_length] = ChronicDuration.parse(details[:movie_length]) if details[:movie_length]
19
- details[:release_date] = Date.parse(details[:release_date]) if details[:release_date]
20
- details
21
- end
6
+ # Known fields:
7
+ #
8
+ # {
9
+ # actresses: Array
10
+ # actress_types: Array
11
+ # boobs: String
12
+ # brand: String
13
+ # categories: Array
14
+ # code: String
15
+ # cover_image: String
16
+ # description: String
17
+ # directors: Array
18
+ # genres: Array
19
+ # label: String
20
+ # maker: String
21
+ # movie_length: String
22
+ # page: String
23
+ # release_date: String
24
+ # sample_images: Array
25
+ # scenes: Array
26
+ # series: String
27
+ # subtitle: String
28
+ # theme: String
29
+ # thumbnail_image: String
30
+ # title: String
31
+ # __extra: Hash
32
+ # }
22
33
 
23
- def self.search(name)
24
- search! name
25
- rescue
34
+ def self.search(name, debug = false)
35
+ Maker.search(name) || SearchEngine::JavLibrary.search(name) || SearchEngine::Dmm.search(name)
36
+ rescue => e
37
+ if debug
38
+ puts e.inspect
39
+ puts e.backtrace.join("\n")
40
+ end
26
41
  nil
27
42
  end
28
-
29
- private
30
- def self.join_if_relative(page_url, image_url)
31
- return nil unless image_url
32
- image_url.start_with?('http') ? image_url : URI.join(page_url, image_url).to_s
33
- end
34
43
  end
@@ -1,67 +1,12 @@
1
- require 'active_support/core_ext/string/filters'
2
- require 'httparty'
3
- require 'logger'
4
- require 'nokogiri'
5
- require 'opendmm/utils'
1
+ require 'opendmm/site'
6
2
 
7
3
  module OpenDMM
8
4
  module Maker
9
- @@makers = []
10
-
11
- def self.included(klass)
12
- klass.module_eval <<-CODE
13
- module Site
14
- include HTTParty
15
- follow_redirects false
16
-
17
- def self.get(uri)
18
- super(uri)
19
- rescue Errno::ETIMEDOUT => e
20
- tries ||= 0
21
- tries++
22
- tries <= 5 ? retry : raise
23
- end
24
- end
25
-
26
- def self.search(name)
27
- item = Site.item(name)
28
- Parser.parse(item) if item && item.code == 200
29
- end
30
- CODE
31
- @@makers << klass
32
- end
33
-
34
- # Known fields:
35
- #
36
- # {
37
- # actresses: Array
38
- # actress_types: Array
39
- # boobs: String
40
- # brand: String
41
- # categories: Array
42
- # code: String
43
- # cover_image: String
44
- # description: String
45
- # directors: Array
46
- # genres: Array
47
- # label: String
48
- # maker: String
49
- # movie_length: String
50
- # page: String
51
- # release_date: String
52
- # sample_images: Array
53
- # scenes: Array
54
- # series: String
55
- # subtitle: String
56
- # theme: String
57
- # thumbnail_image: String
58
- # title: String
59
- # __extra: Hash
60
- # }
5
+ @@makers = Array.new
61
6
 
62
7
  def self.search(name)
63
8
  @@makers.each do |maker|
64
- result = maker.search(name)
9
+ result = maker.product(name)
65
10
  return result if result
66
11
  end
67
12
  nil
@@ -70,5 +15,19 @@ module OpenDMM
70
15
  end
71
16
 
72
17
  Dir[File.dirname(__FILE__) + '/makers/*.rb'].each do |file|
73
- require file
18
+ module_name = File.basename(file, '.rb').camelize
19
+ eval <<-MAKER
20
+
21
+ module OpenDMM
22
+ module Maker
23
+ module #{module_name}
24
+ include Site
25
+ #{File.read(file)}
26
+ end
27
+
28
+ @@makers << #{module_name}
29
+ end
30
+ end
31
+
32
+ MAKER
74
33
  end
@@ -1,38 +1,22 @@
1
- module OpenDMM
2
- module Maker
3
- module Aknr
4
- include Maker
1
+ base_uri 'www.aknr.com'
5
2
 
6
- module Site
7
- base_uri 'www.aknr.com'
3
+ register_product(
4
+ /^(FSET)-?(\d{3})$/i,
5
+ '/works/#{$1.downcase}-#{$2}/',
6
+ )
8
7
 
9
- def self.item(name)
10
- case name
11
- when /^(FSET)-?(\d{3})$/i
12
- get("/works/#{$1.downcase}-#{$2}/")
13
- end
14
- end
15
- end
8
+ private
16
9
 
17
- module Parser
18
- def self.parse(content)
19
- page_uri = content.request.last_uri
20
- html = Nokogiri::HTML(content)
21
- return {
22
- actresses: html.css('//*[@id="info"]/div[3]/div[2]').text.split,
23
- code: html.css('//*[@id="info"]/div[5]/div[2]').text,
24
- cover_image: html.at_css('#jktimg_l2 > a')['href'],
25
- directors: html.css('//*[@id="info"]/div[4]/div[2]').text.split,
26
- maker: 'AKNR',
27
- movie_length: html.css('//*[@id="info"]/div[6]/div[2]').text,
28
- page: page_uri.to_s,
29
- release_date: html.css('//*[@id="info"]/div[2]/div[2]').text,
30
- sample_images: html.css('#photo > p > a').map { |a| a['href'] },
31
- thumbnail_image: html.at_css('#jktimg_l2 > a > img')['src'],
32
- title: html.css('#mainContent2 > h1').text,
33
- }
34
- end
35
- end
36
- end
37
- end
10
+ def self.parse_product_html(html)
11
+ {
12
+ actresses: html.css('//*[@id="info"]/div[3]/div[2]').text.split,
13
+ cover_image: html.at_css('#jktimg_l2 > a')['href'],
14
+ directors: html.css('//*[@id="info"]/div[4]/div[2]').text.split,
15
+ maker: 'AKNR',
16
+ movie_length: html.css('//*[@id="info"]/div[6]/div[2]').text,
17
+ release_date: html.css('//*[@id="info"]/div[2]/div[2]').text,
18
+ sample_images: html.css('#photo > p > a').map { |a| a['href'] },
19
+ thumbnail_image: html.at_css('#jktimg_l2 > a > img')['src'],
20
+ title: html.css('#mainContent2 > h1').text,
21
+ }
38
22
  end
@@ -1,38 +1,22 @@
1
- module OpenDMM
2
- module Maker
3
- module Ako3
4
- include Maker
1
+ base_uri 'www.ako-3.com'
5
2
 
6
- module Site
7
- base_uri 'www.ako-3.com'
3
+ register_product(
4
+ /^(AKO)-?(\d{3})$/i,
5
+ '/work/item.php?itemcode=#{$1.upcase}#{$2}',
6
+ )
8
7
 
9
- def self.item(name)
10
- case name
11
- when /^(AKO)-?(\d{3})$/i
12
- get("/work/item.php?itemcode=#{$1.upcase}#{$2}")
13
- end
14
- end
15
- end
8
+ private
16
9
 
17
- module Parser
18
- def self.parse(content)
19
- page_uri = content.request.last_uri
20
- html = Nokogiri::HTML(content)
21
- specs = Utils.hash_by_split(html.css('div#spec-area > div.release').map(&:text))
22
- return {
23
- actresses: [ html.css('//*[@id="spec-area"]/div[2]').text ],
24
- code: specs['商品番号'],
25
- cover_image: html.at_css('div.jacket a')['href'],
26
- description: html.css('div#caption').text,
27
- maker: specs['メーカー'],
28
- page: page_uri.to_s,
29
- release_date: specs['配信日'],
30
- sample_images: html.css('ul.sampleimg li a').map { |a| a['href'] },
31
- thumbnail_image: html.at_css('#title-area > div > div.jacket > a > img')['src'],
32
- title: html.css('div.maintitle').text,
33
- }
34
- end
35
- end
36
- end
37
- end
10
+ def self.parse_product_html(html)
11
+ specs = Utils.hash_by_split(html.css('div#spec-area > div.release').map(&:text))
12
+ {
13
+ actresses: [ html.css('//*[@id="spec-area"]/div[2]').text ],
14
+ cover_image: html.at_css('div.jacket a')['href'],
15
+ description: html.css('div#caption').text,
16
+ maker: specs['メーカー'],
17
+ release_date: specs['配信日'],
18
+ sample_images: html.css('ul.sampleimg li a').map { |a| a['href'] },
19
+ thumbnail_image: html.at_css('#title-area > div > div.jacket > a > img')['src'],
20
+ title: html.css('div.maintitle').text,
21
+ }
38
22
  end
@@ -1,40 +1,24 @@
1
- module OpenDMM
2
- module Maker
3
- module AnnaAndHanako
4
- include Maker
1
+ base_uri 'anna-and-hanako.jp'
5
2
 
6
- module Site
7
- base_uri 'anna-and-hanako.jp'
3
+ register_product(
4
+ /^(ANND)-?(\d{3})$/i,
5
+ '/works/#{$1.downcase}/#{$1.downcase}#{$2}.html',
6
+ )
8
7
 
9
- def self.item(name)
10
- case name
11
- when /^(ANND)-?(\d{3})$/i
12
- get("/works/#{$1.downcase}/#{$1.downcase}#{$2}.html")
13
- end
14
- end
15
- end
8
+ private
16
9
 
17
- module Parser
18
- def self.parse(content)
19
- page_uri = content.request.last_uri
20
- html = Nokogiri::HTML(Utils.force_utf8(content))
21
- specs = Utils.hash_by_split(html.xpath('//*[@id="pake-bottom-box_r"]/dl/p').map(&:text))
22
- return {
23
- actresses: specs['出演者'].split('/'),
24
- code: specs['品番'],
25
- cover_image: html.at_xpath('//*[@id="pake-bottom-box"]/dl/a')['href'],
26
- description: html.xpath('//*[@id="txt-bottom-box"]').text,
27
- directors: specs['監督'].split('/'),
28
- maker: 'アンナと花子',
29
- movie_length: specs['収録時間'],
30
- page: page_uri.to_s,
31
- release_date: specs['発売日'],
32
- sample_images: html.xpath('//*[@id="mein-sanpuru-sam"]/a').map { |a| a['href'] },
33
- thumbnail_image: html.at_xpath('//*[@id="pake-bottom-box"]/dl/a/img')['src'],
34
- title: html.xpath('//*[@id="mein-left-new-release-box"]/div/div/h5').text,
35
- }
36
- end
37
- end
38
- end
39
- end
10
+ def self.parse_product_html(html)
11
+ specs = Utils.hash_by_split(html.xpath('//*[@id="pake-bottom-box_r"]/dl/p').map(&:text))
12
+ {
13
+ actresses: specs['出演者'].split('/'),
14
+ cover_image: html.at_xpath('//*[@id="pake-bottom-box"]/dl/a')['href'],
15
+ description: html.xpath('//*[@id="txt-bottom-box"]').text,
16
+ directors: specs['監督'].split('/'),
17
+ maker: 'アンナと花子',
18
+ movie_length: specs['収録時間'],
19
+ release_date: specs['発売日'],
20
+ sample_images: html.xpath('//*[@id="mein-sanpuru-sam"]/a').map { |a| a['href'] },
21
+ thumbnail_image: html.at_xpath('//*[@id="pake-bottom-box"]/dl/a/img')['src'],
22
+ title: html.xpath('//*[@id="mein-left-new-release-box"]/div/div/h5').text,
23
+ }
40
24
  end