opendmm 0.4.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (276) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +3 -133
  3. data/bin/opendmm +21 -18
  4. data/dev.thor +17 -0
  5. data/lib/opendmm.rb +19 -49
  6. data/lib/opendmm/engines/av_entertainments.rb +81 -0
  7. data/lib/opendmm/engines/caribbean.rb +106 -0
  8. data/lib/opendmm/engines/caribbean_pr.rb +65 -0
  9. data/lib/opendmm/engines/heyzo.rb +49 -0
  10. data/lib/opendmm/engines/jav_library.rb +81 -0
  11. data/lib/opendmm/engines/one_pondo.rb +53 -0
  12. data/lib/opendmm/engines/tokyo_hot.rb +78 -0
  13. data/lib/opendmm/movie.rb +106 -0
  14. data/lib/opendmm/utils/chronic_duration.rb +17 -0
  15. data/lib/opendmm/utils/date.rb +19 -0
  16. data/lib/opendmm/utils/httparty.rb +30 -0
  17. data/lib/opendmm/utils/logger.rb +6 -0
  18. data/lib/opendmm/utils/nokogiri.rb +14 -0
  19. data/lib/opendmm/version.rb +1 -1
  20. data/opendmm.gemspec +2 -0
  21. data/templates/engine.tt +33 -0
  22. data/test/flow_test.rb +33 -0
  23. metadata +47 -457
  24. data/.travis.yml +0 -6
  25. data/lib/opendmm/maker.rb +0 -33
  26. data/lib/opendmm/makers/aknr.rb +0 -22
  27. data/lib/opendmm/makers/ako3.rb +0 -22
  28. data/lib/opendmm/makers/apa.rb +0 -23
  29. data/lib/opendmm/makers/aroma.rb +0 -48
  30. data/lib/opendmm/makers/attackers.rb +0 -36
  31. data/lib/opendmm/makers/aurora.rb +0 -29
  32. data/lib/opendmm/makers/baltan.rb +0 -24
  33. data/lib/opendmm/makers/befree.rb +0 -26
  34. data/lib/opendmm/makers/bi.rb +0 -28
  35. data/lib/opendmm/makers/candy.rb +0 -32
  36. data/lib/opendmm/makers/caribbean.rb +0 -25
  37. data/lib/opendmm/makers/caribbeanpr.rb +0 -33
  38. data/lib/opendmm/makers/cross.rb +0 -26
  39. data/lib/opendmm/makers/das.rb +0 -36
  40. data/lib/opendmm/makers/dip.rb +0 -26
  41. data/lib/opendmm/makers/dmm_collection.rb +0 -23
  42. data/lib/opendmm/makers/doc.rb +0 -56
  43. data/lib/opendmm/makers/ebody.rb +0 -26
  44. data/lib/opendmm/makers/g_area.rb +0 -59
  45. data/lib/opendmm/makers/ideapocket.rb +0 -28
  46. data/lib/opendmm/makers/kawaii.rb +0 -25
  47. data/lib/opendmm/makers/kira_kira.rb +0 -25
  48. data/lib/opendmm/makers/madonna.rb +0 -25
  49. data/lib/opendmm/makers/moodyz.rb +0 -45
  50. data/lib/opendmm/makers/munekyunkissa.rb +0 -25
  51. data/lib/opendmm/makers/one_pondo.rb +0 -44
  52. data/lib/opendmm/makers/opera.rb +0 -29
  53. data/lib/opendmm/makers/oppai.rb +0 -39
  54. data/lib/opendmm/makers/premium.rb +0 -26
  55. data/lib/opendmm/makers/prestige.rb +0 -47
  56. data/lib/opendmm/makers/ran_maru.rb +0 -35
  57. data/lib/opendmm/makers/s1.rb +0 -25
  58. data/lib/opendmm/makers/s_cute.rb +0 -47
  59. data/lib/opendmm/makers/sod.rb +0 -27
  60. data/lib/opendmm/makers/tameikegoro.rb +0 -24
  61. data/lib/opendmm/makers/ten_musume.rb +0 -33
  62. data/lib/opendmm/makers/tokyo_247.rb +0 -41
  63. data/lib/opendmm/makers/waap.rb +0 -28
  64. data/lib/opendmm/makers/xxx.rb +0 -43
  65. data/lib/opendmm/makers_broken/anna_and_hanako.rb +0 -24
  66. data/lib/opendmm/makers_broken/high_scene.rb +0 -32
  67. data/lib/opendmm/makers_broken/to_satsu.rb +0 -24
  68. data/lib/opendmm/search_engine.rb +0 -20
  69. data/lib/opendmm/search_engines/av_entertainments.rb +0 -46
  70. data/lib/opendmm/search_engines/dmm.rb +0 -50
  71. data/lib/opendmm/search_engines/jav_library.rb +0 -39
  72. data/lib/opendmm/search_engines/mgstage.rb +0 -41
  73. data/lib/opendmm/site.rb +0 -80
  74. data/lib/opendmm/utils.rb +0 -126
  75. data/test/av_entertainments_fixtures/MKBD-S40.json +0 -36
  76. data/test/av_entertainments_fixtures/SKYHD-108.json +0 -53
  77. data/test/av_entertainments_fixtures/sky107.json +0 -33
  78. data/test/broken/ANND-066.json +0 -30
  79. data/test/broken/BIJN-006.json +0 -26
  80. data/test/broken/CLUB-003.json +0 -23
  81. data/test/broken/HIGH-107.json +0 -29
  82. data/test/broken/SIRO-1088.json +0 -29
  83. data/test/dmm_fixtures/DMYJ-001.json +0 -20
  84. data/test/dmm_fixtures/KHY-009.json +0 -21
  85. data/test/dmm_fixtures/RKI-294.json +0 -31
  86. data/test/dmm_fixtures/dmyj00001.json +0 -20
  87. data/test/dmm_fixtures/dmyj001.json +0 -20
  88. data/test/fixture_test.rb +0 -83
  89. data/test/jav_library_fixtures/DLY-0001.json +0 -21
  90. data/test/jav_library_fixtures/DLY-001.json +0 -18
  91. data/test/jav_library_fixtures/JUFD-379.json +0 -25
  92. data/test/jav_library_fixtures/XV-100.json +0 -18
  93. data/test/jav_library_fixtures/XV-1000.json +0 -24
  94. data/test/jav_library_fixtures/xv100.json +0 -18
  95. data/test/maker_fixtures/10musume 082914_01.json +0 -31
  96. data/test/maker_fixtures/1pondo 011111_006.json +0 -35
  97. data/test/maker_fixtures/1pondo 022506_835.json +0 -8
  98. data/test/maker_fixtures/352_kokona_02.json +0 -26
  99. data/test/maker_fixtures/ABP-013.json +0 -33
  100. data/test/maker_fixtures/ABS-014.json +0 -31
  101. data/test/maker_fixtures/ABY-003.json +0 -32
  102. data/test/maker_fixtures/ADN-019.json +0 -38
  103. data/test/maker_fixtures/ADN-025.json +0 -37
  104. data/test/maker_fixtures/AIR-017.json +0 -34
  105. data/test/maker_fixtures/AKO-011.json +0 -20
  106. data/test/maker_fixtures/ALB-038.json +0 -30
  107. data/test/maker_fixtures/ALB-182.json +0 -31
  108. data/test/maker_fixtures/AP-001.json +0 -24
  109. data/test/maker_fixtures/APAA-182.json +0 -38
  110. data/test/maker_fixtures/APAK-051.json +0 -42
  111. data/test/maker_fixtures/ARM-191.json +0 -28
  112. data/test/maker_fixtures/ARMG-223.json +0 -27
  113. data/test/maker_fixtures/ATID-183.json +0 -41
  114. data/test/maker_fixtures/AVOP-061.json +0 -29
  115. data/test/maker_fixtures/BBI-104.json +0 -34
  116. data/test/maker_fixtures/BEB-001.json +0 -36
  117. data/test/maker_fixtures/BF-175.json +0 -32
  118. data/test/maker_fixtures/BF-254.json +0 -22
  119. data/test/maker_fixtures/BF-263.json +0 -32
  120. data/test/maker_fixtures/BID-017.json +0 -41
  121. data/test/maker_fixtures/BLK-049.json +0 -28
  122. data/test/maker_fixtures/BRA-002.json +0 -34
  123. data/test/maker_fixtures/BWB-005.json +0 -32
  124. data/test/maker_fixtures/CEN-033.json +0 -35
  125. data/test/maker_fixtures/CHN-008.json +0 -31
  126. data/test/maker_fixtures/CHS-015.json +0 -32
  127. data/test/maker_fixtures/CND-012.json +0 -30
  128. data/test/maker_fixtures/CND-062.json +0 -30
  129. data/test/maker_fixtures/CRAD-099.json +0 -38
  130. data/test/maker_fixtures/CRPD-451.json +0 -30
  131. data/test/maker_fixtures/CRS-056.json +0 -18
  132. data/test/maker_fixtures/CRSS-013.json +0 -39
  133. data/test/maker_fixtures/CWM-156.json +0 -34
  134. data/test/maker_fixtures/Carib 021511-620.json +0 -28
  135. data/test/maker_fixtures/Caribpr 082914_940.json +0 -31
  136. data/test/maker_fixtures/DASD-001.json +0 -30
  137. data/test/maker_fixtures/DAZD-001.json +0 -27
  138. data/test/maker_fixtures/DCOL-017.json +0 -26
  139. data/test/maker_fixtures/DGL-007.json +0 -25
  140. data/test/maker_fixtures/DGL-066.json +0 -26
  141. data/test/maker_fixtures/DOM-045.json +0 -36
  142. data/test/maker_fixtures/EBOD-109.json +0 -31
  143. data/test/maker_fixtures/ECB-078.json +0 -33
  144. data/test/maker_fixtures/EDD-189.json +0 -33
  145. data/test/maker_fixtures/ESK-232.json +0 -31
  146. data/test/maker_fixtures/EZD-369.json +0 -32
  147. data/test/maker_fixtures/FSET-399.json +0 -41
  148. data/test/maker_fixtures/FTN-002.json +0 -15
  149. data/test/maker_fixtures/GDW-006.json +0 -18
  150. data/test/maker_fixtures/HAZ-009.json +0 -33
  151. data/test/maker_fixtures/HON-001.json +0 -31
  152. data/test/maker_fixtures/IDBD-447.json +0 -31
  153. data/test/maker_fixtures/INF-003.json +0 -19
  154. data/test/maker_fixtures/INU-013.json +0 -34
  155. data/test/maker_fixtures/IPSD-041.json +0 -38
  156. data/test/maker_fixtures/IPTD-464.json +0 -34
  157. data/test/maker_fixtures/IPTD-629.json +0 -31
  158. data/test/maker_fixtures/IPZ-005.json +0 -33
  159. data/test/maker_fixtures/JBD-153.json +0 -42
  160. data/test/maker_fixtures/JBS-004.json +0 -32
  161. data/test/maker_fixtures/JOB-010.json +0 -33
  162. data/test/maker_fixtures/JUC-285.json +0 -37
  163. data/test/maker_fixtures/JUFD-137.json +0 -34
  164. data/test/maker_fixtures/JUX-007.json +0 -36
  165. data/test/maker_fixtures/JUX-119.json +0 -36
  166. data/test/maker_fixtures/KAWD-249.json +0 -31
  167. data/test/maker_fixtures/KAWD-315.json +0 -32
  168. data/test/maker_fixtures/KIRD-147.json +0 -29
  169. data/test/maker_fixtures/KISD-042.json +0 -33
  170. data/test/maker_fixtures/LLR-005.json +0 -35
  171. data/test/maker_fixtures/LNS-003.json +0 -15
  172. data/test/maker_fixtures/MAS-042.json +0 -36
  173. data/test/maker_fixtures/MBD-148.json +0 -32
  174. data/test/maker_fixtures/MDC-002.json +0 -33
  175. data/test/maker_fixtures/MDYD-544.json +0 -31
  176. data/test/maker_fixtures/MDYD-863.json +0 -29
  177. data/test/maker_fixtures/MEK-008.json +0 -32
  178. data/test/maker_fixtures/MIAD-490.json +0 -35
  179. data/test/maker_fixtures/MIDD-599.json +0 -37
  180. data/test/maker_fixtures/MIDD-643.json +0 -33
  181. data/test/maker_fixtures/MIDD-644.json +0 -31
  182. data/test/maker_fixtures/MIDE-004.json +0 -35
  183. data/test/maker_fixtures/MIGD-284.json +0 -35
  184. data/test/maker_fixtures/MIGD-336.json +0 -34
  185. data/test/maker_fixtures/MIGD-337.json +0 -36
  186. data/test/maker_fixtures/MIMK-005.json +0 -37
  187. data/test/maker_fixtures/MINT-004.json +0 -36
  188. data/test/maker_fixtures/MIQD-010.json +0 -28
  189. data/test/maker_fixtures/MIRD-071.json +0 -42
  190. data/test/maker_fixtures/MIRD-072.json +0 -48
  191. data/test/maker_fixtures/MIRD-073.json +0 -39
  192. data/test/maker_fixtures/MIXS-005.json +0 -35
  193. data/test/maker_fixtures/MMY-010.json +0 -32
  194. data/test/maker_fixtures/NAGE-001.json +0 -33
  195. data/test/maker_fixtures/NDR-001.json +0 -32
  196. data/test/maker_fixtures/NLF-001.json +0 -15
  197. data/test/maker_fixtures/NOF-003.json +0 -36
  198. data/test/maker_fixtures/NPS-130.json +0 -18
  199. data/test/maker_fixtures/NRS-012.json +0 -17
  200. data/test/maker_fixtures/OBA-045.json +0 -36
  201. data/test/maker_fixtures/ONSD-570.json +0 -29
  202. data/test/maker_fixtures/OPUD-001.json +0 -41
  203. data/test/maker_fixtures/OPUD-125.json +0 -45
  204. data/test/maker_fixtures/OSR-003.json +0 -32
  205. data/test/maker_fixtures/PARM-028.json +0 -21
  206. data/test/maker_fixtures/PBD-134.json +0 -33
  207. data/test/maker_fixtures/PGD-306.json +0 -33
  208. data/test/maker_fixtures/PJD-085.json +0 -30
  209. data/test/maker_fixtures/PLA-001.json +0 -29
  210. data/test/maker_fixtures/PPB-008.json +0 -31
  211. data/test/maker_fixtures/PPP-001.json +0 -45
  212. data/test/maker_fixtures/PPPD-102.json +0 -34
  213. data/test/maker_fixtures/PPSD-028.json +0 -41
  214. data/test/maker_fixtures/PPT-004.json +0 -31
  215. data/test/maker_fixtures/PTS-230.json +0 -17
  216. data/test/maker_fixtures/PTV-001.json +0 -29
  217. data/test/maker_fixtures/PXD-024.json +0 -31
  218. data/test/maker_fixtures/PXD-027.json +0 -37
  219. data/test/maker_fixtures/Perfect-G 430mei.json +0 -18
  220. data/test/maker_fixtures/Perfect-G 481yuuka.json +0 -18
  221. data/test/maker_fixtures/Perfect-G Docle yoriko2.json +0 -19
  222. data/test/maker_fixtures/Perfect-G kumie.json +0 -18
  223. data/test/maker_fixtures/Perfect-G le_yoriko2.json +0 -19
  224. data/test/maker_fixtures/Perfect-G yoriko2 Docle.json +0 -19
  225. data/test/maker_fixtures/RAW-005.json +0 -32
  226. data/test/maker_fixtures/RBD-183.json +0 -40
  227. data/test/maker_fixtures/RDT-190.json +0 -20
  228. data/test/maker_fixtures/RTP-005.json +0 -21
  229. data/test/maker_fixtures/RTP-025.json +0 -12
  230. data/test/maker_fixtures/S-Cute 248_hibiki_07.json +0 -26
  231. data/test/maker_fixtures/S-Cute 352_kokona_02.json +0 -26
  232. data/test/maker_fixtures/S-Cute 353_rena_01.json +0 -26
  233. data/test/maker_fixtures/S-Cute ps5_07_rimu.json +0 -26
  234. data/test/maker_fixtures/S-Cute ps6_99_reona.json +0 -26
  235. data/test/maker_fixtures/S-Cute ps7_83_akari2.json +0 -26
  236. data/test/maker_fixtures/S-Cute swm_05_risa2.json +0 -26
  237. data/test/maker_fixtures/SAD-031.json +0 -35
  238. data/test/maker_fixtures/SDDE-312.json +0 -34
  239. data/test/maker_fixtures/SDMT-802.json +0 -32
  240. data/test/maker_fixtures/SDMU-008.json +0 -38
  241. data/test/maker_fixtures/SDNM-011.json +0 -37
  242. data/test/maker_fixtures/SET-007.json +0 -33
  243. data/test/maker_fixtures/SGA-001.json +0 -32
  244. data/test/maker_fixtures/SHKD-415.json +0 -38
  245. data/test/maker_fixtures/SNIS-041.json +0 -35
  246. data/test/maker_fixtures/SOE-259.json +0 -32
  247. data/test/maker_fixtures/SOE-379.json +0 -28
  248. data/test/maker_fixtures/SPC-001.json +0 -31
  249. data/test/maker_fixtures/SPS-008.json +0 -33
  250. data/test/maker_fixtures/SRS-015.json +0 -32
  251. data/test/maker_fixtures/SSPD-077.json +0 -44
  252. data/test/maker_fixtures/STAR-359.json +0 -33
  253. data/test/maker_fixtures/SUPD-065.json +0 -40
  254. data/test/maker_fixtures/TDT-018.json +0 -31
  255. data/test/maker_fixtures/TMAM-034.json +0 -15
  256. data/test/maker_fixtures/TMCY-039.json +0 -15
  257. data/test/maker_fixtures/TMDI-040.json +0 -15
  258. data/test/maker_fixtures/TMEM-044.json +0 -15
  259. data/test/maker_fixtures/TMVI-042.json +0 -15
  260. data/test/maker_fixtures/TRD-062.json +0 -31
  261. data/test/maker_fixtures/TYOD-232.json +0 -21
  262. data/test/maker_fixtures/Tokyo 247 371yui.json +0 -35
  263. data/test/maker_fixtures/ULT-013.json +0 -15
  264. data/test/maker_fixtures/URE-011.json +0 -39
  265. data/test/maker_fixtures/VVP-001.json +0 -17
  266. data/test/maker_fixtures/WA-201.json +0 -17
  267. data/test/maker_fixtures/WAT-003.json +0 -33
  268. data/test/maker_fixtures/WDI-037.json +0 -38
  269. data/test/maker_fixtures/WPC-002.json +0 -35
  270. data/test/maker_fixtures/WSS-231.json +0 -33
  271. data/test/maker_fixtures/XND-023.json +0 -32
  272. data/test/maker_fixtures/XXX 21685.json +0 -17
  273. data/test/maker_fixtures/YRH-008.json +0 -35
  274. data/test/maker_fixtures/YRZ-009.json +0 -32
  275. data/test/maker_fixtures/YUM-001.json +0 -12
  276. data/test/maker_fixtures/ZEX-068.json +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4496c5c43789b9e89d73e4794889dc026b8ee59a
