opendmm 0.2.4 → 0.3.0

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: b7d45d06edc0ef2834f1b035fd2878d4a53df0d2
4
- data.tar.gz: 4013ff46a71411e70b5c9c36dafb60b377d73cd1
3
+ metadata.gz: dcb307a68ede63bf0c10d4d4b368dbe17e134817
4
+ data.tar.gz: 36dd9d16f2a41f4e4e7f8f2ea663b62bae9f4569
5
5
  SHA512:
6
- metadata.gz: 03be767aaa8e6465d1e9da6be6925f7b68ad8f1d5fd7eb0a2ff42f3d84c61825731c4c3d95061486a82ea1c0ffc4920d2cfd1f7394690b6f19faed4da7aa003e
7
- data.tar.gz: 7a5e736e33a7d5a44199d52a6a9233b27653a1286472826201d0707206e57027248aa80a80b5680c4241610613b63b412308815742d09480b1970be5f4698b1e
6
+ metadata.gz: 5e81e98195a59d5ce7152300dc26cfcf057ed02d867821f49b7a55f44908892a9731e2351572cf7dfa5de2da79bc6776657ad80f5eb61efe45a69083b4ad9c8c
7
+ data.tar.gz: 6595d1e87214938c3aa2fd9790328715c8df23059c9b2e2de6255aedd19a08721825439ed9c6ad86b9ced71ed22d89122dd858818c0a3b73def66af00eb54735
data/Rakefile CHANGED
@@ -37,7 +37,8 @@ namespace :fixture do
37
37
  puts "#{id} not found"
38
38
  return
39
39
  end
40
- File.open(File.join(File.dirname(__FILE__) + "/test/#{category}_fixtures/#{id}.json"), 'w') do |file|
40
+ FileUtils.mkpath File.dirname(__FILE__) + "/test/#{category}_fixtures/"
41
+ File.open(File.dirname(__FILE__) + "/test/#{category}_fixtures/#{id}.json", 'w') do |file|
41
42
  puts "Generating #{id}.json"
42
43
  file.puts JSON.pretty_generate(fixture)
43
44
  end
@@ -88,5 +89,56 @@ CODE
88
89
  end
89
90
  end
90
91
 
92
+ namespace :search_engine do
93
+ desc "Generate a search engine"
94
+ task :generate, [:name] do |t, args|
95
+ File.open(File.join(File.dirname(__FILE__) + "/lib/opendmm/search_engines/#{args[:name].underscore}.rb"), 'w') do |file|
96
+ puts "Generating #{args[:name].underscore}.rb"
97
+ file.puts <<-CODE
98
+ base_uri 'example.com'
99
+
100
+ def self.search_url(name)
101
+ "#{CGI::escape(name)}"
102
+ end
103
+
104
+ def self.product_url(name)
105
+ search_page = get_with_retry search_url(name)
106
+ return nil unless search_page
107
+ search_html = Utils.html_in_utf8 search_page
108
+ first_result = search_html.at_css('CHANGEME')
109
+ first_result['href'] if first_result
110
+ end
111
+
112
+ private
113
+
114
+ def self.parse_product_html(html)
115
+ {
116
+ # actresses: Array
117
+ # brand: String
118
+ # categories: Array
119
+ # code: String
120
+ # cover_image: String
121
+ # description: String
122
+ # directors: Array
123
+ # genres: Array
124
+ # label: String
125
+ # maker: String
126
+ # movie_length: String
127
+ # page: String
128
+ # release_date: String
129
+ # sample_images: Array
130
+ # scenes: Array
131
+ # series: String
132
+ # subtitle: String
133
+ # theme: String
134
+ # thumbnail_image: String
135
+ # title: String
136
+ }
137
+ end
138
+ CODE
139
+ end
140
+ end
141
+ end
142
+
91
143
  task :test => :install
92
144
  task :default => :test
