vk_music 3.1.5 → 4.0.2
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/.env.example +3 -0
- data/.github/workflows/ruby.yml +35 -0
- data/.gitignore +6 -0
- data/.rspec +1 -0
- data/.rubocop.yml +56 -0
- data/Gemfile +38 -10
- data/Gemfile.lock +71 -20
- data/LICENSE.txt +0 -0
- data/README.md +113 -94
- data/Rakefile +15 -22
- data/bin/console +18 -24
- data/lib/vk_music.rb +32 -18
- data/lib/vk_music/audio.rb +111 -187
- data/lib/vk_music/client.rb +181 -647
- data/lib/vk_music/playlist.rb +44 -97
- data/lib/vk_music/request.rb +13 -0
- data/lib/vk_music/request/audios.rb +29 -0
- data/lib/vk_music/request/base.rb +75 -0
- data/lib/vk_music/request/login.rb +35 -0
- data/lib/vk_music/request/my_page.rb +21 -0
- data/lib/vk_music/request/playlist.rb +31 -0
- data/lib/vk_music/request/playlist_section.rb +35 -0
- data/lib/vk_music/request/post.rb +22 -0
- data/lib/vk_music/request/profile.rb +24 -0
- data/lib/vk_music/request/search.rb +34 -0
- data/lib/vk_music/request/wall_section.rb +34 -0
- data/lib/vk_music/utility.rb +8 -78
- data/lib/vk_music/utility/audio_data_parser.rb +37 -0
- data/lib/vk_music/utility/audio_items_parser.rb +18 -0
- data/lib/vk_music/utility/audio_node_parser.rb +59 -0
- data/lib/vk_music/utility/audios_from_ids_loader.rb +21 -0
- data/lib/vk_music/utility/audios_ids_getter.rb +25 -0
- data/lib/vk_music/utility/audios_loader.rb +37 -0
- data/lib/vk_music/utility/data_type_guesser.rb +43 -0
- data/lib/vk_music/utility/duration_parser.rb +17 -0
- data/lib/vk_music/utility/last_profile_post_loader.rb +26 -0
- data/lib/vk_music/utility/link_decoder.rb +107 -0
- data/lib/vk_music/utility/node_text_children_reader.rb +14 -0
- data/lib/vk_music/utility/playlist_loader.rb +30 -0
- data/lib/vk_music/utility/playlist_node_parser.rb +21 -0
- data/lib/vk_music/utility/playlist_section_loader.rb +29 -0
- data/lib/vk_music/utility/playlist_url_parser.rb +32 -0
- data/lib/vk_music/utility/post_loader.rb +23 -0
- data/lib/vk_music/utility/post_url_parser.rb +24 -0
- data/lib/vk_music/utility/profile_id_resolver.rb +58 -0
- data/lib/vk_music/utility/wall_loader.rb +25 -0
- data/lib/vk_music/version.rb +7 -5
- data/lib/vk_music/web_parser.rb +9 -0
- data/lib/vk_music/web_parser/audios.rb +20 -0
- data/lib/vk_music/web_parser/base.rb +27 -0
- data/lib/vk_music/web_parser/login.rb +13 -0
- data/lib/vk_music/web_parser/my_page.rb +19 -0
- data/lib/vk_music/web_parser/playlist.rb +33 -0
- data/lib/vk_music/web_parser/playlist_section.rb +53 -0
- data/lib/vk_music/web_parser/post.rb +15 -0
- data/lib/vk_music/web_parser/profile.rb +33 -0
- data/lib/vk_music/web_parser/search.rb +56 -0
- data/lib/vk_music/web_parser/wall_section.rb +53 -0
- data/vk_music.gemspec +36 -40
- metadata +59 -77
- data/.travis.yml +0 -7
- data/bin/setup +0 -8
- data/lib/vk_music/constants.rb +0 -78
- data/lib/vk_music/exceptions.rb +0 -21
- data/lib/vk_music/link_decoder.rb +0 -102
- data/lib/vk_music/utility/log.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 982d3964597ca683823d8dfd1aff172ef5f117b740e9020aabf5019cb43beea5
|
4
|
+
data.tar.gz: 6bd53fb80d6105287e0db7e2b6af63c224d5ce366b4e227cbb0d310d49c167ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d15ced8f7a23fdce6ee9304264092b11fceeb93d78f213ff1be8b2e47566c334011b1f8065d88e7125c81df5b4939ca21ee9f986e72f2a13c183edd35c861304
|
7
|
+
data.tar.gz: 39294ec31d752dc92147916a69f2460110fad028ff7115210bbfae19b786707c7dbc9e7cee5f19a3254b668605785cde10c3fde40cc93d1bd80825415da0a4aa
|
data/.env.example
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Ruby
|
9
|
+
|
10
|
+
on:
|
11
|
+
push:
|
12
|
+
branches: [ master ]
|
13
|
+
pull_request:
|
14
|
+
branches: [ master ]
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
test:
|
18
|
+
|
19
|
+
runs-on: ubuntu-latest
|
20
|
+
|
21
|
+
steps:
|
22
|
+
- uses: actions/checkout@v2
|
23
|
+
- name: Set up Ruby
|
24
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
25
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
26
|
+
# uses: ruby/setup-ruby@v1
|
27
|
+
uses: ruby/setup-ruby@v1.52.0
|
28
|
+
with:
|
29
|
+
ruby-version: 2.7.2
|
30
|
+
- name: Install dependencies
|
31
|
+
run: bundle install
|
32
|
+
- name: Run rubocop
|
33
|
+
run: bundle exec rake rubocop
|
34
|
+
- name: Run yarddoc
|
35
|
+
run: bundle exec rake yard
|
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# The behavior of RuboCop can be controlled via the .rubocop.yml
|
2
|
+
# configuration file. It makes it possible to enable/disable
|
3
|
+
# certain cops (checks) and to alter their behavior if they accept
|
4
|
+
# any parameters. The file can be placed either in your home
|
5
|
+
# directory or in some project directory.
|
6
|
+
#
|
7
|
+
# RuboCop will start looking for the configuration file in the directory
|
8
|
+
# where the inspected file is and continue its way up to the root directory.
|
9
|
+
#
|
10
|
+
# See https://docs.rubocop.org/rubocop/configuration
|
11
|
+
|
12
|
+
AllCops:
|
13
|
+
TargetRubyVersion: 2.7
|
14
|
+
EnabledByDefault: true
|
15
|
+
|
16
|
+
Layout/FirstMethodParameterLineBreak:
|
17
|
+
Enabled: false
|
18
|
+
Layout/FirstMethodArgumentLineBreak:
|
19
|
+
Enabled: false
|
20
|
+
Layout/MultilineMethodArgumentLineBreaks:
|
21
|
+
Enabled: false
|
22
|
+
Layout/EndOfLine:
|
23
|
+
Enabled: false
|
24
|
+
Layout/EndAlignment:
|
25
|
+
EnforcedStyleAlignWith: variable
|
26
|
+
Layout/FirstHashElementIndentation:
|
27
|
+
Enabled: false
|
28
|
+
Layout/MultilineAssignmentLayout:
|
29
|
+
EnforcedStyle: same_line
|
30
|
+
Layout/CaseIndentation:
|
31
|
+
EnforcedStyle: end
|
32
|
+
Lint/ConstantResolution:
|
33
|
+
Enabled: false
|
34
|
+
Metrics/ParameterLists:
|
35
|
+
Enabled: false
|
36
|
+
Metrics/BlockLength:
|
37
|
+
Exclude:
|
38
|
+
- 'spec/**/*_spec.rb'
|
39
|
+
Style/MethodCallWithArgsParentheses:
|
40
|
+
Enabled: false
|
41
|
+
Style/Copyright:
|
42
|
+
Enabled: false
|
43
|
+
Style/ClassVars:
|
44
|
+
Enabled: false
|
45
|
+
Style/MissingElse:
|
46
|
+
Enabled: false
|
47
|
+
Style/StringHashKeys:
|
48
|
+
Enabled: false
|
49
|
+
Style/ImplicitRuntimeError:
|
50
|
+
Enabled: false
|
51
|
+
Style/NumericLiterals:
|
52
|
+
Enabled: false
|
53
|
+
Style/DisableCopsWithinSourceCodeDirective:
|
54
|
+
Enabled: false
|
55
|
+
Layout/MultilineHashKeyLineBreaks:
|
56
|
+
Enabled: false
|
data/Gemfile
CHANGED
@@ -1,10 +1,38 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
gem
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in vk_music.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
group :test, :development do
|
9
|
+
# Debugging console
|
10
|
+
gem 'pry'
|
11
|
+
|
12
|
+
# Another debugging console
|
13
|
+
gem 'byebug'
|
14
|
+
|
15
|
+
# The thing, forcing you to write good code
|
16
|
+
gem 'rubocop', require: false
|
17
|
+
|
18
|
+
# Rake tasks
|
19
|
+
gem 'rake', require: false
|
20
|
+
|
21
|
+
# Testing
|
22
|
+
gem 'rspec', require: false
|
23
|
+
|
24
|
+
# Docs
|
25
|
+
gem 'yard', require: false
|
26
|
+
|
27
|
+
# .env support
|
28
|
+
gem 'dotenv'
|
29
|
+
|
30
|
+
# Save web requests for fast and reliable testing
|
31
|
+
gem 'vcr'
|
32
|
+
|
33
|
+
# Stub web requests
|
34
|
+
gem 'webmock'
|
35
|
+
|
36
|
+
# Test coverage
|
37
|
+
gem 'simplecov', require: false, group: :test
|
38
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
vk_music (
|
4
|
+
vk_music (4.0.2)
|
5
5
|
execjs (~> 2.7)
|
6
|
-
json (~> 2.
|
6
|
+
json (~> 2.3)
|
7
7
|
logger (~> 1.4)
|
8
8
|
mechanize (~> 2.7)
|
9
9
|
net-http-persistent (= 2.9.4)
|
@@ -11,13 +11,22 @@ PATH
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
+
addressable (2.7.0)
|
15
|
+
public_suffix (>= 2.0.2, < 5.0)
|
16
|
+
ast (2.4.1)
|
17
|
+
byebug (11.1.3)
|
14
18
|
coderay (1.1.3)
|
19
|
+
crack (0.4.4)
|
20
|
+
diff-lcs (1.4.4)
|
21
|
+
docile (1.3.2)
|
15
22
|
domain_name (0.5.20190701)
|
16
23
|
unf (>= 0.0.5, < 1.0.0)
|
24
|
+
dotenv (2.7.6)
|
17
25
|
execjs (2.7.0)
|
26
|
+
hashdiff (1.0.1)
|
18
27
|
http-cookie (1.0.3)
|
19
28
|
domain_name (~> 0.5)
|
20
|
-
json (2.
|
29
|
+
json (2.4.1)
|
21
30
|
logger (1.4.2)
|
22
31
|
mechanize (2.7.6)
|
23
32
|
domain_name (~> 0.5, >= 0.5.1)
|
@@ -28,43 +37,85 @@ GEM
|
|
28
37
|
nokogiri (~> 1.6)
|
29
38
|
ntlm-http (~> 0.1, >= 0.1.1)
|
30
39
|
webrobots (>= 0.0.9, < 0.2)
|
31
|
-
method_source (0.
|
40
|
+
method_source (1.0.0)
|
32
41
|
mime-types (3.3.1)
|
33
42
|
mime-types-data (~> 3.2015)
|
34
|
-
mime-types-data (3.2020.
|
43
|
+
mime-types-data (3.2020.1104)
|
35
44
|
mini_portile2 (2.4.0)
|
36
|
-
minitest (5.14.1)
|
37
45
|
net-http-digest_auth (1.4.1)
|
38
46
|
net-http-persistent (2.9.4)
|
39
47
|
nokogiri (1.10.10)
|
40
48
|
mini_portile2 (~> 2.4.0)
|
41
|
-
nokogiri (1.10.10-x64-mingw32)
|
42
|
-
mini_portile2 (~> 2.4.0)
|
43
49
|
ntlm-http (0.1.1)
|
44
|
-
|
45
|
-
|
46
|
-
|
50
|
+
parallel (1.20.1)
|
51
|
+
parser (2.7.2.0)
|
52
|
+
ast (~> 2.4.1)
|
53
|
+
pry (0.13.1)
|
54
|
+
coderay (~> 1.1)
|
55
|
+
method_source (~> 1.0)
|
56
|
+
public_suffix (4.0.6)
|
57
|
+
rainbow (3.0.0)
|
47
58
|
rake (13.0.1)
|
59
|
+
regexp_parser (2.0.0)
|
60
|
+
rexml (3.2.4)
|
61
|
+
rspec (3.10.0)
|
62
|
+
rspec-core (~> 3.10.0)
|
63
|
+
rspec-expectations (~> 3.10.0)
|
64
|
+
rspec-mocks (~> 3.10.0)
|
65
|
+
rspec-core (3.10.0)
|
66
|
+
rspec-support (~> 3.10.0)
|
67
|
+
rspec-expectations (3.10.0)
|
68
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
69
|
+
rspec-support (~> 3.10.0)
|
70
|
+
rspec-mocks (3.10.0)
|
71
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
72
|
+
rspec-support (~> 3.10.0)
|
73
|
+
rspec-support (3.10.0)
|
74
|
+
rubocop (1.6.1)
|
75
|
+
parallel (~> 1.10)
|
76
|
+
parser (>= 2.7.1.5)
|
77
|
+
rainbow (>= 2.2.2, < 4.0)
|
78
|
+
regexp_parser (>= 1.8, < 3.0)
|
79
|
+
rexml
|
80
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
81
|
+
ruby-progressbar (~> 1.7)
|
82
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
83
|
+
rubocop-ast (1.3.0)
|
84
|
+
parser (>= 2.7.1.5)
|
85
|
+
ruby-progressbar (1.10.1)
|
86
|
+
simplecov (0.20.0)
|
87
|
+
docile (~> 1.1)
|
88
|
+
simplecov-html (~> 0.11)
|
89
|
+
simplecov_json_formatter (~> 0.1)
|
90
|
+
simplecov-html (0.12.3)
|
91
|
+
simplecov_json_formatter (0.1.2)
|
48
92
|
unf (0.1.4)
|
49
93
|
unf_ext
|
50
94
|
unf_ext (0.0.7.7)
|
51
|
-
|
95
|
+
unicode-display_width (1.7.0)
|
96
|
+
vcr (6.0.0)
|
97
|
+
webmock (3.10.0)
|
98
|
+
addressable (>= 2.3.6)
|
99
|
+
crack (>= 0.3.2)
|
100
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
52
101
|
webrobots (0.1.2)
|
53
102
|
yard (0.9.25)
|
54
103
|
|
55
104
|
PLATFORMS
|
56
105
|
ruby
|
57
|
-
x64-mingw32
|
58
106
|
|
59
107
|
DEPENDENCIES
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
108
|
+
byebug
|
109
|
+
dotenv
|
110
|
+
pry
|
111
|
+
rake
|
112
|
+
rspec
|
113
|
+
rubocop
|
114
|
+
simplecov
|
115
|
+
vcr
|
66
116
|
vk_music!
|
67
|
-
|
117
|
+
webmock
|
118
|
+
yard
|
68
119
|
|
69
120
|
BUNDLED WITH
|
70
121
|
2.1.4
|
data/LICENSE.txt
CHANGED
File without changes
|
data/README.md
CHANGED
@@ -1,94 +1,113 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
```
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
```
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
client.
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
```
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
audios
|
71
|
-
|
72
|
-
```
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
audios
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
To
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
1
|
+
   
|
2
|
+
|
3
|
+
# VkMusic
|
4
|
+
|
5
|
+
*vk_music* gem is a library to work with audios on popular Russian social network
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'vk_music'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
```
|
17
|
+
$ bundle
|
18
|
+
```
|
19
|
+
|
20
|
+
Or install it using `gem`:
|
21
|
+
|
22
|
+
```
|
23
|
+
$ gem install vk_music
|
24
|
+
```
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
You can take a look on documentation at [rubydoc](https://www.rubydoc.info/gems/vk_music/).
|
29
|
+
|
30
|
+
### Logging in
|
31
|
+
|
32
|
+
Firstly, it is required to create new `VkMusic::Client` instance and provide login credentials:
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
client = VkMusic::Client.new(username: "+79991234567", password: "password")
|
36
|
+
```
|
37
|
+
|
38
|
+
### Search
|
39
|
+
|
40
|
+
You can search audios using `Client#find`:
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
audios = client.find("Acid Spit - Mega Drive")
|
44
|
+
```
|
45
|
+
|
46
|
+
You can also search for playlists using same method:
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
playlists = client.find("Jazz", type: :playlist)
|
50
|
+
```
|
51
|
+
|
52
|
+
### Playlists
|
53
|
+
|
54
|
+
You can load playlist audios with `Client#playlist`
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
playlist = client.playlist(url: "link")
|
58
|
+
```
|
59
|
+
|
60
|
+
### User or group audios
|
61
|
+
|
62
|
+
You can load profile audios with `Client#audios`
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
playlist = client.audios(owner_id: 8024985)
|
66
|
+
```
|
67
|
+
|
68
|
+
### Wall audios
|
69
|
+
|
70
|
+
You can load audios from profile wall with `Client#wall`
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
playlist = client.wall(owner_id: 8024985)
|
74
|
+
```
|
75
|
+
|
76
|
+
### Audios from post
|
77
|
+
|
78
|
+
You can load up to 10 audios attached to some post. Those audios will be returned as array:
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
audios = client.post(url: "link")
|
82
|
+
```
|
83
|
+
|
84
|
+
### Getting audio URL
|
85
|
+
|
86
|
+
To get audio URL you should go through following chain:
|
87
|
+
1. Get audio ID
|
88
|
+
2. Get audio encrypted URL
|
89
|
+
3. Get audio decrypted URL
|
90
|
+
|
91
|
+
Usually most of audios already go with ID. Getting encrypted URL requires additional request to web, so it is performed with `Client#update_urls`, which will mutate provided array of audios:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
client.update_urls(audios_array)
|
95
|
+
```
|
96
|
+
|
97
|
+
After this you can get decrypted URL using `Audio#url`
|
98
|
+
|
99
|
+
## Development
|
100
|
+
|
101
|
+
Feel free to add features. However, please make sure all your code is covered with tests.
|
102
|
+
|
103
|
+
### Testing
|
104
|
+
|
105
|
+
This gem uses `rspec` and `vcr` for easy testing. *Be careful*, though, running `rspec` in clean repo may result in lot of requests to web and rate limiting or ban
|
106
|
+
|
107
|
+
## Contributing
|
108
|
+
|
109
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/fizvlad/vk-music-rb/issues.
|
110
|
+
|
111
|
+
## License
|
112
|
+
|
113
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|