4
- data.tar.gz: 7e3315770a82b06517eba54db09910d58cc62764
3
+ metadata.gz: e6c7311b7f595e198cb62136ade4856e8f0b5fe0
4
+ data.tar.gz: 5ead2b9e04a624fd2517789c9d279cbfb199320c
5
5
  SHA512:
6
- metadata.gz: a9c9fb02deca9a6de1a9ca07c08ebf95fff14db698bc7a150cd6275a5da446e079b297456fa61d3ebe8f13129a8505736b66cdba581d5a98280980f11f0fc957
7
- data.tar.gz: cbc0657182d8c21adf19205e753b5073175b86e79d66fee4a58a585ab9243b5eebb1129daa6a00f4fe0cc6142c6681ba90024d2953216917a7fb04d519b6a173
6
+ metadata.gz: 774d7c35cd737f548b15fd31e367b6df6f8f8d0c0e434414b92b7befe9db1e034f7452a0f0326db5a3eede55f970cfb62cd3725ddf5eba0aa75211fccbd6cc58
7
+ data.tar.gz: 8670e9f38574ae0541c57d370885ad056ab625385d941f8c4f0ef301798e095285c656d915aa5fd925d84a378b999fe48587fe777a7abe16115a878e1ef5e5d9
data/Rakefile CHANGED
@@ -1,140 +1,10 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
- require 'json'
4
- require 'opendmm'
5
3
 
