opendmm 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c9fd109fd9892fc2cfc406afc24cef8a5e9ea074
4
- data.tar.gz: 75c288cb6b2f99207cee3732979eb0872d5000de
3
+ metadata.gz: fef917ffa04e30b83e92fcdce69f4d92c83006de
4
+ data.tar.gz: 3abff14037ac54df6af8ef421ca7d8ee538f0aa3
5
5
  SHA512:
6
- metadata.gz: 0df748805f49ad23c4810348dccdc10b705089794a91fa4eeab3acbf12c2c8df36e2303e8222857b1a29ac6ecf3210961b951576c229ed9a16c15400284972e4
7
- data.tar.gz: 2cc330c9b81004a9588961a7b97cc86db347f98bb97eeb5e430da293cc7adf990537898abe3f79b14e479dc7634c57c3366c486cb1a6374627e939bc88f3e62e
6
+ metadata.gz: e86153d2202b017d9b5696c3df5046e306b2863bbb0c25667e057af9da6213b9da0c22b5340a0242c9b8e36fab1e8644cb94fc2cb087d2237a286bafd0b80ca1
7
+ data.tar.gz: 2797b8aa6aa8d380e0e335c22206605f55a2cd2268d85c0da8fea08624898a714984474dffb5e9775a4512b89c7da02cd06c41bf7fa99b0510a5a5c97e37222b
@@ -22,7 +22,7 @@ module OpenDMM
22
22
  private
23
23
 
24
24
  def self.normalize(query)
25
- query.scan(/((?:S2|2D|3D|[a-z]){2,6}?)[-_\s]?(S?\d{2,5})/i).map do |pair|
25
+ query.scan(/((?:S2|2D|3D|[a-z]){2,6}?)[-_\s]?([SM]?\d{2,5})/i).map do |pair|
26
26
  alpha = pair[0].upcase
27
27
  digit = pair[1]
28
28
  case alpha
@@ -7,14 +7,12 @@ module OpenDMM
7
7
  def self.search(query)
8
8
  query = normalize(query)
9
9
  return unless query
10
- return MovieN.new(query).details if query.start_with? 'n'
11
- return MovieK.new(query).details if query.start_with? 'k'
10
+ Movie.new(query).details
12
11
  end
13
12
 
14
13
  private
15
14
 
16
15
  def self.normalize(query)
17
- # return unless query =~ /Tokyo[-_\s]*Hot/
18
16
  return unless query =~ /(k|n)(\d{3,4})/
19
17
  "#{$1}#{$2.rjust(4, '0')}"
20
18
  end
@@ -23,54 +21,55 @@ module OpenDMM
23
21
  include HTTParty
24
22
  base_uri 'www.tokyo-hot.com'
25
23
 
26
- def self.list_n
27
- @@list_n ||= get '/j/new_video0000_j.html'
28
- end
29
-
30
- def self.list_k
31
- @@list_k ||= get '/j/k_video0000_j.html'
24
+ def self.search(query)
25
+ get "http://www.tokyo-hot.com/product/?q=#{CGI::escape(query)}"
32
26
  end
33
27
  end
34
28
 
35
- class MovieN < OpenDMM::Movie
36
- def initialize(query)
37
- super(query, Site.list_n)
38
-
39
- @details.code = "Tokyo Hot #{query}"
40
- @details.maker = 'Tokyo Hot'
41
-
42
- link = @html.at_xpath("//a[contains(@href, '#{@query}')]")
43
- @details.page = link['href']
44
- @details.cover_image = link.at_css('img')['src']
29
+ class Search
30
+ def initialize(query, response)
31
+ @query = query
32
+ @response = response
33
+ @html = Nokogiri.HTML @response
34
+ end
45
35
 
46
- table = link.ancestors('table').first
47
- table.css('br').each do |br|
48
- br.replace "\n"
49
- end
50
- @details.title = table.at_xpath('tr[1]').text
51
- @details.actresses = table.at_xpath('tr[2]').text.squish.remove('--').split(/[\s、,]/)
52
- @details.release_date = table.at_xpath('tr[3]').text.remove('更新日')
36
+ def result
37
+ candidate = @html.at_css('#main > ul > li > a')['href']
38
+ URI.join(@response.request.last_uri.to_s, candidate).to_s
53
39
  end
54
40
  end
55
41
 
56
- class MovieK < OpenDMM::Movie
42
+ class Movie < OpenDMM::Movie
57
43
  def initialize(query)
58
- super(query, Site.list_k)
44
+ search = Search.new(query, Site.search(query))
45
+ super(query, Site.get(search.result))
59
46
 
60
- @details.code = "Tokyo Hot #{query}"
61
- @details.maker = 'Tokyo Hot'
47
+ @details.maker = 'Tokyo Hot'
62
48
 
63
- link = @html.at_xpath("//a[contains(@href, '#{@query}')]")
64
- @details.page = link['href']
65
- @details.cover_image = link.at_css('img')['src']
49
+ @details.title = @html.at_css('#container > div.pagetitle > h2').text
50
+ @details.cover_image = @html.at_css('#container > div.movie.cf > div.in > div.flowplayer > video')['poster']
51
+ @details.description = @html.at_css('#main > div.contents > div.sentence').text
66
52
 
67
- table = link.ancestors('table').first
68
- @details.title = table.at_xpath('tr[1]').text.remove('-').squish
69
- if @details.title =~ /餌食牝\s(.*)/
70
- @details.actresses = $1.squish.split
71
- @details.title = '餌食牝'
53
+ @html.css('#main > div.contents > div.infowrapper > dl > dt').each do |dt|
54
+ dd = dt.next_element
55
+ case dt.text
56
+ when /出演者/
57
+ @details.actresses = dd.css('a').map(&:text)
58
+ when /シリーズ/
59
+ @details.series = dd.text
60
+ when /カテゴリ/
61
+ @details.categories = dd.css('a').map(&:text)
62
+ when /配信開始日/
63
+ @details.release_date = dd.text
64
+ when /収録時間/
65
+ @details.movie_length = dd.text
66
+ when /作品番号/
67
+ @details.code = 'Tokyo Hot ' + dd.text
68
+ end
72
69
  end
73
- @details.release_date = table.at_xpath('tr[2]').text.remove('更新日')
70
+
71
+ @details.sample_images = @html.css('#main > div.contents > div.scap > a,
72
+ #main > div.contents > div.vcap > a').map { |a| a['href'] }
74
73
  end
75
74
  end
76
75
  end
@@ -81,11 +81,11 @@ module OpenDMM
81
81
  when :String
82
82
  value.to_s.squish
83
83
  when :URI
84
- URI.join(self.base_uri, value).to_s
84
+ URI.join(self.base_uri, URI.escape(value)).to_s
85
85
  when :URIArray
86
86
  raise "Field #{key} not an array: #{value}" unless value.instance_of? Array
87
87
  value.map do |uri|
88
- URI.join(self.base_uri, uri.squish).to_s
88
+ URI.join(self.base_uri, URI.escape(uri)).to_s
89
89
  end.sort
90
90
  else
91
91
  raise ArgumentError.new("Unknown value type: #{type}")
@@ -1,3 +1,3 @@
1
1
  module OpenDMM
2
- VERSION = '1.0.2'
2
+ VERSION = '1.0.3'
3
3
  end
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.2
4
+ version: 1.0.3
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-06-05 00:00:00.000000000 Z
11
+ date: 2015-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler