opendmm 1.0.1 → 1.0.2
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.
- checksums.yaml +4 -4
- data/lib/opendmm.rb +11 -2
- data/lib/opendmm/engines/av_entertainments.rb +13 -6
- data/lib/opendmm/engines/caribbean.rb +7 -7
- data/lib/opendmm/engines/caribbean_pr.rb +6 -6
- data/lib/opendmm/engines/dmm.rb +103 -0
- data/lib/opendmm/engines/jav_library.rb +3 -2
- data/lib/opendmm/engines/mgstage.rb +75 -0
- data/lib/opendmm/engines/one_pondo.rb +1 -1
- data/lib/opendmm/engines/tokyo_hot.rb +2 -2
- data/lib/opendmm/movie.rb +1 -1
- data/lib/opendmm/utils/logger.rb +4 -0
- data/lib/opendmm/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9fd109fd9892fc2cfc406afc24cef8a5e9ea074
|
4
|
+
data.tar.gz: 75c288cb6b2f99207cee3732979eb0872d5000de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0df748805f49ad23c4810348dccdc10b705089794a91fa4eeab3acbf12c2c8df36e2303e8222857b1a29ac6ecf3210961b951576c229ed9a16c15400284972e4
|
7
|
+
data.tar.gz: 2cc330c9b81004a9588961a7b97cc86db347f98bb97eeb5e430da293cc7adf990537898abe3f79b14e479dc7634c57c3366c486cb1a6374627e939bc88f3e62e
|
data/lib/opendmm.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
require 'opendmm/engines/av_entertainments.rb'
|
2
2
|
require 'opendmm/engines/caribbean.rb'
|
3
3
|
require 'opendmm/engines/caribbean_pr.rb'
|
4
|
+
require 'opendmm/engines/dmm.rb'
|
4
5
|
require 'opendmm/engines/heyzo.rb'
|
5
6
|
require 'opendmm/engines/jav_library.rb'
|
7
|
+
require 'opendmm/engines/mgstage.rb'
|
6
8
|
require 'opendmm/engines/one_pondo.rb'
|
7
9
|
require 'opendmm/engines/tokyo_hot.rb'
|
8
10
|
require 'opendmm/version.rb'
|
@@ -13,11 +15,18 @@ module OpenDMM
|
|
13
15
|
Engine::CaribbeanPr,
|
14
16
|
Engine::Heyzo,
|
15
17
|
Engine::OnePondo,
|
16
|
-
Engine::TokyoHot,
|
17
18
|
Engine::JavLibrary,
|
18
19
|
Engine::AvEntertainments,
|
20
|
+
Engine::DMM,
|
21
|
+
Engine::MGStage,
|
22
|
+
Engine::TokyoHot,
|
19
23
|
].lazy.map do |engine|
|
20
|
-
|
24
|
+
begin
|
25
|
+
engine.search(query)
|
26
|
+
rescue StandardError => e
|
27
|
+
LOGGER.info e
|
28
|
+
nil
|
29
|
+
end
|
21
30
|
end.find(&:present?)
|
22
31
|
end
|
23
32
|
end
|
@@ -12,7 +12,8 @@ module OpenDMM
|
|
12
12
|
begin
|
13
13
|
Movie.new(query).details
|
14
14
|
rescue StandardError => e
|
15
|
-
LOGGER.
|
15
|
+
LOGGER.debug query
|
16
|
+
LOGGER.debug e
|
16
17
|
nil
|
17
18
|
end
|
18
19
|
end.find(&:present?)
|
@@ -21,8 +22,14 @@ module OpenDMM
|
|
21
22
|
private
|
22
23
|
|
23
24
|
def self.normalize(query)
|
24
|
-
query.scan(/((?:S2
|
25
|
-
|
25
|
+
query.scan(/((?:S2|2D|3D|[a-z]){2,6}?)[-_\s]?(S?\d{2,5})/i).map do |pair|
|
26
|
+
alpha = pair[0].upcase
|
27
|
+
digit = pair[1]
|
28
|
+
case alpha
|
29
|
+
when /SMBD/, /CWPBD/
|
30
|
+
digit = digit.to_i.to_s.rjust(2, '0')
|
31
|
+
end
|
32
|
+
"#{alpha}-#{digit}"
|
26
33
|
end
|
27
34
|
end
|
28
35
|
|
@@ -55,7 +62,7 @@ module OpenDMM
|
|
55
62
|
search = Search.new(query, Site.search(query))
|
56
63
|
super(query, Site.get(search.result))
|
57
64
|
|
58
|
-
@details.title = @html.css('#mini-tabet > h2').
|
65
|
+
@details.title = @html.css('#mini-tabet > h2').text
|
59
66
|
@details.cover_image = @html.at_css('#titlebox > div.list-cover > img')['src'].gsub('jacket_images', 'bigcover')
|
60
67
|
@details.code = @html.css('#mini-tabet > div').text.remove('商品番号:')
|
61
68
|
@details.categories = @html.xpath('//*[@id="TabbedPanels1"]/div/div[2]/div[2]//ol').map(&:text)
|
@@ -69,9 +76,9 @@ module OpenDMM
|
|
69
76
|
when /シリーズ/
|
70
77
|
@details.series = li.css('a').text
|
71
78
|
when /発売日/
|
72
|
-
@details.release_date = li.
|
79
|
+
@details.release_date = li.text
|
73
80
|
when /収録時間/
|
74
|
-
@details.movie_length = li.
|
81
|
+
@details.movie_length = li.text
|
75
82
|
end
|
76
83
|
end
|
77
84
|
end
|
@@ -36,7 +36,7 @@ module OpenDMM
|
|
36
36
|
@details.maker = 'Caribbean'
|
37
37
|
@details.thumbnail_image = './images/l_s.jpg'
|
38
38
|
|
39
|
-
@details.title = @html.css('#main-content > div.main-content-movieinfo > div.video-detail >
|
39
|
+
@details.title = @html.css('#main-content > div.main-content-movieinfo > div.video-detail > h1').text
|
40
40
|
@details.description = @html.css('#main-content > div.main-content-movieinfo > div.movie-comment').text
|
41
41
|
@details.sample_images = @html.css('#main-content > div.detail-content.detail-content-gallery-old > table > tr > td > a').map do |a|
|
42
42
|
a['href']
|
@@ -85,17 +85,17 @@ module OpenDMM
|
|
85
85
|
|
86
86
|
@html.css('#main-content > div.main-content-movieinfo > div.movie-info > dl').map do |dl|
|
87
87
|
case dl.at_css('dt').text
|
88
|
-
when
|
88
|
+
when /出演/
|
89
89
|
@details.actresses = dl.css('dd').map(&:text)
|
90
|
-
when
|
90
|
+
when /カテゴリー/
|
91
91
|
@details.categories = dl.css('dd').map(&:text)
|
92
|
-
when
|
92
|
+
when /販売日/
|
93
93
|
@details.release_date = dl.css('dd').text
|
94
|
-
when
|
94
|
+
when /再生時間/
|
95
95
|
@details.movie_length = dl.css('dd').text
|
96
|
-
when
|
96
|
+
when /スタジオ/
|
97
97
|
@details.maker = dl.css('dd').text
|
98
|
-
when
|
98
|
+
when /シリーズ/
|
99
99
|
@details.series = dl.css('dd').text
|
100
100
|
end
|
101
101
|
end
|
@@ -44,17 +44,17 @@ module OpenDMM
|
|
44
44
|
|
45
45
|
@html.css('#main-content > div.main-content-movieinfo > div.movie-info > dl').map do |dl|
|
46
46
|
case dl.at_css('dt').text
|
47
|
-
when
|
47
|
+
when /出演/
|
48
48
|
@details.actresses = dl.css('dd').map(&:text)
|
49
|
-
when
|
49
|
+
when /カテゴリー/
|
50
50
|
@details.categories = dl.css('dd').map(&:text)
|
51
|
-
when
|
51
|
+
when /販売日/
|
52
52
|
@details.release_date = dl.css('dd').text
|
53
|
-
when
|
53
|
+
when /再生時間/
|
54
54
|
@details.movie_length = dl.css('dd').text
|
55
|
-
when
|
55
|
+
when /スタジオ/
|
56
56
|
@details.maker = dl.css('dd').text
|
57
|
-
when
|
57
|
+
when /シリーズ/
|
58
58
|
@details.series = dl.css('dd').text
|
59
59
|
end
|
60
60
|
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'opendmm/movie'
|
2
|
+
require 'opendmm/utils/httparty'
|
3
|
+
|
4
|
+
module OpenDMM
|
5
|
+
module Engine
|
6
|
+
module DMM
|
7
|
+
def self.search(query)
|
8
|
+
queries = normalize(query)
|
9
|
+
LOGGER.debug queries
|
10
|
+
queries.lazy.map do |query|
|
11
|
+
begin
|
12
|
+
Movie.new(query).details
|
13
|
+
rescue StandardError => e
|
14
|
+
LOGGER.debug query
|
15
|
+
LOGGER.debug e
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
end.find(&:present?)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def self.normalize(query)
|
24
|
+
query.scan(/(?<!S2)([a-z]{2,6})-?(\d{2,5})/i).map do |pair|
|
25
|
+
alpha = pair[0].upcase
|
26
|
+
5.downto(3).map do |len|
|
27
|
+
digit = pair[1].rjust(len, '0')
|
28
|
+
"#{alpha}#{digit}"
|
29
|
+
end
|
30
|
+
end.flatten
|
31
|
+
end
|
32
|
+
|
33
|
+
module Site
|
34
|
+
include HTTParty
|
35
|
+
base_uri 'www.dmm.co.jp'
|
36
|
+
|
37
|
+
def self.search(query)
|
38
|
+
get "/search/=/searchstr=#{CGI::escape(query)}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class Search
|
43
|
+
def initialize(query, response)
|
44
|
+
@query = query
|
45
|
+
@response = response
|
46
|
+
@html = Nokogiri.HTML @response
|
47
|
+
end
|
48
|
+
|
49
|
+
def result
|
50
|
+
candidate = @html.at_css('#list > li > div > p.tmb > a')['href']
|
51
|
+
URI.join(@response.request.last_uri.to_s, candidate).to_s
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class Movie < OpenDMM::Movie
|
56
|
+
def initialize(query)
|
57
|
+
search = Search.new(query, Site.search(query))
|
58
|
+
super(query, Site.get(search.result))
|
59
|
+
|
60
|
+
@details.thumbnail_image = @html.at_css('#sample-video img')['src']
|
61
|
+
@details.title = @html.css('#title').text
|
62
|
+
begin
|
63
|
+
@details.cover_image = @html.at_css('#sample-video a')['href']
|
64
|
+
rescue StandardError
|
65
|
+
@details.cover_image = @details.thumbnail_image
|
66
|
+
end
|
67
|
+
|
68
|
+
details_table = @html.at_xpath('//div[@class="page-detail"]/table/tr/td[1]/table')
|
69
|
+
details_table.css('tr').each do |tr|
|
70
|
+
first = tr.css('td')[0]
|
71
|
+
second = tr.css('td')[1]
|
72
|
+
case first.text
|
73
|
+
when /配信開始日/
|
74
|
+
@details.release_date = second.text
|
75
|
+
when /収録時間/
|
76
|
+
@details.movie_length = second.text
|
77
|
+
when /出演者/
|
78
|
+
@details.actresses = second.css('span').map(&:text)
|
79
|
+
when /監督/
|
80
|
+
@details.directors = second.css('span').map(&:text)
|
81
|
+
when /シリーズ/
|
82
|
+
@details.series = second.text
|
83
|
+
when /メーカー/
|
84
|
+
@details.maker = second.text
|
85
|
+
when /レーベル/
|
86
|
+
@details.label = second.text
|
87
|
+
when /ジャンル/
|
88
|
+
@details.genres = second.css('span').map(&:text)
|
89
|
+
when /品番/
|
90
|
+
if second.text =~ /([a-z]+)(\d+)/i
|
91
|
+
@details.code = "#{$1.upcase}-#{$2.to_i.to_s.rjust(3, '0')}"
|
92
|
+
else
|
93
|
+
@details.code = second.text
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
@details.description = details_table.next_element.next_element.xpath('text()').text
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -12,7 +12,8 @@ module OpenDMM
|
|
12
12
|
begin
|
13
13
|
Movie.new(query).details
|
14
14
|
rescue StandardError => e
|
15
|
-
LOGGER.
|
15
|
+
LOGGER.debug query
|
16
|
+
LOGGER.debug e
|
16
17
|
nil
|
17
18
|
end
|
18
19
|
end.find(&:present?)
|
@@ -21,7 +22,7 @@ module OpenDMM
|
|
21
22
|
private
|
22
23
|
|
23
24
|
def self.normalize(query)
|
24
|
-
query.scan(/(
|
25
|
+
query.scan(/((?:S2|2D|3D|[a-z]){2,6})-?(\d{2,5})/i).map do |pair|
|
25
26
|
"#{pair[0].upcase}-#{pair[1]}"
|
26
27
|
end
|
27
28
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'opendmm/movie'
|
2
|
+
require 'opendmm/utils/httparty'
|
3
|
+
|
4
|
+
module OpenDMM
|
5
|
+
module Engine
|
6
|
+
module MGStage
|
7
|
+
def self.search(query)
|
8
|
+
queries = normalize(query)
|
9
|
+
LOGGER.debug queries
|
10
|
+
queries.lazy.map do |query|
|
11
|
+
begin
|
12
|
+
Movie.new(query).details
|
13
|
+
rescue StandardError => e
|
14
|
+
LOGGER.debug query
|
15
|
+
LOGGER.debug e
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
end.find(&:present?)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def self.normalize(query)
|
24
|
+
query.scan(/(?<!S2)([a-z]{2,6})-?(\d{2,5})/i).map do |pair|
|
25
|
+
"#{pair[0].upcase}-#{pair[1]}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
module Site
|
30
|
+
include HTTParty
|
31
|
+
base_uri 'www.mgstage.com'
|
32
|
+
cookies(adc: 1, coc: 1)
|
33
|
+
headers({
|
34
|
+
"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"
|
35
|
+
})
|
36
|
+
|
37
|
+
def self.movie(query)
|
38
|
+
get "/ppv/video/#{query}/"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class Movie < OpenDMM::Movie
|
43
|
+
def initialize(query)
|
44
|
+
super(query, Site.movie(query))
|
45
|
+
|
46
|
+
@details.title = @html.css('.title_detail_layout h1').text
|
47
|
+
@details.cover_image = @html.at_css('a.enlarge_image')['href']
|
48
|
+
@details.thumbnail_image = @html.at_css('a.enlarge_image > img')['src']
|
49
|
+
@details.description = @html.css('#introduction_text > p.introduction').text
|
50
|
+
@details.sample_images = @html.css('a.sample_imageN').map { |a| a['href'] }
|
51
|
+
|
52
|
+
@html.css('#CONTENT_DETAIL dl.spec_layout dt').each do |dt|
|
53
|
+
dd = dt.next_element
|
54
|
+
case dt.text
|
55
|
+
when /配信開始日/
|
56
|
+
@details.release_date = dd.text
|
57
|
+
when /収録時間/
|
58
|
+
@details.movie_length = dd.text
|
59
|
+
when /品番/
|
60
|
+
@details.code = dd.text
|
61
|
+
when /出演/
|
62
|
+
@details.actresses = dd.css('a').map(&:text)
|
63
|
+
when /メーカー/
|
64
|
+
@details.maker = dd.text
|
65
|
+
when /シリーズ名/
|
66
|
+
@details.series = dd.text
|
67
|
+
when /ジャンル/
|
68
|
+
@details.genres = dd.css('a').map(&:text)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -42,7 +42,7 @@ module OpenDMM
|
|
42
42
|
|
43
43
|
@details.title = @html.css('head > title').text.remove(/^.*「/, /」.*$/)
|
44
44
|
@details.actresses = @html.css('#profile-area > div > ul.bgoose > li > a > h2').map(&:text)
|
45
|
-
@details.description = @html.css('#profile-area > div.rr2').
|
45
|
+
@details.description = @html.css('#profile-area > div.rr2').text
|
46
46
|
@details.sample_images = @html.css('#movie-main > div.pics > table > tr > td > img').map do |img|
|
47
47
|
img['src']
|
48
48
|
end
|
@@ -24,11 +24,11 @@ module OpenDMM
|
|
24
24
|
base_uri 'www.tokyo-hot.com'
|
25
25
|
|
26
26
|
def self.list_n
|
27
|
-
get '/j/new_video0000_j.html'
|
27
|
+
@@list_n ||= get '/j/new_video0000_j.html'
|
28
28
|
end
|
29
29
|
|
30
30
|
def self.list_k
|
31
|
-
get '/j/k_video0000_j.html'
|
31
|
+
@@list_k ||= get '/j/k_video0000_j.html'
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
data/lib/opendmm/movie.rb
CHANGED
data/lib/opendmm/utils/logger.rb
CHANGED
data/lib/opendmm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opendmm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jun Zhou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -154,8 +154,10 @@ files:
|
|
154
154
|
- lib/opendmm/engines/av_entertainments.rb
|
155
155
|
- lib/opendmm/engines/caribbean.rb
|
156
156
|
- lib/opendmm/engines/caribbean_pr.rb
|
157
|
+
- lib/opendmm/engines/dmm.rb
|
157
158
|
- lib/opendmm/engines/heyzo.rb
|
158
159
|
- lib/opendmm/engines/jav_library.rb
|
160
|
+
- lib/opendmm/engines/mgstage.rb
|
159
161
|
- lib/opendmm/engines/one_pondo.rb
|
160
162
|
- lib/opendmm/engines/tokyo_hot.rb
|
161
163
|
- lib/opendmm/movie.rb
|
@@ -188,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
190
|
version: '0'
|
189
191
|
requirements: []
|
190
192
|
rubyforge_project:
|
191
|
-
rubygems_version: 2.
|
193
|
+
rubygems_version: 2.4.5
|
192
194
|
signing_key:
|
193
195
|
specification_version: 4
|
194
196
|
summary: 'OpenDMM: an open-source Japanese AV search engine'
|