6
- Rake::TestTask.new do |t|
7
- t.pattern = 'test/**/*_test.rb'
8
- end
9
-
10
- namespace :fixture do
11
- desc 'Generate a maker fixture'
12
- task :maker, [:id] => :install do |t, args|
13
- generate(args[:id], 'maker')
14
- end
15
-
16
- desc 'Generate a search engine fixture'
17
- task :search_engine, [:id, :name] => :install do |t, args|
18
- generate(args[:id], args[:name])
19
- end
20
-
21
- desc 'Regenerate all fixtures'
22
- task :regenerate => :install do
23
- Dir[File.dirname(__FILE__) + '/test/maker_fixtures/*.json'].each do |path|
24
- File.open(path, 'w') do |file|
25
- id = File.basename(path, '.json')
26
- puts "Generating #{id}.json"
27
- file.puts JSON.pretty_generate(OpenDMM.search(id))
28
- end
29
- end
30
- end
31
-
32
- private
33
-
34
- def generate(id, category)
35
- fixture = OpenDMM.search(id)
36
- if fixture.blank?
37
- puts "#{id} not found"
38
- return
39
- end
40
- FileUtils.mkpath File.dirname(__FILE__) + "/test/#{category}_fixtures/"
41
- File.open(File.dirname(__FILE__) + "/test/#{category}_fixtures/#{id}.json", 'w') do |file|
42
- puts "Generating #{id}.json"
43
- file.puts JSON.pretty_generate(fixture)
44
- end
45
- end
46
- end
47
-
48
- namespace :maker do
49
- desc "Generate a maker"
50
- task :generate, [:name] do |t, args|
51
- File.open(File.join(File.dirname(__FILE__) + "/lib/opendmm/makers/#{args[:name].underscore}.rb"), 'w') do |file|
52
- puts "Generating #{args[:name].underscore}.rb"
53
- file.puts <<-CODE
54
- base_uri 'example.com'
55
-
56
- register_product(
57
- /^(EXAM)-?(\\d{3})$/i,
58
- '#\{$1.downcase\}#\{$2\}',
59
- )
60
-
61
- private
4
+ STDOUT.sync = true
62
5
 
