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 +4 -4
- data/Rakefile +53 -1
- data/lib/opendmm/search_engines/av_entertainments.rb +45 -0
- data/lib/opendmm/search_engines/mgstage.rb +11 -4
- data/lib/opendmm/site.rb +1 -1
- data/lib/opendmm/version.rb +1 -1
- data/lib/opendmm.rb +4 -1
- data/test/av_entertainments_fixtures/SKYHD-108.json +55 -0
- data/test/jav_library_fixtures/JUFD-379.json +26 -0
- data/test/maker_fixtures/SOE-379.json +28 -0
- data/test/mgstage_fixtures/SIRO-1088.json +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dcb307a68ede63bf0c10d4d4b368dbe17e134817
|
4
|
+
data.tar.gz: 36dd9d16f2a41f4e4e7f8f2ea663b62bae9f4569
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
8
|
-
|
9
|
-
|
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
data/lib/opendmm/version.rb
CHANGED
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
|
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.
|
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-
|
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
|