valanga 0.2.0 → 0.3.0
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/CHANGELOG.md +4 -0
- data/README.md +18 -0
- data/lib/valanga/client.rb +3 -2
- data/lib/valanga/music.rb +7 -12
- data/lib/valanga/music/collete.rb +10 -25
- data/lib/valanga/music/groovin.rb +8 -17
- data/lib/valanga/music_search.rb +45 -17
- data/lib/valanga/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e04b358a187ccce5fa8743f643f117836f664f4
|
4
|
+
data.tar.gz: caaed27bae15172fcc4a6a7d3294054eb32bbf37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b9c244a0c3c871f0f3f15c42f18bf191f46b214d0cfa4f2c42e336d28cc63ce86cea0dc9287f57d64c4822486bfc1ffa92b6d33e8ad3eecc72a78af58efb4af
|
7
|
+
data.tar.gz: 169a438a3e701a3c5d72cca6cd9574c58c8fe2c5f2b5cc494fd7b22c6e54ae8e190873accd09b139c1289205a6bc34847ceb00d49f249fbc567fc0a82dad766c
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
# Version 0.3.0
|
2
|
+
* Updates README.md
|
3
|
+
* Supports `Valanga::Client#musics_at`, `Valanga::Client#music_image_url`
|
4
|
+
|
1
5
|
# Version 0.2.0
|
2
6
|
* Supports environment variable login for `ENV['KONAMI_ID']` `ENV['KONAMI_PASSWORD']`.
|
3
7
|
* Caches the search query and url, Second time result is directly access to cached url.
|
data/README.md
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
# Valanga
|
2
|
+
[](http://badge.fury.io/rb/valanga)
|
3
|
+
[](https://gemnasium.com/mgi166/valanga)
|
4
|
+
[](https://codeclimate.com/github/mgi166/valanga)
|
2
5
|
|
3
6
|
A Ruby client for [REFLEC BEAT](http://p.eagate.573.jp/game/reflec/groovin/p/index.html)
|
4
7
|
|
@@ -12,9 +15,14 @@ A Ruby client for [REFLEC BEAT](http://p.eagate.573.jp/game/reflec/groovin/p/ind
|
|
12
15
|
### Prepare
|
13
16
|
Create `Valanga::Client` instance.
|
14
17
|
The arguments of `name_or_email` is `KONAMI ID` or `email` that you registered.
|
18
|
+
|
19
|
+
If you set environment variables `KONAMI_ID` and `KONAMI_PASSWORD`, Valanga::Client uses the values for credentials.
|
15
20
|
|
16
21
|
```ruby
|
17
22
|
client = Valanga::Client.new(name_or_email, password)
|
23
|
+
|
24
|
+
# Use ENV['KONAMI_ID'], ENV['KONAMI_PASSWORD'] if client received no arguments.
|
25
|
+
client = Valanga::Client.new
|
18
26
|
```
|
19
27
|
|
20
28
|
### Fetch all music names
|
@@ -24,6 +32,16 @@ client.list_musics
|
|
24
32
|
#=> ["Artifacter", "Army of Marionette", "RPG", "アイネクライネ", ....]
|
25
33
|
```
|
26
34
|
|
35
|
+
### Fetch music names specified page, sorttype, and sort
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
client.musics_at(page: 3)
|
39
|
+
#=> ["踊るフィーバーロボ", "鬼天", "朧", ...]
|
40
|
+
|
41
|
+
client.musics_at(sorttype: :special, sort: :desc)
|
42
|
+
#=> ["Butter-Fly", "七転八起☆至上主義!", "嘘", ...]
|
43
|
+
```
|
44
|
+
|
27
45
|
### Search music
|
28
46
|
Specifies the music name, returns `Valanga::Music` instance.
|
29
47
|
|
data/lib/valanga/client.rb
CHANGED
@@ -7,7 +7,8 @@ module Valanga
|
|
7
7
|
|
8
8
|
LOGIN_PAGE = "https://p.eagate.573.jp/gate/p/login.html"
|
9
9
|
|
10
|
-
attr_reader :session
|
10
|
+
attr_reader :session
|
11
|
+
attr_accessor :music_ids
|
11
12
|
|
12
13
|
def initialize(username = nil, password = nil)
|
13
14
|
Capybara.register_driver :poltergeist do |app|
|
@@ -15,7 +16,7 @@ module Valanga
|
|
15
16
|
end
|
16
17
|
|
17
18
|
@session = Capybara::Session.new(:poltergeist)
|
18
|
-
@
|
19
|
+
@music_ids = {}
|
19
20
|
|
20
21
|
login!(username, password)
|
21
22
|
end
|
data/lib/valanga/music.rb
CHANGED
@@ -2,8 +2,15 @@ module Valanga
|
|
2
2
|
class Music
|
3
3
|
def initialize(document)
|
4
4
|
@document = Nokogiri::HTML.parse(document, nil, 'Shift_JIS')
|
5
|
+
@music_bk = @document.css("div.music_bk dl")
|
6
|
+
|
7
|
+
unless @music_bk.size == 8 || @music_bk.size == 9
|
8
|
+
raise NoMusicInformationError, "Not found music informations"
|
9
|
+
end
|
5
10
|
end
|
6
11
|
|
12
|
+
attr_reader :music_bk
|
13
|
+
|
7
14
|
def basic
|
8
15
|
Difficulty::Basic.new(self)
|
9
16
|
end
|
@@ -53,17 +60,5 @@ module Valanga
|
|
53
60
|
end
|
54
61
|
end
|
55
62
|
end
|
56
|
-
|
57
|
-
def music_bk
|
58
|
-
return @music_bk if defined? @music_bk
|
59
|
-
|
60
|
-
music_bk = @document.css("div.music_bk dl")
|
61
|
-
|
62
|
-
unless music_bk.size == 8 || music_bk.size == 9
|
63
|
-
raise NoMusicInformationError, "Not found music informations"
|
64
|
-
end
|
65
|
-
|
66
|
-
@music_bk = music_bk
|
67
|
-
end
|
68
63
|
end
|
69
64
|
end
|
@@ -11,50 +11,35 @@ module Valanga
|
|
11
11
|
|
12
12
|
def basic
|
13
13
|
if has_special?
|
14
|
-
MusicAttribute.new(create_attr(6))
|
15
|
-
attr.name = name
|
16
|
-
attr.artist = artist
|
17
|
-
end
|
14
|
+
MusicAttribute.new(create_attr(6))
|
18
15
|
else
|
19
|
-
MusicAttribute.new(create_attr(5))
|
20
|
-
attr.name = name
|
21
|
-
attr.artist = artist
|
22
|
-
end
|
16
|
+
MusicAttribute.new(create_attr(5))
|
23
17
|
end
|
24
18
|
end
|
25
19
|
|
26
20
|
def medium
|
27
21
|
if has_special?
|
28
|
-
MusicAttribute.new(create_attr(7))
|
29
|
-
attr.name = name
|
30
|
-
attr.artist = artist
|
31
|
-
end
|
22
|
+
MusicAttribute.new(create_attr(7))
|
32
23
|
else
|
33
|
-
MusicAttribute.new(create_attr(6))
|
34
|
-
attr.name = name
|
35
|
-
attr.artist = artist
|
36
|
-
end
|
24
|
+
MusicAttribute.new(create_attr(6))
|
37
25
|
end
|
38
26
|
end
|
39
27
|
|
40
28
|
def hard
|
41
29
|
if has_special?
|
42
|
-
MusicAttribute.new(create_attr(8))
|
43
|
-
attr.name = name
|
44
|
-
attr.artist = artist
|
45
|
-
end
|
30
|
+
MusicAttribute.new(create_attr(8))
|
46
31
|
else
|
47
|
-
MusicAttribute.new(create_attr(7))
|
48
|
-
attr.name = name
|
49
|
-
attr.artist = artist
|
50
|
-
end
|
32
|
+
MusicAttribute.new(create_attr(7))
|
51
33
|
end
|
52
34
|
end
|
53
35
|
|
54
36
|
private
|
55
37
|
|
56
38
|
def create_attr(index)
|
57
|
-
Hash[COLLETE_KEY.zip(music_info_box[index])]
|
39
|
+
Hash[COLLETE_KEY.zip(music_info_box[index])].merge(
|
40
|
+
'name' => name,
|
41
|
+
'artist' => artist,
|
42
|
+
)
|
58
43
|
end
|
59
44
|
end
|
60
45
|
end
|
@@ -13,39 +13,30 @@ module Valanga
|
|
13
13
|
)
|
14
14
|
|
15
15
|
def basic
|
16
|
-
Valanga::MusicAttribute.new(create_attr(1))
|
17
|
-
attr.name = name
|
18
|
-
attr.artist = artist
|
19
|
-
end
|
16
|
+
Valanga::MusicAttribute.new(create_attr(1))
|
20
17
|
end
|
21
18
|
|
22
19
|
def medium
|
23
|
-
Valanga::MusicAttribute.new(create_attr(2))
|
24
|
-
attr.name = name
|
25
|
-
attr.artist = artist
|
26
|
-
end
|
20
|
+
Valanga::MusicAttribute.new(create_attr(2))
|
27
21
|
end
|
28
22
|
|
29
23
|
def hard
|
30
|
-
Valanga::MusicAttribute.new(create_attr(3))
|
31
|
-
attr.name = name
|
32
|
-
attr.artist = artist
|
33
|
-
end
|
24
|
+
Valanga::MusicAttribute.new(create_attr(3))
|
34
25
|
end
|
35
26
|
|
36
27
|
def special
|
37
28
|
if has_special?
|
38
|
-
Valanga::MusicAttribute.new(create_attr(4))
|
39
|
-
attr.name = name
|
40
|
-
attr.artist = artist
|
41
|
-
end
|
29
|
+
Valanga::MusicAttribute.new(create_attr(4))
|
42
30
|
end
|
43
31
|
end
|
44
32
|
|
45
33
|
private
|
46
34
|
|
47
35
|
def create_attr(index)
|
48
|
-
Hash[GROOVIN_KEY.zip(music_info_box[index])]
|
36
|
+
Hash[GROOVIN_KEY.zip(music_info_box[index])].merge(
|
37
|
+
'name' => name,
|
38
|
+
'artist' => artist,
|
39
|
+
)
|
49
40
|
end
|
50
41
|
end
|
51
42
|
end
|
data/lib/valanga/music_search.rb
CHANGED
@@ -2,16 +2,10 @@ module Valanga
|
|
2
2
|
module MusicSearch
|
3
3
|
MUSIC_INDEX = "http://p.eagate.573.jp/game/reflec/groovin/p/music/index.html"
|
4
4
|
|
5
|
-
def list_musics
|
5
|
+
def list_musics
|
6
6
|
musics = []
|
7
7
|
|
8
|
-
|
9
|
-
page_sessions do |session|
|
10
|
-
html = Nokogiri::HTML.parse(session.html)
|
11
|
-
musics << html.css("#music_table1 td.music_jkimg a").map(&:text).map(&:strip)
|
12
|
-
end
|
13
|
-
else
|
14
|
-
session.visit(music_url(page: page, sorttype: sorttype, sort: sort))
|
8
|
+
page_sessions do |session|
|
15
9
|
html = Nokogiri::HTML.parse(session.html)
|
16
10
|
musics << html.css("#music_table1 td.music_jkimg a").map(&:text).map(&:strip)
|
17
11
|
end
|
@@ -19,9 +13,15 @@ module Valanga
|
|
19
13
|
musics.flatten
|
20
14
|
end
|
21
15
|
|
16
|
+
def musics_at(page: nil, sorttype: nil, sort: nil)
|
17
|
+
session.visit(music_url(page: page, sorttype: sorttype, sort: sort))
|
18
|
+
html = Nokogiri::HTML.parse(session.html)
|
19
|
+
html.css("#music_table1 td.music_jkimg a").map(&:text).map(&:strip)
|
20
|
+
end
|
21
|
+
|
22
22
|
def search(music_name)
|
23
|
-
if
|
24
|
-
return create_music(
|
23
|
+
if music_id = music_ids[music_name]
|
24
|
+
return create_music(music_id)
|
25
25
|
end
|
26
26
|
|
27
27
|
page_sessions do |session|
|
@@ -30,10 +30,9 @@ module Valanga
|
|
30
30
|
session.click_link(music_name)
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
pages[music_name] = info_url(src)
|
33
|
+
music_ids[music_name] = music_id(session)
|
35
34
|
|
36
|
-
return create_music(
|
35
|
+
return create_music(music_ids[music_name])
|
37
36
|
rescue Capybara::ElementNotFound
|
38
37
|
# if link is not found, go next page.
|
39
38
|
end
|
@@ -42,10 +41,30 @@ module Valanga
|
|
42
41
|
alias_method :[], :search
|
43
42
|
alias_method :find_music, :search
|
44
43
|
|
44
|
+
def music_image_url(music_name)
|
45
|
+
if music_id = music_ids[music_name]
|
46
|
+
return image_url(music_id)
|
47
|
+
end
|
48
|
+
|
49
|
+
page_sessions do |session|
|
50
|
+
begin
|
51
|
+
session.within("#music_table1") do
|
52
|
+
on_click = session.find_link(music_name)['onClick']
|
53
|
+
music_id = $1 if on_click =~ /id=([\w%]+)/
|
54
|
+
music_ids[music_name] = music_id
|
55
|
+
return image_url(music_id)
|
56
|
+
end
|
57
|
+
rescue Capybara::ElementNotFound
|
58
|
+
# if link is not found, go next page.
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
45
63
|
private
|
46
64
|
|
47
|
-
def create_music(
|
48
|
-
|
65
|
+
def create_music(music_id)
|
66
|
+
info = info_url(music_id)
|
67
|
+
session.visit(info)
|
49
68
|
Music.new(session.html)
|
50
69
|
end
|
51
70
|
|
@@ -67,8 +86,12 @@ module Valanga
|
|
67
86
|
end
|
68
87
|
end
|
69
88
|
|
70
|
-
def
|
71
|
-
"http://p.eagate.573.jp/game/reflec/groovin/p/
|
89
|
+
def image_url(music_id)
|
90
|
+
"http://p.eagate.573.jp/game/reflec/groovin/p/images/binary.html?img=#{music_id}"
|
91
|
+
end
|
92
|
+
|
93
|
+
def info_url(music_id)
|
94
|
+
"http://p.eagate.573.jp/game/reflec/groovin/p/music/m_info.html?id=#{music_id}"
|
72
95
|
end
|
73
96
|
|
74
97
|
def music_url(page: nil, sorttype: nil, sort: nil)
|
@@ -93,6 +116,11 @@ module Valanga
|
|
93
116
|
end
|
94
117
|
end
|
95
118
|
|
119
|
+
def music_id(session)
|
120
|
+
src = session.find(:css, "iframe")['src']
|
121
|
+
src.to_s.split('=').last
|
122
|
+
end
|
123
|
+
|
96
124
|
def valid_sorttypes
|
97
125
|
{ "music_name" => 0, "basic" => 1, "medium" => 2, "hard" => 3, "special" => 4 }
|
98
126
|
end
|
data/lib/valanga/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: valanga
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mgi166
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|