63
- def self.parse_product_html(html)
64
- {
65
- # actresses: Array
66
- # brand: String
67
- # categories: Array
68
- # cover_image: String
69
- # description: String
70
- # directors: Array
71
- # genres: Array
72
- # label: String
73
- # maker: String
74
- # movie_length: String
75
- # release_date: String
76
- # sample_images: Array
77
- # scenes: Array
78
- # series: String
79
- # subtitle: String
80
- # theme: String
81
- # thumbnail_image: String
82
- # title: String
83
- }
84
- end
85
- CODE
86
- end
87
- end
88
- end
89
-
90
- namespace :search_engine do
91
- desc "Generate a search engine"
92
- task :generate, [:name] do |t, args|
93
- File.open(File.join(File.dirname(__FILE__) + "/lib/opendmm/search_engines/#{args[:name].underscore}.rb"), 'w') do |file|
94
- puts "Generating #{args[:name].underscore}.rb"
95
- file.puts <<-CODE
96
- base_uri 'example.com'
97
-
98
- def self.search_url(name)
99
- "#{CGI::escape(name)}"
100
- end
101
-
102
- def self.product_url(name)
103
- search_page = get_with_retry search_url(name)
104
- return nil unless search_page
105
- search_html = Utils.html_in_utf8 search_page
106
- first_result = search_html.at_css('CHANGEME')
107
- first_result['href'] if first_result
108
- end
109
-
110
- private
111
-
112
- def self.parse_product_html(html)
113
- {
114
- # actresses: Array
115
- # brand: String
116
- # categories: Array
117
- # cover_image: String
118
- # description: String
119
- # directors: Array
120
- # genres: Array
121
- # label: String
122
- # maker: String
123
- # movie_length: String
124
- # release_date: String
125
- # sample_images: Array
126
- # scenes: Array
127
- # series: String
128
- # subtitle: String
129
- # theme: String
130
- # thumbnail_image: String
131
- # title: String
132
- }
133
- end
134
- CODE
135
- end
136
- end
6
+ Rake::TestTask.new do |t|
7
+ t.pattern = 'test/*_test.rb'
137
8
  end
