opendmm 0.4.3 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +3 -133
- data/bin/opendmm +21 -18
- data/dev.thor +17 -0
- data/lib/opendmm.rb +19 -49
- data/lib/opendmm/engines/av_entertainments.rb +81 -0
- data/lib/opendmm/engines/caribbean.rb +106 -0
- data/lib/opendmm/engines/caribbean_pr.rb +65 -0
- data/lib/opendmm/engines/heyzo.rb +49 -0
- data/lib/opendmm/engines/jav_library.rb +81 -0
- data/lib/opendmm/engines/one_pondo.rb +53 -0
- data/lib/opendmm/engines/tokyo_hot.rb +78 -0
- data/lib/opendmm/movie.rb +106 -0
- data/lib/opendmm/utils/chronic_duration.rb +17 -0
- data/lib/opendmm/utils/date.rb +19 -0
- data/lib/opendmm/utils/httparty.rb +30 -0
- data/lib/opendmm/utils/logger.rb +6 -0
- data/lib/opendmm/utils/nokogiri.rb +14 -0
- data/lib/opendmm/version.rb +1 -1
- data/opendmm.gemspec +2 -0
- data/templates/engine.tt +33 -0
- data/test/flow_test.rb +33 -0
- metadata +47 -457
- data/.travis.yml +0 -6
- data/lib/opendmm/maker.rb +0 -33
- data/lib/opendmm/makers/aknr.rb +0 -22
- data/lib/opendmm/makers/ako3.rb +0 -22
- data/lib/opendmm/makers/apa.rb +0 -23
- data/lib/opendmm/makers/aroma.rb +0 -48
- data/lib/opendmm/makers/attackers.rb +0 -36
- data/lib/opendmm/makers/aurora.rb +0 -29
- data/lib/opendmm/makers/baltan.rb +0 -24
- data/lib/opendmm/makers/befree.rb +0 -26
- data/lib/opendmm/makers/bi.rb +0 -28
- data/lib/opendmm/makers/candy.rb +0 -32
- data/lib/opendmm/makers/caribbean.rb +0 -25
- data/lib/opendmm/makers/caribbeanpr.rb +0 -33
- data/lib/opendmm/makers/cross.rb +0 -26
- data/lib/opendmm/makers/das.rb +0 -36
- data/lib/opendmm/makers/dip.rb +0 -26
- data/lib/opendmm/makers/dmm_collection.rb +0 -23
- data/lib/opendmm/makers/doc.rb +0 -56
- data/lib/opendmm/makers/ebody.rb +0 -26
- data/lib/opendmm/makers/g_area.rb +0 -59
- data/lib/opendmm/makers/ideapocket.rb +0 -28
- data/lib/opendmm/makers/kawaii.rb +0 -25
- data/lib/opendmm/makers/kira_kira.rb +0 -25
- data/lib/opendmm/makers/madonna.rb +0 -25
- data/lib/opendmm/makers/moodyz.rb +0 -45
- data/lib/opendmm/makers/munekyunkissa.rb +0 -25
- data/lib/opendmm/makers/one_pondo.rb +0 -44
- data/lib/opendmm/makers/opera.rb +0 -29
- data/lib/opendmm/makers/oppai.rb +0 -39
- data/lib/opendmm/makers/premium.rb +0 -26
- data/lib/opendmm/makers/prestige.rb +0 -47
- data/lib/opendmm/makers/ran_maru.rb +0 -35
- data/lib/opendmm/makers/s1.rb +0 -25
- data/lib/opendmm/makers/s_cute.rb +0 -47
- data/lib/opendmm/makers/sod.rb +0 -27
- data/lib/opendmm/makers/tameikegoro.rb +0 -24
- data/lib/opendmm/makers/ten_musume.rb +0 -33
- data/lib/opendmm/makers/tokyo_247.rb +0 -41
- data/lib/opendmm/makers/waap.rb +0 -28
- data/lib/opendmm/makers/xxx.rb +0 -43
- data/lib/opendmm/makers_broken/anna_and_hanako.rb +0 -24
- data/lib/opendmm/makers_broken/high_scene.rb +0 -32
- data/lib/opendmm/makers_broken/to_satsu.rb +0 -24
- data/lib/opendmm/search_engine.rb +0 -20
- data/lib/opendmm/search_engines/av_entertainments.rb +0 -46
- data/lib/opendmm/search_engines/dmm.rb +0 -50
- data/lib/opendmm/search_engines/jav_library.rb +0 -39
- data/lib/opendmm/search_engines/mgstage.rb +0 -41
- data/lib/opendmm/site.rb +0 -80
- data/lib/opendmm/utils.rb +0 -126
- data/test/av_entertainments_fixtures/MKBD-S40.json +0 -36
- data/test/av_entertainments_fixtures/SKYHD-108.json +0 -53
- data/test/av_entertainments_fixtures/sky107.json +0 -33
- data/test/broken/ANND-066.json +0 -30
- data/test/broken/BIJN-006.json +0 -26
- data/test/broken/CLUB-003.json +0 -23
- data/test/broken/HIGH-107.json +0 -29
- data/test/broken/SIRO-1088.json +0 -29
- data/test/dmm_fixtures/DMYJ-001.json +0 -20
- data/test/dmm_fixtures/KHY-009.json +0 -21
- data/test/dmm_fixtures/RKI-294.json +0 -31
- data/test/dmm_fixtures/dmyj00001.json +0 -20
- data/test/dmm_fixtures/dmyj001.json +0 -20
- data/test/fixture_test.rb +0 -83
- data/test/jav_library_fixtures/DLY-0001.json +0 -21
- data/test/jav_library_fixtures/DLY-001.json +0 -18
- data/test/jav_library_fixtures/JUFD-379.json +0 -25
- data/test/jav_library_fixtures/XV-100.json +0 -18
- data/test/jav_library_fixtures/XV-1000.json +0 -24
- data/test/jav_library_fixtures/xv100.json +0 -18
- data/test/maker_fixtures/10musume 082914_01.json +0 -31
- data/test/maker_fixtures/1pondo 011111_006.json +0 -35
- data/test/maker_fixtures/1pondo 022506_835.json +0 -8
- data/test/maker_fixtures/352_kokona_02.json +0 -26
- data/test/maker_fixtures/ABP-013.json +0 -33
- data/test/maker_fixtures/ABS-014.json +0 -31
- data/test/maker_fixtures/ABY-003.json +0 -32
- data/test/maker_fixtures/ADN-019.json +0 -38
- data/test/maker_fixtures/ADN-025.json +0 -37
- data/test/maker_fixtures/AIR-017.json +0 -34
- data/test/maker_fixtures/AKO-011.json +0 -20
- data/test/maker_fixtures/ALB-038.json +0 -30
- data/test/maker_fixtures/ALB-182.json +0 -31
- data/test/maker_fixtures/AP-001.json +0 -24
- data/test/maker_fixtures/APAA-182.json +0 -38
- data/test/maker_fixtures/APAK-051.json +0 -42
- data/test/maker_fixtures/ARM-191.json +0 -28
- data/test/maker_fixtures/ARMG-223.json +0 -27
- data/test/maker_fixtures/ATID-183.json +0 -41
- data/test/maker_fixtures/AVOP-061.json +0 -29
- data/test/maker_fixtures/BBI-104.json +0 -34
- data/test/maker_fixtures/BEB-001.json +0 -36
- data/test/maker_fixtures/BF-175.json +0 -32
- data/test/maker_fixtures/BF-254.json +0 -22
- data/test/maker_fixtures/BF-263.json +0 -32
- data/test/maker_fixtures/BID-017.json +0 -41
- data/test/maker_fixtures/BLK-049.json +0 -28
- data/test/maker_fixtures/BRA-002.json +0 -34
- data/test/maker_fixtures/BWB-005.json +0 -32
- data/test/maker_fixtures/CEN-033.json +0 -35
- data/test/maker_fixtures/CHN-008.json +0 -31
- data/test/maker_fixtures/CHS-015.json +0 -32
- data/test/maker_fixtures/CND-012.json +0 -30
- data/test/maker_fixtures/CND-062.json +0 -30
- data/test/maker_fixtures/CRAD-099.json +0 -38
- data/test/maker_fixtures/CRPD-451.json +0 -30
- data/test/maker_fixtures/CRS-056.json +0 -18
- data/test/maker_fixtures/CRSS-013.json +0 -39
- data/test/maker_fixtures/CWM-156.json +0 -34
- data/test/maker_fixtures/Carib 021511-620.json +0 -28
- data/test/maker_fixtures/Caribpr 082914_940.json +0 -31
- data/test/maker_fixtures/DASD-001.json +0 -30
- data/test/maker_fixtures/DAZD-001.json +0 -27
- data/test/maker_fixtures/DCOL-017.json +0 -26
- data/test/maker_fixtures/DGL-007.json +0 -25
- data/test/maker_fixtures/DGL-066.json +0 -26
- data/test/maker_fixtures/DOM-045.json +0 -36
- data/test/maker_fixtures/EBOD-109.json +0 -31
- data/test/maker_fixtures/ECB-078.json +0 -33
- data/test/maker_fixtures/EDD-189.json +0 -33
- data/test/maker_fixtures/ESK-232.json +0 -31
- data/test/maker_fixtures/EZD-369.json +0 -32
- data/test/maker_fixtures/FSET-399.json +0 -41
- data/test/maker_fixtures/FTN-002.json +0 -15
- data/test/maker_fixtures/GDW-006.json +0 -18
- data/test/maker_fixtures/HAZ-009.json +0 -33
- data/test/maker_fixtures/HON-001.json +0 -31
- data/test/maker_fixtures/IDBD-447.json +0 -31
- data/test/maker_fixtures/INF-003.json +0 -19
- data/test/maker_fixtures/INU-013.json +0 -34
- data/test/maker_fixtures/IPSD-041.json +0 -38
- data/test/maker_fixtures/IPTD-464.json +0 -34
- data/test/maker_fixtures/IPTD-629.json +0 -31
- data/test/maker_fixtures/IPZ-005.json +0 -33
- data/test/maker_fixtures/JBD-153.json +0 -42
- data/test/maker_fixtures/JBS-004.json +0 -32
- data/test/maker_fixtures/JOB-010.json +0 -33
- data/test/maker_fixtures/JUC-285.json +0 -37
- data/test/maker_fixtures/JUFD-137.json +0 -34
- data/test/maker_fixtures/JUX-007.json +0 -36
- data/test/maker_fixtures/JUX-119.json +0 -36
- data/test/maker_fixtures/KAWD-249.json +0 -31
- data/test/maker_fixtures/KAWD-315.json +0 -32
- data/test/maker_fixtures/KIRD-147.json +0 -29
- data/test/maker_fixtures/KISD-042.json +0 -33
- data/test/maker_fixtures/LLR-005.json +0 -35
- data/test/maker_fixtures/LNS-003.json +0 -15
- data/test/maker_fixtures/MAS-042.json +0 -36
- data/test/maker_fixtures/MBD-148.json +0 -32
- data/test/maker_fixtures/MDC-002.json +0 -33
- data/test/maker_fixtures/MDYD-544.json +0 -31
- data/test/maker_fixtures/MDYD-863.json +0 -29
- data/test/maker_fixtures/MEK-008.json +0 -32
- data/test/maker_fixtures/MIAD-490.json +0 -35
- data/test/maker_fixtures/MIDD-599.json +0 -37
- data/test/maker_fixtures/MIDD-643.json +0 -33
- data/test/maker_fixtures/MIDD-644.json +0 -31
- data/test/maker_fixtures/MIDE-004.json +0 -35
- data/test/maker_fixtures/MIGD-284.json +0 -35
- data/test/maker_fixtures/MIGD-336.json +0 -34
- data/test/maker_fixtures/MIGD-337.json +0 -36
- data/test/maker_fixtures/MIMK-005.json +0 -37
- data/test/maker_fixtures/MINT-004.json +0 -36
- data/test/maker_fixtures/MIQD-010.json +0 -28
- data/test/maker_fixtures/MIRD-071.json +0 -42
- data/test/maker_fixtures/MIRD-072.json +0 -48
- data/test/maker_fixtures/MIRD-073.json +0 -39
- data/test/maker_fixtures/MIXS-005.json +0 -35
- data/test/maker_fixtures/MMY-010.json +0 -32
- data/test/maker_fixtures/NAGE-001.json +0 -33
- data/test/maker_fixtures/NDR-001.json +0 -32
- data/test/maker_fixtures/NLF-001.json +0 -15
- data/test/maker_fixtures/NOF-003.json +0 -36
- data/test/maker_fixtures/NPS-130.json +0 -18
- data/test/maker_fixtures/NRS-012.json +0 -17
- data/test/maker_fixtures/OBA-045.json +0 -36
- data/test/maker_fixtures/ONSD-570.json +0 -29
- data/test/maker_fixtures/OPUD-001.json +0 -41
- data/test/maker_fixtures/OPUD-125.json +0 -45
- data/test/maker_fixtures/OSR-003.json +0 -32
- data/test/maker_fixtures/PARM-028.json +0 -21
- data/test/maker_fixtures/PBD-134.json +0 -33
- data/test/maker_fixtures/PGD-306.json +0 -33
- data/test/maker_fixtures/PJD-085.json +0 -30
- data/test/maker_fixtures/PLA-001.json +0 -29
- data/test/maker_fixtures/PPB-008.json +0 -31
- data/test/maker_fixtures/PPP-001.json +0 -45
- data/test/maker_fixtures/PPPD-102.json +0 -34
- data/test/maker_fixtures/PPSD-028.json +0 -41
- data/test/maker_fixtures/PPT-004.json +0 -31
- data/test/maker_fixtures/PTS-230.json +0 -17
- data/test/maker_fixtures/PTV-001.json +0 -29
- data/test/maker_fixtures/PXD-024.json +0 -31
- data/test/maker_fixtures/PXD-027.json +0 -37
- data/test/maker_fixtures/Perfect-G 430mei.json +0 -18
- data/test/maker_fixtures/Perfect-G 481yuuka.json +0 -18
- data/test/maker_fixtures/Perfect-G Docle yoriko2.json +0 -19
- data/test/maker_fixtures/Perfect-G kumie.json +0 -18
- data/test/maker_fixtures/Perfect-G le_yoriko2.json +0 -19
- data/test/maker_fixtures/Perfect-G yoriko2 Docle.json +0 -19
- data/test/maker_fixtures/RAW-005.json +0 -32
- data/test/maker_fixtures/RBD-183.json +0 -40
- data/test/maker_fixtures/RDT-190.json +0 -20
- data/test/maker_fixtures/RTP-005.json +0 -21
- data/test/maker_fixtures/RTP-025.json +0 -12
- data/test/maker_fixtures/S-Cute 248_hibiki_07.json +0 -26
- data/test/maker_fixtures/S-Cute 352_kokona_02.json +0 -26
- data/test/maker_fixtures/S-Cute 353_rena_01.json +0 -26
- data/test/maker_fixtures/S-Cute ps5_07_rimu.json +0 -26
- data/test/maker_fixtures/S-Cute ps6_99_reona.json +0 -26
- data/test/maker_fixtures/S-Cute ps7_83_akari2.json +0 -26
- data/test/maker_fixtures/S-Cute swm_05_risa2.json +0 -26
- data/test/maker_fixtures/SAD-031.json +0 -35
- data/test/maker_fixtures/SDDE-312.json +0 -34
- data/test/maker_fixtures/SDMT-802.json +0 -32
- data/test/maker_fixtures/SDMU-008.json +0 -38
- data/test/maker_fixtures/SDNM-011.json +0 -37
- data/test/maker_fixtures/SET-007.json +0 -33
- data/test/maker_fixtures/SGA-001.json +0 -32
- data/test/maker_fixtures/SHKD-415.json +0 -38
- data/test/maker_fixtures/SNIS-041.json +0 -35
- data/test/maker_fixtures/SOE-259.json +0 -32
- data/test/maker_fixtures/SOE-379.json +0 -28
- data/test/maker_fixtures/SPC-001.json +0 -31
- data/test/maker_fixtures/SPS-008.json +0 -33
- data/test/maker_fixtures/SRS-015.json +0 -32
- data/test/maker_fixtures/SSPD-077.json +0 -44
- data/test/maker_fixtures/STAR-359.json +0 -33
- data/test/maker_fixtures/SUPD-065.json +0 -40
- data/test/maker_fixtures/TDT-018.json +0 -31
- data/test/maker_fixtures/TMAM-034.json +0 -15
- data/test/maker_fixtures/TMCY-039.json +0 -15
- data/test/maker_fixtures/TMDI-040.json +0 -15
- data/test/maker_fixtures/TMEM-044.json +0 -15
- data/test/maker_fixtures/TMVI-042.json +0 -15
- data/test/maker_fixtures/TRD-062.json +0 -31
- data/test/maker_fixtures/TYOD-232.json +0 -21
- data/test/maker_fixtures/Tokyo 247 371yui.json +0 -35
- data/test/maker_fixtures/ULT-013.json +0 -15
- data/test/maker_fixtures/URE-011.json +0 -39
- data/test/maker_fixtures/VVP-001.json +0 -17
- data/test/maker_fixtures/WA-201.json +0 -17
- data/test/maker_fixtures/WAT-003.json +0 -33
- data/test/maker_fixtures/WDI-037.json +0 -38
- data/test/maker_fixtures/WPC-002.json +0 -35
- data/test/maker_fixtures/WSS-231.json +0 -33
- data/test/maker_fixtures/XND-023.json +0 -32
- data/test/maker_fixtures/XXX 21685.json +0 -17
- data/test/maker_fixtures/YRH-008.json +0 -35
- data/test/maker_fixtures/YRZ-009.json +0 -32
- data/test/maker_fixtures/YUM-001.json +0 -12
- data/test/maker_fixtures/ZEX-068.json +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6c7311b7f595e198cb62136ade4856e8f0b5fe0
|
4
|
+
data.tar.gz: 5ead2b9e04a624fd2517789c9d279cbfb199320c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
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
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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/
|
2
|
-
require 'opendmm/
|
3
|
-
require 'opendmm/
|
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
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|