@@ -0,0 +1,45 @@
1
+ base_uri 'www.aventertainments.com'
2
+ headers({
3
+ "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"
4
+ })
5
+
6
+ def self.search_url(name)
7
+ "/search_Products.aspx?keyword=#{CGI::escape(name)}"
8
+ end
9
+
10
+ def self.product_url(name)
11
+ search_page = get_with_retry search_url(name)
12
+ return nil unless search_page
13
+ search_html = Utils.html_in_utf8 search_page
14
+ first_result = search_html.at_css('div.main-unit2 > table a')
15
+ first_result['href'] if first_result
16
+ end
17
+
18
+ private
19
+
20
+ def self.parse_product_html(html)
21
+ specs = Utils.hash_by_split(html.xpath('//*[@id="TabbedPanels1"]/div/div[2]/div[1]//ol').text.split('|')).merge(
22
+ Utils.hash_by_split(html.xpath('//*[@id="titlebox"]/ul[3]/li').map(&:text)))
23
+ {
24
+ actresses: specs['主演女優'].split(','),
25
+ # brand: String
26
+ categories: html.xpath('//*[@id="TabbedPanels1"]/div/div[2]/div[2]//ol').map(&:text),
27
+ code: specs['商品番号'],
28
+ cover_image: html.at_css('#titlebox > div.list-cover > img')['src'].gsub('jacket_images', 'bigcover'),
29
+ description: html.css('#titlebox > div.border > p').map(&:text),
30
+ # directors: Array
31
+ # genres: Array
32
+ # label: String
33
+ maker: specs['スタジオ'],
34
+ movie_length: specs['収録時間'],
35
+ # page: String
36
+ release_date: specs['発売日'],
37
+ # sample_images: Array
38
+ # scenes: Array
39
+ series: specs['シリーズ'],
40
+ # subtitle: String
41
+ # theme: String
42
+ thumbnail_image: html.at_css('#titlebox > div.list-cover > img')['src'],
43
+ title: html.css('#mini-tabet > h2').text,
44
+ }
45
+ end
@@ -4,10 +4,17 @@ headers({
4
4
  "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"
5
5
  })
6
6
 
7
- register_product(
8
- /^(\w+?)-?(\d+)$/i,
9
- '/ppv/video/#{$1.upcase}-#{$2}',
10
- )
7
+ def self.search_url(name)
8
+ "/ppv/list/search/#{CGI::escape(name)}/1/table/date/all/"
9
+ end
10
+
11
+ def self.product_url(name)
12
+ search_page = get_with_retry search_url(name)
13
+ return nil unless search_page
14
+ search_html = Utils.html_in_utf8 search_page
15
+ first_result = search_html.at_css('#Content > ul > li.item_layout_02_price > a')
16
+ first_result['href'] if first_result
17
+ end
11
18
 
12
19
  private
13
20
 
data/lib/opendmm/site.rb CHANGED
@@ -24,7 +24,7 @@ module OpenDMM
24
24
  rescue Errno::ETIMEDOUT => e
25
25
  tries ||= 0
26
26
  tries++
27
- tries <= 5 ? retry : raise
27
+ tries <= limit ? retry : raise
28
28
  end
29
29
 
30
30
  def register_product(matcher, url_generator, code_generator = '#{$1.upcase}-#{$2}')
@@ -1,3 +1,3 @@
1
1
  module OpenDMM
2
- VERSION = '0.2.4'
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/opendmm.rb CHANGED
@@ -33,7 +33,10 @@ module OpenDMM
33
33
  # }
34
34
 
35
35
  def self.search(name, debug = false)
36
- Maker.search(name) || SearchEngine::JavLibrary.search(name) || SearchEngine::Dmm.search(name) || SearchEngine::Mgstage.search(name)
36
+ [ Maker, SearchEngine::JavLibrary, SearchEngine::Dmm, SearchEngine::Mgstage, SearchEngine::AvEntertainments ].each do |engine|
37
+ result = engine.search(name)
38
+ return result if result
39
+ end
37
40
  rescue => e
38
41
  if debug
39
42
  puts e.inspect