138
9
 
139
10
  task :test => :install
140
- task :default => :test
data/bin/opendmm CHANGED
@@ -1,27 +1,30 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'json'
4
- require 'optparse'
5
4
  require 'pp'
6
5
  require 'opendmm'
6
+ require 'optparse'
7
7
 
8
- options = { json: false, debug: true }
9
- OptionParser.new do |opts|
10
- opts.on('-j', '--[no-]json', 'JSON mode') do |value|
11
- options[:json] = value
12
- end
13
- opts.on('-d', '--[no-]debug', 'Debug mode') do |value|
14
- options[:debug] = value
15
- end
16
- end.parse!
8
+ module OpenDMM
9
+ class CLI
10
+ def initialize(argv)
11
+ parse_options(argv)
12
+ details = OpenDMM.search(@query)
13
+ puts details ? JSON.pretty_generate(details)
14
+ : "No match for: #{@query}"
15
+ end
16
+
17
+ private
17
18
 
18
- details = OpenDMM.search(ARGV.first, options[:debug])
19
- if details
20
- if options[:json]
21
- puts JSON.pretty_generate(details)
22
- else
23
- pp details
19
+ def parse_options(argv)
20
+ OptionParser.new do |opts|
21
+ opts.on('-d', '--[no-]debug', 'Debug mode') do |debug|
22
+ LOGGER.level = Logger::DEBUG if debug
23
+ end
24
+ end.parse! argv
25
+ @query = argv.first
26
+ end
24
27
  end
