opendmm 0.1.7 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +46 -36
- data/lib/opendmm/search_engines/mgstage.rb +41 -0
- data/lib/opendmm/version.rb +1 -1
- data/lib/opendmm.rb +1 -1
- data/test/fixture_test.rb +2 -1
- data/test/mgstage_fixtures/SIRO-1088.json +29 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0eb9843e091ce7fb7ac11d92dd4d57d2823eeabb
|
4
|
+
data.tar.gz: d635a34a6ade9aacc2adfa6c48ec88ffc606ab71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f1a6585dbff1467afe45e93419e3181969dc914a93bdc47c5406b36bb9237b1e51696d12a77a4938d83f31c69eb415546e71092e9e052a010fb9aca13d4e399
|
7
|
+
data.tar.gz: d366e125b29588550a79a2e675d5b4455a4a97a6828966885ca8a495a79069addd5b93d0d11b22143f43c4c08ce543ad73005c900de89b96cf9798c343a4d801
|
data/Rakefile
CHANGED
@@ -8,17 +8,14 @@ Rake::TestTask.new do |t|
|
|
8
8
|
end
|
9
9
|
|
10
10
|
namespace :fixture do
|
11
|
-
desc 'Generate a fixture'
|
12
|
-
task :
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
puts "Generating #{args[:id]}.json"
|
20
|
-
file.puts JSON.pretty_generate(fixture)
|
21
|
-
end
|
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])
|
22
19
|
end
|
23
20
|
|
24
21
|
desc 'Regenerate all fixtures'
|
@@ -31,6 +28,20 @@ namespace :fixture do
|
|
31
28
|
end
|
32
29
|
end
|
33
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
|
+
File.open(File.join(File.dirname(__FILE__) + "/test/#{category}_fixtures/#{id}.json"), 'w') do |file|
|
41
|
+
puts "Generating #{id}.json"
|
42
|
+
file.puts JSON.pretty_generate(fixture)
|
43
|
+
end
|
44
|
+
end
|
34
45
|
end
|
35
46
|
|
36
47
|
namespace :maker do
|
@@ -43,39 +54,38 @@ base_uri 'example.com'
|
|
43
54
|
|
44
55
|
register_product(
|
45
56
|
/^(EXAM)-?(\d{3})$/i,
|
46
|
-
'
|
57
|
+
'#\{$1.downcase\}#\{$2\}',
|
47
58
|
)
|
48
59
|
|
49
60
|
private
|
50
61
|
|
51
62
|
def self.parse_product_html(html)
|
52
63
|
{
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
67
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
71
|
-
#
|
72
|
-
#
|
73
|
-
#
|
74
|
-
#
|
75
|
-
#
|
64
|
+
# actresses: Array
|
65
|
+
# actress_types: Array
|
66
|
+
# boobs: String
|
67
|
+
# brand: String
|
68
|
+
# categories: Array
|
69
|
+
# code: String
|
70
|
+
# cover_image: String
|
71
|
+
# description: String
|
72
|
+
# directors: Array
|
73
|
+
# genres: Array
|
74
|
+
# label: String
|
75
|
+
# maker: String
|
76
|
+
# movie_length: String
|
77
|
+
# page: String
|
78
|
+
# release_date: String
|
79
|
+
# sample_images: Array
|
80
|
+
# scenes: Array
|
81
|
+
# series: String
|
82
|
+
# subtitle: String
|
83
|
+
# theme: String
|
84
|
+
# thumbnail_image: String
|
85
|
+
# title: String
|
86
|
+
# __extra: Hash
|
76
87
|
}
|
77
88
|
end
|
78
|
-
|
79
89
|
CODE
|
80
90
|
end
|
81
91
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
base_uri 'www.mgstage.com'
|
2
|
+
cookies(adc: 1, coc: 1)
|
3
|
+
headers({
|
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
|
+
})
|
6
|
+
|
7
|
+
register_product(
|
8
|
+
/^(\w+?)-?(\d+)$/i,
|
9
|
+
'/ppv/video/#{$1.upcase}-#{$2}',
|
10
|
+
)
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def self.parse_product_html(html)
|
15
|
+
specs = Utils.hash_from_dl(html.css('div.content_detail_layout_01 > dl.spec_layout'))
|
16
|
+
{
|
17
|
+
actresses: specs['出演:'].css('a').map(&:text),
|
18
|
+
# actress_types: Array
|
19
|
+
# boobs: String
|
20
|
+
# brand: String
|
21
|
+
# categories: Array
|
22
|
+
code: specs['品番:'].text,
|
23
|
+
cover_image: html.at_css('#EnlargeImage')['href'],
|
24
|
+
description: html.css('#introduction_text > p.introduction').text,
|
25
|
+
# directors: Array
|
26
|
+
genres: specs['ジャンル:'].css('a').map(&:text),
|
27
|
+
# label: String
|
28
|
+
maker: specs['メーカー:'].text,
|
29
|
+
movie_length: specs['収録時間:'].text,
|
30
|
+
# page: String
|
31
|
+
release_date: specs['配信開始日:'].text,
|
32
|
+
sample_images: html.css('div.content_sample_layout_01 > a.sample_image').map { |a| a['href'] },
|
33
|
+
# scenes: Array
|
34
|
+
series: specs['シリーズ名:'].text,
|
35
|
+
# subtitle: String
|
36
|
+
# theme: String
|
37
|
+
thumbnail_image: html.at_css('div.content_detail_layout_01 img.enlarge_image')['src'],
|
38
|
+
title: html.css('.title_detail_layout h1').text,
|
39
|
+
# __extra: Hash
|
40
|
+
}
|
41
|
+
end
|
data/lib/opendmm/version.rb
CHANGED
data/lib/opendmm.rb
CHANGED
@@ -32,7 +32,7 @@ module OpenDMM
|
|
32
32
|
# }
|
33
33
|
|
34
34
|
def self.search(name, debug = false)
|
35
|
-
Maker.search(name) || SearchEngine::JavLibrary.search(name) || SearchEngine::Dmm.search(name)
|
35
|
+
Maker.search(name) || SearchEngine::JavLibrary.search(name) || SearchEngine::Dmm.search(name) || SearchEngine::Mgstage.search(name)
|
36
36
|
rescue => e
|
37
37
|
if debug
|
38
38
|
puts e.inspect
|
data/test/fixture_test.rb
CHANGED
@@ -58,7 +58,8 @@ end
|
|
58
58
|
|
59
59
|
{ 'dmm' => 'OpenDMM::SearchEngine::Dmm',
|
60
60
|
'jav_library' => 'OpenDMM::SearchEngine::JavLibrary',
|
61
|
-
'maker' => 'OpenDMM::Maker'
|
61
|
+
'maker' => 'OpenDMM::Maker',
|
62
|
+
'mgstage' => 'OpenDMM::SearchEngine::Mgstage' }.each do |category, klass|
|
62
63
|
Dir[File.dirname(__FILE__) + "/#{category}_fixtures/*.json"].each do |file|
|
63
64
|
name = File.basename(file, '.json')
|
64
65
|
eval <<-TESTCASE
|
@@ -0,0 +1,29 @@
|
|
1
|
+
{
|
2
|
+
"actresses": [
|
3
|
+
"サトミ 20歳 学生"
|
4
|
+
],
|
5
|
+
"code": "SIRO-1088",
|
6
|
+
"cover_image": "http://image.mgstage.com/images/shirouto/siro/1088/pb_e_siro-1088.jpg",
|
7
|
+
"description": "今や時代はグローバル。自国だけにとどまらず海外の動きまで目を配らなければトレンドに乗り遅れてしまう。そんなご時世にピッタリのシロウト美少女が、AVの撮影にやってきた。言わばシロウト娘の期待の星と言っても過言ではないだろう。名前はサトミ、学生だ。周囲からは「ワールドワイド・サトミ」と呼ばれているそうだ。彼女、面接時に記入するプロフィール用紙の名前欄には「satomi」と表記されていた(見づらいとかややこしいとか文句を言われるとアレなので、ここではカタカナ表記で紹介させてもらっている)。このことからも察せるように、彼女は海外、特に英語圏への関心が強い。学校でも英語の勉強に力を入れており、流暢な英語からもその熱心ぶりがうかがえる。将来海外で生活することを夢見て、着々と準備を進めている。さて、彼女がここまで海外に強い憧れを抱いている理由なのだが、それは彼女の男性経験が強く関わっている。彼女が今までに付き合ってきた男性は皆、良く言えば優しい、悪く言えばホネがない、といった感じだった。普段一緒にいる分にはいいのだが、エッチの時は、どうも物足りなく感じてしまう。彼女は人より強引に責められるのが好きなのだ。そんな中彼女の目に留まったのが、海外のAVだ。逞しい身体、オモチャのように女を弄ぶ様……彼女は一瞬で虜になった。私も外国の男の人とエッチがしたい……その欲望が、彼女の心を海外へと駆り立てているのだ。そんな「ワールドワイド・サトミ」ちゃんの話を聞き、是非この機会に海外の男性との初エッチを体験していただきたいとも思ったのだが、残念ながら今回は用意できなかった。彼女には申し訳ないが、せめてこの撮影で得たギャラを、夢の実現に役立てて欲しいと思う。ここでお待ちかね、彼女自身のエッチはというと、世界に目を向けつつ、日本が世界に誇る「和の心」は、しっかりその身体に残している。和の心、それすなわち「恥じらい」である。ノリノリであったり性欲剥き出しなのもいいのだが、やはり責められて恥ずかしがっている所はグッとくるし、どこかこう、趣深いところがある。鏡の前に立たされ、おっぱいなどをいじられているところを見せつけられ恥ずかしがっている様はたまらなく興奮する。どうでしょう、海の向こうに広がる世界に思いを馳せながら、「ワールドワイド・サトミ」の恥じらう姿で一発。是非ご覧になってみてください。",
|
8
|
+
"genres": [
|
9
|
+
"スレンダー",
|
10
|
+
"ハイビジョン(HD)",
|
11
|
+
"ハメ撮り",
|
12
|
+
"フェラ",
|
13
|
+
"素人"
|
14
|
+
],
|
15
|
+
"maker": "シロウトTV",
|
16
|
+
"movie_length": 3000,
|
17
|
+
"page": "http://www.mgstage.com/ppv/video/SIRO-1088",
|
18
|
+
"release_date": "2012-06-23",
|
19
|
+
"sample_images": [
|
20
|
+
"http://image.mgstage.com/images/shirouto/siro/1088/cap_e_0_siro-1088.jpg",
|
21
|
+
"http://image.mgstage.com/images/shirouto/siro/1088/cap_e_1_siro-1088.jpg",
|
22
|
+
"http://image.mgstage.com/images/shirouto/siro/1088/cap_e_2_siro-1088.jpg",
|
23
|
+
"http://image.mgstage.com/images/shirouto/siro/1088/cap_e_3_siro-1088.jpg",
|
24
|
+
"http://image.mgstage.com/images/shirouto/siro/1088/cap_e_4_siro-1088.jpg"
|
25
|
+
],
|
26
|
+
"series": "素人個人撮影、投稿。",
|
27
|
+
"thumbnail_image": "http://image.mgstage.com/images/shirouto/siro/1088/pb_p_siro-1088.jpg",
|
28
|
+
"title": "素人個人撮影、投稿。155"
|
29
|
+
}
|
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.2.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-06-
|
11
|
+
date: 2014-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -161,6 +161,7 @@ files:
|
|
161
161
|
- lib/opendmm/search_engine.rb
|
162
162
|
- lib/opendmm/search_engines/dmm.rb
|
163
163
|
- lib/opendmm/search_engines/jav_library.rb
|
164
|
+
- lib/opendmm/search_engines/mgstage.rb
|
164
165
|
- lib/opendmm/site.rb
|
165
166
|
- lib/opendmm/utils.rb
|
166
167
|
- lib/opendmm/version.rb
|
@@ -312,6 +313,7 @@ files:
|
|
312
313
|
- test/maker_fixtures/YRH-008.json
|
313
314
|
- test/maker_fixtures/YRZ-009.json
|
314
315
|
- test/maker_fixtures/ZEX-068.json
|
316
|
+
- test/mgstage_fixtures/SIRO-1088.json
|
315
317
|
homepage:
|
316
318
|
licenses:
|
317
319
|
- MIT
|
@@ -484,3 +486,4 @@ test_files:
|
|
484
486
|
- test/maker_fixtures/YRH-008.json
|
485
487
|
- test/maker_fixtures/YRZ-009.json
|
486
488
|
- test/maker_fixtures/ZEX-068.json
|
489
|
+
- test/mgstage_fixtures/SIRO-1088.json
|