@@ -0,0 +1,55 @@
1
+ {
2
+ "actresses": [
3
+ "横山みれい",
4
+ "波多野結衣",
5
+ "本多成実",
6
+ "鈴木さとみ",
7
+ "小峰ひなた",
8
+ "菅原奈緒美",
9
+ "若林美保",
10
+ "志村玲子",
11
+ "小川瑞希",
12
+ "松本まりな",
13
+ "飯岡かなこ",
14
+ "岩佐あゆみ",
15
+ "美山蘭子",
16
+ "羽月希",
17
+ "朝桐光",
18
+ "小阪めぐる",
19
+ "沙織",
20
+ "江波りゅう"
21
+ ],
22
+ "categories": [
23
+ "完全無修正",
24
+ "サンプル動画上映中",
25
+ "アナルセックス",
26
+ "生姦・ゴム無し",
27
+ "巨乳・爆乳・超乳",
28
+ "生中出し",
29
+ "総集編・オムニバス",
30
+ "網タイツ",
31
+ "マダム",
32
+ "美肌・美白",
33
+ "美女・美人",
34
+ "美マン",
35
+ "強烈ピストンバック",
36
+ "パイズリ",
37
+ "背面騎乗位",
38
+ "巨大電マ責め",
39
+ "男のアナルを舐める",
40
+ "ボンテージ",
41
+ "ブルーレイ・ディスク"
42
+ ],
43
+ "code": "SKYHD-108",
44
+ "cover_image": "http://imgs.aventertainments.com/new/bigcover/DVD1SKYHD-108.jpg",
45
+ "description": [
46
+ "究極の熟女ワールド総集編第三弾がついに出ました~!!ベテラン美熟女横山みれいから超人気沸騰中の美熟女江波りゅうまで、こんなに美しすぎる熟女が一挙に見れてしまう永久保存版の豪華作品、見逃してはなりませ~ん!欲に従順で快感に乱れまくる、肉食熟女達が魅せる猛烈な淫乱プレイの数々!!熟した女達の甘く濃厚なフルコースをどうぞお楽しみに!!!"
47
+ ],
48
+ "maker": "スカイハイエンターテインメント",
49
+ "movie_length": 180,
50
+ "page": "http://www.aventertainments.com/product_lists.aspx?product_id=69681&languageID=2&dept_id=29",
51
+ "release_date": "2013-06-08",
52
+ "series": "スカイハイ熟女プレミアム",
53
+ "thumbnail_image": "http://imgs.aventertainments.com/new/jacket_images/DVD1SKYHD-108.jpg",
54
+ "title": "スカイハイ熟女プレミアム Vol.3 : 横山みれい, 波多野結衣, 鈴木さとみ, 江波りゅう, 総勢18名(ブルーレイディスク版)"
55
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "actresses": [
3
+ "大場ゆい"
4
+ ],
5
+ "code": "JUFD-379",
6
+ "cover_image": "http://pics.dmm.co.jp/mono/movie/adult/jufd379/jufd379pl.jpg",
7
+ "directors": [
8
+ "五右衛門"
9
+ ],
10
+ "genres": [
11
+ "手コキ",
12
+ "単体作品",
13
+ "淫語",
14
+ "痴女",
15
+ "長身",
16
+ "デジモ",
17
+ "サンプル動画"
18
+ ],
19
+ "label": "Fitch",
20
+ "maker": "Fitch",
21
+ "movie_length": 9000,
22
+ "page": "http://www.javlibrary.com/ja/?v=javlijyv5q",
23
+ "release_date": "2014-07-01",
24
+ "thumbnail_image": "http://pics.dmm.co.jp/mono/movie/adult/jufd379/jufd379pl.jpg",
25
+ "title": "早漏を溺愛する連続射精痴女 大場ゆい"
26
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "actresses": [
3
+ "希志あいの"
4
+ ],
5
+ "code": "SOE-379",
6
+ "cover_image": "http://s1s1s1.com/images/works/soe379/soe379pl.jpg",
7
+ "description": "「オトコなら誰もがシテみたい最高のシチュエーション」深夜の病棟で声を押し殺して…双子の姉妹両方と…タマッた女将と…久しぶりに再会した同級生と…etc 絶対にヤリたい瞬間がココにある!現実に起きたらたまらないハレンチな妄想が凝縮されたこの一本!4時間のボリュームで堪能できる希志あいのエスワン第二弾!",
8
+ "directors": [
9
+ "ザック荒井"
10
+ ],
11
+ "maker": "S1",
12
+ "page": "http://s1s1s1.com/works/-/detail/=/cid=soe379",
13
+ "release_date": "2010-04-07",
14
+ "sample_images": [
15
+ "http://s1s1s1.com/images/works/soe379/soe379jp-01.jpg",
16
+ "http://s1s1s1.com/images/works/soe379/soe379jp-02.jpg",
17
+ "http://s1s1s1.com/images/works/soe379/soe379jp-03.jpg",
18
+ "http://s1s1s1.com/images/works/soe379/soe379jp-04.jpg",
19
+ "http://s1s1s1.com/images/works/soe379/soe379jp-05.jpg",
20
+ "http://s1s1s1.com/images/works/soe379/soe379jp-06.jpg",
21
+ "http://s1s1s1.com/images/works/soe379/soe379jp-07.jpg",
22
+ "http://s1s1s1.com/images/works/soe379/soe379jp-08.jpg",
23
+ "http://s1s1s1.com/images/works/soe379/soe379jp-09.jpg",
24
+ "http://s1s1s1.com/images/works/soe379/soe379jp-10.jpg"
25
+ ],
26
+ "thumbnail_image": "http://s1s1s1.com/images/works/soe379/soe379ps.jpg",
27
+ "title": "希志あいのハイパーエスワン スペシャルVol.2〜妄想エッチ〜"
28
+ }
@@ -14,7 +14,7 @@
14
14
  ],