25
- else
26
- puts 'Unknown product: ' + ARGV.first
27
28
  end
29
+
30
+ OpenDMM::CLI.new(ARGV)
data/dev.thor ADDED
@@ -0,0 +1,17 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+
3
+ class Dev < Thor
4
+ include Thor::Actions
5
+
6
+ argument :name
7
+
8
+ def self.source_root
9
+ File.dirname(__FILE__)
10
+ end
11
+
12
+ desc 'engine', 'generate a engine'
13
+ def engine
14
+ puts "generate engine"
15
+ template('templates/engine.tt', "lib/opendmm/engines/#{name.underscore}.rb")
16
+ end
17
+ end
data/lib/opendmm.rb CHANGED
@@ -1,53 +1,23 @@
1
- require 'opendmm/version'
2
- require 'opendmm/maker'
3
- require 'opendmm/search_engine'
1
+ require 'opendmm/engines/av_entertainments.rb'
2
+ require 'opendmm/engines/caribbean.rb'
3
+ require 'opendmm/engines/caribbean_pr.rb'
4
+ require 'opendmm/engines/heyzo.rb'
5
+ require 'opendmm/engines/jav_library.rb'
6
+ require 'opendmm/engines/one_pondo.rb'
7
+ require 'opendmm/engines/tokyo_hot.rb'
8
+ require 'opendmm/version.rb'
4
9
 