15
15
  "maker": "シロウトTV",
16
16
  "movie_length": 3000,
17
- "page": "http://www.mgstage.com/ppv/video/SIRO-1088",
17
+ "page": "http://www.mgstage.com/ppv/video/SIRO-1088/",
18
18
  "release_date": "2012-06-23",
19
19
  "sample_images": [
20
20
  "http://image.mgstage.com/images/shirouto/siro/1088/cap_e_0_siro-1088.jpg",
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: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jun Zhou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-01 00:00:00.000000000 Z
11
+ date: 2014-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -160,6 +160,7 @@ files:
160
160
  - lib/opendmm/makers/to_satsu.rb
161
161
  - lib/opendmm/makers/waap.rb
162
162
  - lib/opendmm/search_engine.rb
163
+ - lib/opendmm/search_engines/av_entertainments.rb
163
164
  - lib/opendmm/search_engines/dmm.rb
164
165
  - lib/opendmm/search_engines/jav_library.rb
165
166
  - lib/opendmm/search_engines/mgstage.rb
@@ -167,9 +168,11 @@ files:
167
168
  - lib/opendmm/utils.rb
168
169
  - lib/opendmm/version.rb
169
170
  - opendmm.gemspec
171
+ - test/av_entertainments_fixtures/SKYHD-108.json
170
172
  - test/dmm_fixtures/DMYJ-001.json
171
173
  - test/dmm_fixtures/dmyj00001.json
172
174
  - test/fixture_test.rb
175
+ - test/jav_library_fixtures/JUFD-379.json
173
176
  - test/jav_library_fixtures/XV-100.json
174
177
  - test/jav_library_fixtures/XV-1000.json
175
178
  - test/maker_fixtures/ABP-013.json
@@ -302,6 +305,7 @@ files:
302
305
  - test/maker_fixtures/SHKD-415.json
303
306
  - test/maker_fixtures/SNIS-041.json
304
307
  - test/maker_fixtures/SOE-259.json
308
+ - test/maker_fixtures/SOE-379.json
305
309
  - test/maker_fixtures/SPC-001.json
306
310
  - test/maker_fixtures/SPS-008.json
307
311
  - test/maker_fixtures/SRS-015.json
@@ -354,9 +358,11 @@ signing_key:
354
358
  specification_version: 4
355
359
  summary: 'OpenDMM: an open-source Japanese AV search engine'
356
360
  test_files:
361
+ - test/av_entertainments_fixtures/SKYHD-108.json
357
362
  - test/dmm_fixtures/DMYJ-001.json
358
363
  - test/dmm_fixtures/dmyj00001.json
359
364
  - test/fixture_test.rb
365
+ - test/jav_library_fixtures/JUFD-379.json
360
366
  - test/jav_library_fixtures/XV-100.json
361
367
  - test/jav_library_fixtures/XV-1000.json
362
368
  - test/maker_fixtures/ABP-013.json
@@ -489,6 +495,7 @@ test_files:
489
495
  - test/maker_fixtures/SHKD-415.json
490
496
  - test/maker_fixtures/SNIS-041.json
491
497
  - test/maker_fixtures/SOE-259.json
498
+ - test/maker_fixtures/SOE-379.json
492
499
  - test/maker_fixtures/SPC-001.json
493
500
  - test/maker_fixtures/SPS-008.json
494
501
  - test/maker_fixtures/SRS-015.json