5
10
  module OpenDMM
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: Fixnum
22
- # page: String
23
- # release_date: Date
24
- # sample_images: Array
25
- # scatologies: Array
26
- # scenes: Array
27
- # series: String
28
- # subtitle: String
29
- # theme: String
30
- # thumbnail_image: String
31
- # title: String
32
- # transsexualities: Array
33
- # }
34
-
35
- def self.search(name, debug = false)
36
- [ Maker,
37
- SearchEngine::JavLibrary,
38
- SearchEngine::Dmm,
39
- SearchEngine::Mgstage,
40
- SearchEngine::AvEntertainments ].each do |engine|
41
- begin
42
- result = engine.search(name)
43
- return result if result
44
- rescue => e
45
- if debug
46
- puts e.inspect
47
- puts e.backtrace.join("\n")
48
- end
49
- end
50
- end
51
- nil
11
+ def self.search(query)
12
+ [ Engine::Caribbean,
13
+ Engine::CaribbeanPr,
14
+ Engine::Heyzo,
15
+ Engine::OnePondo,
16
+ Engine::TokyoHot,
17
+ Engine::JavLibrary,
18
+ Engine::AvEntertainments,
19
+ ].lazy.map do |engine|
20
+ engine.search(query)
21
+ end.find(&:present?)
52
22
  end
53
23
  end
@@ -0,0 +1,81 @@
1
+ require 'cgi'
2
+ require 'opendmm/movie'
3
+ require 'opendmm/utils/httparty'
4
+
5
+ module OpenDMM
6
+ module Engine
7
+ module AvEntertainments
8
+ def self.search(query)
9
+ queries = normalize(query)
10
+ LOGGER.debug queries
11
+ queries.lazy.map do |query|
12
+ begin
13
+ Movie.new(query).details
14
+ rescue StandardError => e
15
+ LOGGER.info e
16
+ nil
17
+ end
18
+ end.find(&:present?)
19
+ end
20
+
21
+ private
22
+
23
+ def self.normalize(query)
24
+ query.scan(/([a-z]{2,5})-?(S?\d{2,5})/i).map do |pair|
25
+ "#{pair[0]}-#{pair[1]}"
26
+ end
27
+ end
28
+
29
+ module Site
30
+ include HTTParty
31
+ base_uri 'www.aventertainments.com'
32
+ headers({
33
+ "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
34
+ })
35
+
36
+ def self.search(query)
37
+ get "/search_Products.aspx?keyword=#{CGI::escape(query)}"
38
+ end
39
+ end
40
+
41
+ class Search
42
+ def initialize(query, response)
43
+ @query = query
44
+ @response = response
45
+ @html = Nokogiri.HTML @response
46
+ end
47
+
48
+ def result
49
+ @html.at_css('div.main-unit2 > table a')['href']
50
+ end
51
+ end
52
+
53
+ class Movie < OpenDMM::Movie
54
+ def initialize(query)
55
+ search = Search.new(query, Site.search(query))
56
+ super(query, Site.get(search.result))
57
+
58
+ @details.title = @html.css('#mini-tabet > h2').inner_text
59
+ @details.cover_image = @html.at_css('#titlebox > div.list-cover > img')['src'].gsub('jacket_images', 'bigcover')
60
+ @details.code = @html.css('#mini-tabet > div').text.remove('商品番号:')
61
+ @details.categories = @html.xpath('//*[@id="TabbedPanels1"]/div/div[2]/div[2]//ol').map(&:text)
62
+
63
+ @html.css('#titlebox > ul > li').each do |li|
64
+ case li.css('span').text
65
+ when /主演女優/
66
+ @details.actresses = li.css('a').map(&:text)
67
+ when /スタジオ/
68
+ @details.maker = li.css('a').text
69
+ when /シリーズ/
70
+ @details.series = li.css('a').text
71
+ when /発売日/
72
+ @details.release_date = li.inner_text
73
+ when /収録時間/
74
+ @details.movie_length = li.inner_text
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,106 @@
1
+ require 'opendmm/movie'
2
+ require 'opendmm/utils/httparty'
3
+
4
+ module OpenDMM
5
+ module Engine
6
+ module Caribbean
7
+ def self.search(query)
8
+ query = normalize(query)
9
+ return unless query
10
+ Movie.new(query).details
11
+ end
12
+
13
+ private
14
+
15
+ def self.normalize(query)
16
+ return unless query =~ /(carib|カリビアンコム|加勒比)/i
17
+ return unless query =~ /(\d{6})[-_](\d{3})/i
18
+ "#{$1}-#{$2}"
19
+ end
20
+
21
+ module Site
22
+ include HTTParty
23
+ base_uri 'www.caribbeancom.com'
24
+
25
+ def self.movie(query)
26
+ get "/moviepages/#{query}/index.html"
27
+ end
28
+ end
29
+
30
+ class Movie < OpenDMM::Movie
31
+ def initialize(query)
32
+ super(query, Site.movie(query))
33
+
34
+ @details.code = "Carib #{query}"
35
+ @details.cover_image = './images/l_l.jpg'
36
+ @details.maker = 'Caribbean'
37
+ @details.thumbnail_image = './images/l_s.jpg'
38
+
39
+ @details.title = @html.css('#main-content > div.main-content-movieinfo > div.video-detail > span.movie-title').text
40
+ @details.description = @html.css('#main-content > div.main-content-movieinfo > div.movie-comment').text
41
+ @details.sample_images = @html.css('#main-content > div.detail-content.detail-content-gallery-old > table > tr > td > a').map do |a|
42
+ a['href']
43
+ end.reject do |url|
44
+ url.include? '/member/'
45
+ end
46
+
47
+ @html.css('#main-content > div.main-content-movieinfo > div.movie-info > dl').map do |dl|
48
+ case dl.at_css('dt').text
49
+ when '出演:'
50
+ @details.actresses = dl.css('dd').map(&:text)
51
+ when 'カテゴリー:'
52
+ @details.categories = dl.css('dd').map(&:text)
53
+ when '配信日:'
54
+ @details.release_date = dl.css('dd').text
55
+ when '再生時間:'
56
+ @details.movie_length = dl.css('dd').text
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ module SitePr
63
+ include HTTParty
64
+ base_uri 'www.caribbeancompr.com'
65
+
66
+ def self.movie(query)
67
+ get "/moviepages/#{query}/index.html"
68
+ end
69
+ end
70
+
71
+ class MoviePr < OpenDMM::Movie
72
+ def initialize(query)
73
+ super(query, SitePr.movie(query))
74
+
75
+ @details.code = "Caribpr #{query}"
76
+ @details.cover_image = './images/l_l.jpg'
77
+ @details.thumbnail_image = './images/main_b.jpg'
78
+ @details.title = @html.css('#main-content > div.main-content-movieinfo > div.video-detail').text
79
+ @details.description = @html.css('#main-content > div.main-content-movieinfo > div.movie-comment').text
80
+ @details.sample_images = @html.css('#main-content > div.detail-content.detail-content-gallery > ul > li > div > a').map do |a|
81
+ a['href']
82
+ end.reject do |url|
83
+ url.include? '/member/'
84
+ end
85
+
86
+ @html.css('#main-content > div.main-content-movieinfo > div.movie-info > dl').map do |dl|
87
+ case dl.at_css('dt').text
88
+ when '出演:'
89
+ @details.actresses = dl.css('dd').map(&:text)
90
+ when 'カテゴリー:'
91
+ @details.categories = dl.css('dd').map(&:text)
92
+ when '販売日:'
93
+ @details.release_date = dl.css('dd').text
94
+ when '再生時間:'
95
+ @details.movie_length = dl.css('dd').text
96
+ when 'スタジオ:'
97
+ @details.maker = dl.css('dd').text
98
+ when 'シリーズ:'
99
+ @details.series = dl.css('dd').text
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end