jarvisbot_songfinder 1.0.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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +2 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +122 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +91 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +24 -0
  11. data/bin/setup +8 -0
  12. data/fixtures/vcr_cassettes/query_text.yml +211 -0
  13. data/fixtures/vcr_cassettes/query_track_delegation.yml +211 -0
  14. data/fixtures/vcr_cassettes/query_youtube_url.yml +140 -0
  15. data/fixtures/vcr_cassettes/search_query_auxiliary_provider.yml +517 -0
  16. data/fixtures/vcr_cassettes/search_query_not_found.yml +111 -0
  17. data/fixtures/vcr_cassettes/search_query_preferred_and_auxiliary.yml +211 -0
  18. data/fixtures/vcr_cassettes/search_query_preferred_provider.yml +211 -0
  19. data/fixtures/vcr_cassettes/spotify_invalid_region_restricted.yml +55 -0
  20. data/fixtures/vcr_cassettes/spotify_invalid_search.yml +55 -0
  21. data/fixtures/vcr_cassettes/spotify_invalid_too_long.yml +55 -0
  22. data/fixtures/vcr_cassettes/spotify_valid.yml +55 -0
  23. data/fixtures/vcr_cassettes/spotify_valid_clean_or_unknown.yml +55 -0
  24. data/fixtures/vcr_cassettes/spotify_valid_explicit.yml +55 -0
  25. data/fixtures/vcr_cassettes/spotify_valid_search.yml +107 -0
  26. data/fixtures/vcr_cassettes/spotify_vcr_test.yml +55 -0
  27. data/fixtures/vcr_cassettes/url_query_known_provider.yml +187 -0
  28. data/fixtures/vcr_cassettes/youtube_invalid.yml +58 -0
  29. data/fixtures/vcr_cassettes/youtube_invalid_region_restricted.yml +147 -0
  30. data/fixtures/vcr_cassettes/youtube_invalid_regionrestricted.yml +147 -0
  31. data/fixtures/vcr_cassettes/youtube_invalid_search.yml +59 -0
  32. data/fixtures/vcr_cassettes/youtube_invalid_too_long.yml +140 -0
  33. data/fixtures/vcr_cassettes/youtube_invalid_wrong_category.yml +254 -0
  34. data/fixtures/vcr_cassettes/youtube_invalid_wrongcategory.yml +254 -0
  35. data/fixtures/vcr_cassettes/youtube_valid.yml +427 -0
  36. data/fixtures/vcr_cassettes/youtube_valid_search.yml +287 -0
  37. data/jarvisbot_songfinder.gemspec +52 -0
  38. data/lib/jarvisbot_songfinder.rb +21 -0
  39. data/lib/jarvisbot_songfinder/configuration.rb +28 -0
  40. data/lib/jarvisbot_songfinder/helpers/query.rb +34 -0
  41. data/lib/jarvisbot_songfinder/helpers/reply_message.rb +101 -0
  42. data/lib/jarvisbot_songfinder/helpers/search_query.rb +21 -0
  43. data/lib/jarvisbot_songfinder/helpers/url_query.rb +22 -0
  44. data/lib/jarvisbot_songfinder/providers/bandrequest.rb +36 -0
  45. data/lib/jarvisbot_songfinder/providers/provider.rb +64 -0
  46. data/lib/jarvisbot_songfinder/providers/spotify_api.rb +93 -0
  47. data/lib/jarvisbot_songfinder/providers/unknown_provider.rb +13 -0
  48. data/lib/jarvisbot_songfinder/providers/unknown_search_provider.rb +13 -0
  49. data/lib/jarvisbot_songfinder/providers/youtube_api.rb +137 -0
  50. data/lib/jarvisbot_songfinder/version.rb +3 -0
  51. metadata +237 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 21139b3f22dc1c8599a285ff41ace1c8d26ad2ddf61f74d776dd5829bde25087
4
+ data.tar.gz: '06839bbc5780913a08d4e36c738ae878dea8addeeb351aea1b154c27cd307b46'
5
+ SHA512:
6
+ metadata.gz: e17f88a94acf2303a87dfc1c765ea6f80f4aeb233b00516098cef6634351178b06886c0908ab547539c47d1975c1301f0ff9b8011ec2c80119ac0ae062cc1e41
7
+ data.tar.gz: e1c756aee8fc3b1a6cc971798da218bec91c33910e91f501e620b59863c2a87b98a2271a11122552df16475136fbf6b6a0cc536cbeeaea0873ad4710547f2d4d
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ Style/StringLiterals:
2
+ Enabled: false
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in jarvisbot_songfinder.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,122 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ jarvisbot_songfinder (0.1.0)
5
+ httparty (~> 0.16)
6
+ rspotify (~> 2.4.0)
7
+ yt (~> 0.29.1)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ activesupport (5.2.2)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (>= 0.7, < 2)
15
+ minitest (~> 5.1)
16
+ tzinfo (~> 1.1)
17
+ addressable (2.5.2)
18
+ public_suffix (>= 2.0.2, < 4.0)
19
+ coderay (1.1.2)
20
+ concurrent-ruby (1.1.4)
21
+ crack (0.4.3)
22
+ safe_yaml (~> 1.0.0)
23
+ diff-lcs (1.3)
24
+ docile (1.3.1)
25
+ domain_name (0.5.20180417)
26
+ unf (>= 0.0.5, < 1.0.0)
27
+ faraday (0.15.4)
28
+ multipart-post (>= 1.2, < 3)
29
+ hashdiff (0.3.8)
30
+ hashie (3.6.0)
31
+ http-cookie (1.0.3)
32
+ domain_name (~> 0.5)
33
+ httparty (0.16.3)
34
+ mime-types (~> 3.0)
35
+ multi_xml (>= 0.5.2)
36
+ i18n (1.5.3)
37
+ concurrent-ruby (~> 1.0)
38
+ json (2.1.0)
39
+ jwt (2.1.0)
40
+ method_source (0.9.2)
41
+ mime-types (3.2.2)
42
+ mime-types-data (~> 3.2015)
43
+ mime-types-data (3.2018.0812)
44
+ minitest (5.11.3)
45
+ multi_json (1.13.1)
46
+ multi_xml (0.6.0)
47
+ multipart-post (2.0.0)
48
+ netrc (0.11.0)
49
+ oauth2 (1.4.1)
50
+ faraday (>= 0.8, < 0.16.0)
51
+ jwt (>= 1.0, < 3.0)
52
+ multi_json (~> 1.3)
53
+ multi_xml (~> 0.5)
54
+ rack (>= 1.2, < 3)
55
+ omniauth (1.9.0)
56
+ hashie (>= 3.4.6, < 3.7.0)
57
+ rack (>= 1.6.2, < 3)
58
+ omniauth-oauth2 (1.5.0)
59
+ oauth2 (~> 1.1)
60
+ omniauth (~> 1.2)
61
+ pry (0.12.2)
62
+ coderay (~> 1.1.0)
63
+ method_source (~> 0.9.0)
64
+ public_suffix (3.0.3)
65
+ rack (2.0.6)
66
+ rake (10.5.0)
67
+ rest-client (2.0.2)
68
+ http-cookie (>= 1.0.2, < 2.0)
69
+ mime-types (>= 1.16, < 4.0)
70
+ netrc (~> 0.8)
71
+ rspec (3.8.0)
72
+ rspec-core (~> 3.8.0)
73
+ rspec-expectations (~> 3.8.0)
74
+ rspec-mocks (~> 3.8.0)
75
+ rspec-core (3.8.0)
76
+ rspec-support (~> 3.8.0)
77
+ rspec-expectations (3.8.2)
78
+ diff-lcs (>= 1.2.0, < 2.0)
79
+ rspec-support (~> 3.8.0)
80
+ rspec-mocks (3.8.0)
81
+ diff-lcs (>= 1.2.0, < 2.0)
82
+ rspec-support (~> 3.8.0)
83
+ rspec-support (3.8.0)
84
+ rspotify (2.4.1)
85
+ addressable (~> 2.5.2)
86
+ omniauth-oauth2 (~> 1.5.0)
87
+ rest-client (~> 2.0.2)
88
+ safe_yaml (1.0.4)
89
+ simplecov (0.16.1)
90
+ docile (~> 1.1)
91
+ json (>= 1.8, < 3)
92
+ simplecov-html (~> 0.10.0)
93
+ simplecov-html (0.10.2)
94
+ thread_safe (0.3.6)
95
+ tzinfo (1.2.5)
96
+ thread_safe (~> 0.1)
97
+ unf (0.1.4)
98
+ unf_ext
99
+ unf_ext (0.0.7.5)
100
+ vcr (4.0.0)
101
+ webmock (3.5.1)
102
+ addressable (>= 2.3.6)
103
+ crack (>= 0.3.2)
104
+ hashdiff
105
+ yt (0.29.1)
106
+ activesupport
107
+
108
+ PLATFORMS
109
+ ruby
110
+
111
+ DEPENDENCIES
112
+ bundler (~> 1.17)
113
+ jarvisbot_songfinder!
114
+ pry
115
+ rake (~> 10.0)
116
+ rspec (~> 3.0)
117
+ simplecov (~> 0.16)
118
+ vcr
119
+ webmock
120
+
121
+ BUNDLED WITH
122
+ 1.17.1
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2019 Nick
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,91 @@
1
+ # JarvisbotSongfinder
2
+
3
+ Takes search query / URL and searches for corresponding track on Youtube/Spotify validating it against configured restrictions (length, region availability)
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'jarvisbot_songfinder'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install jarvisbot_songfinder
20
+
21
+ ### Configure it
22
+ ```ruby
23
+ JarvisbotSongfinder.configure do |c|
24
+ c.spotify_client_id = ENV["SPOTIFY_CLIENT_ID"]
25
+ c.spotify_secret = ENV["SPOTIFY_SECRET"]
26
+ c.youtube_api_key = ENV["YOUTUBE_API_KEY"]
27
+ c.region = "US"
28
+ end
29
+
30
+ # TODO: fix needing to manually configure those
31
+ RSpotify.authenticate(JarvisbotSongfinder.configuration.spotify_client_id, JarvisbotSongfinder.configuration.spotify_secret)
32
+ Yt.configuration.api_key = JarvisbotSongfinder.configuration.youtube_api_key
33
+
34
+ ```
35
+
36
+ Running `bundle exec rspec` expects those environmental variables to be set or it will fail the tests
37
+ ```
38
+ ENV["SPOTIFY_CLIENT_ID"]
39
+ ENV["SPOTIFY_SECRET"]
40
+ ENV["YOUTUBE_API_KEY"]
41
+ ```
42
+
43
+ ## Usage
44
+
45
+ Intended use cases: playlist building tools, chatbots, informational apps
46
+
47
+ Find a song via search query
48
+ ```ruby
49
+ track = JarvisbotSongfinder::Query.new("mogwai take me somewhere nice")
50
+ track.provider # => "spotify"
51
+ track.url # => "https://open.spotify.com/track/1ZBkR2W1rHhoKJIWbcfaaD"
52
+ track.artist # => "Mogwai"
53
+ track.title # => "Take Me Somewhere Nice"
54
+ track.length # => 417
55
+ track.errors # => []
56
+ track.valid? # => true
57
+ ```
58
+
59
+ Find a song via URL
60
+ ```ruby
61
+ track = JarvisbotSongfinder::Query.new("https://open.spotify.com/track/0CpaNwilKJGqn9WF6K6aRV")
62
+ track.provider # => "spotify"
63
+ track.url # => "https://open.spotify.com/track/0CpaNwilKJGqn9WF6K6aRV"
64
+ track.artist # => "65daysofstatic"
65
+ track.title # => "Debutante"
66
+ track.length # => 441
67
+ track.errors # => ["This video is not availible in the US"]
68
+ track.valid? # => false
69
+ ```
70
+
71
+ Trying erroneous inputs
72
+ ```ruby
73
+ JarvisbotSongfinder::Query.new(" dsfjdsk jflsdjf lkjsdkf jlksdf jljsf ll ll").errors
74
+ # => ["Nothing is found, check your spelling"]
75
+ JarvisbotSongfinder::Query.new("https://example.com/track.mp3").errors
76
+ # => ["Unknown provider. Available providers: [Spotify]"]
77
+ ```
78
+
79
+ ## Development
80
+
81
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
82
+
83
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
84
+
85
+ ## Contributing
86
+
87
+ Bug reports and pull requests are welcome on [Gitlab](https://gitlab.com/DoubleJarvis/jarvisbot_songfinder).
88
+
89
+ ## License
90
+
91
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "jarvisbot_songfinder"
5
+
6
+ JarvisbotSongfinder.configure do |c|
7
+ c.spotify_client_id = ENV["SPOTIFY_CLIENT_ID"]
8
+ c.spotify_secret = ENV["SPOTIFY_SECRET"]
9
+ c.youtube_api_key = ENV["YOUTUBE_API_KEY"]
10
+ c.region = "US"
11
+ end
12
+
13
+ RSpotify.authenticate(JarvisbotSongfinder.configuration.spotify_client_id, JarvisbotSongfinder.configuration.spotify_secret)
14
+ Yt.configuration.api_key = JarvisbotSongfinder.configuration.youtube_api_key
15
+
16
+ # You can add fixtures and/or initialization code here to make experimenting
17
+ # with your gem easier. You can also use a different console, if you like.
18
+
19
+ # (If you use this, don't forget to add pry to your Gemfile!)
20
+ require "pry"
21
+ Pry.start
22
+
23
+ # require "irb"
24
+ # IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,211 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.spotify.com/v1/search?limit=20&offset=0&q=Some%20Text&type=track
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - "*/*"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.5.0p0
16
+ Authorization:
17
+ - Bearer BQAH5Bi0XNhpKUe7e-3a7wM_u1eg__ZIkNXdh8AuvBwFTcUccPOWTweA9BiriAqoWqvMgw72x-ZSnTC8-fg
18
+ Host:
19
+ - api.spotify.com
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Cache-Control:
28
+ - public, max-age=7200
29
+ Access-Control-Allow-Origin:
30
+ - "*"
31
+ Access-Control-Allow-Headers:
32
+ - Accept, Authorization, Origin, Content-Type, Retry-After
33
+ Access-Control-Allow-Methods:
34
+ - GET, POST, OPTIONS, PUT, DELETE, PATCH
35
+ Access-Control-Allow-Credentials:
36
+ - 'true'
37
+ Access-Control-Max-Age:
38
+ - '604800'
39
+ Content-Encoding:
40
+ - gzip
41
+ Date:
42
+ - Fri, 01 Feb 2019 10:13:10 GMT
43
+ Via:
44
+ - 1.1 google
45
+ Alt-Svc:
46
+ - clear
47
+ Transfer-Encoding:
48
+ - chunked
49
+ body:
50
+ encoding: ASCII-8BIT
51
+ string: !binary |-
52
+ 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
53
+ http_version:
54
+ recorded_at: Fri, 01 Feb 2019 10:13:10 GMT
55
+ - request:
56
+ method: get
57
+ uri: https://api.spotify.com/v1/tracks/1UjRTBZvNexWzWMzlPUBFh
58
+ body:
59
+ encoding: US-ASCII
60
+ string: ''
61
+ headers:
62
+ Accept:
63
+ - "*/*"
64
+ Accept-Encoding:
65
+ - gzip, deflate
66
+ User-Agent:
67
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.5.0p0
68
+ Authorization:
69
+ - Bearer BQAH5Bi0XNhpKUe7e-3a7wM_u1eg__ZIkNXdh8AuvBwFTcUccPOWTweA9BiriAqoWqvMgw72x-ZSnTC8-fg
70
+ Host:
71
+ - api.spotify.com
72
+ response:
73
+ status:
74
+ code: 200
75
+ message: OK
76
+ headers:
77
+ Content-Type:
78
+ - application/json; charset=utf-8
79
+ Cache-Control:
80
+ - public, max-age=7200
81
+ Access-Control-Allow-Origin:
82
+ - "*"
83
+ Access-Control-Allow-Headers:
84
+ - Accept, Authorization, Origin, Content-Type, Retry-After
85
+ Access-Control-Allow-Methods:
86
+ - GET, POST, OPTIONS, PUT, DELETE, PATCH
87
+ Access-Control-Allow-Credentials:
88
+ - 'true'
89
+ Access-Control-Max-Age:
90
+ - '604800'
91
+ Content-Encoding:
92
+ - gzip
93
+ Date:
94
+ - Fri, 01 Feb 2019 10:13:10 GMT
95
+ Via:
96
+ - 1.1 google
97
+ Alt-Svc:
98
+ - clear
99
+ Transfer-Encoding:
100
+ - chunked
101
+ body:
102
+ encoding: ASCII-8BIT
103
+ string: !binary |-
104
+ H4sIAAAAAAAAAOxW23KjRhB936+geLaXmeEiUFUqZcn2SqtLFF1sr1Mp1TAM1qxBsDCSL1v+90ADkuUIWbvJQx7ycsrqbs6c6emLv39QFJUG7ipUlabyPftV/Z7Lp5jnRjUVy7uAqyelM5EilWnu+aP8ILPyR8mTJQ3mqyRIt1TgS+NICv8JuBZSxmlT06KYLz+Wjo8sCrWCViMcL1rfxvbz1XmvR3iH3NiXPlZLspeT6rxFwv0dQhqLHb41LinTOs4Nl/CA6b2wJQ2LfLQiKaOl0l5EYuvdZKs4detYJaLIYiGuWfibhy76ovxZJXtNRUDdgM9DmtzzKu3q2bl6kuEYcAo4y7F1AfgJ8DdAiGmfAXYA+4DgbRfeL4C3OZ4Dw3kPEGIu2oBgv5jkeNkFhG8/tQCLv0FJB77tDAFBVRfUdoGhCwxdiPw8yrEPbH2w9CG+f5XjAM4dgH1wAwg6hxA/hFsMQeEQlI/gjiM4ZQQ3HUHMCBhG8O0EvBPIzwR0TuCsKcRP4RbT6xxnoHMGX10N1c2L1Bb6kWWet5aGbydMTi/GnacZMWfXjw3Ru7W+lI9fHnRUhedsaR1dSVSW9ztBIb3jb5t6wcXdQuZGy0CvCjrY0ZWpYt4yk6QBieYSV0fMNRzucp9z5DiejrHj2ZkBGZyb3PVdil511oPw5KI8pszBPhE6Ol6EZWGDccps7jimzZDhUt/Blt0gJuKW4zCzYREbO3tEZMccEGEZR2tALkau5ehYt4lFfNvFFvIs32XMR66rW8yydeSaZG8i3gyCzfCZZEJOlByrp0t4wGnK5x6VRQhBuHGK9FPi7AuZxwlnIhXREoI9+lRFyUhmdS0Tyu6hEkhl34w22BOl9W9zLXc26ysb6nrf9vjHLfX+5vihnjpmaxy1Mw5tjJp98ePbYlOl/1Ia0cMEjbneXuHfb76dRXJ2vw6ng59PYw3fbhoPB21rfyFCpft19XM5rL9Z2Wb/b9v/1rZVPZGy+XIVujzJXwIXxlVCZTa95mExpAzdwIWHP8aBYALGtE+DlJfWsi2E96orVJEmDKqkNz7Ts4GJEDbRdk7VNNNxrQQjVMOzr+Np63Y95I/Xz9eD52A0a10utkcc00XFMK6jAppqvR8KSedBxGiwm5htW0UhV6bZjYvoOIpXAU2EhFuiwpbwteAP87crL96svDDWT8sozdSRQyzdRG7DsLFOqWcjYiG/YWKfM+aZpt3I/jkgvzLh/ZItZUe3dZMjbBkcE5rFGBZ1GsSnno6MQhQk4lUtkMJaDQBwF5Fvux9czbrHePkLAAD//wMA6/sn0wENAAA=
105
+ http_version:
106
+ recorded_at: Fri, 01 Feb 2019 10:13:10 GMT
107
+ - request:
108
+ method: get
109
+ uri: https://api.spotify.com/v1/search?limit=20&offset=0&q=Some%20Text&type=track
110
+ body:
111
+ encoding: US-ASCII
112
+ string: ''
113
+ headers:
114
+ Accept:
115
+ - "*/*"
116
+ Accept-Encoding:
117
+ - gzip, deflate
118
+ User-Agent:
119
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.5.0p0
120
+ Authorization:
121
+ - Bearer BQAH5Bi0XNhpKUe7e-3a7wM_u1eg__ZIkNXdh8AuvBwFTcUccPOWTweA9BiriAqoWqvMgw72x-ZSnTC8-fg
122
+ Host:
123
+ - api.spotify.com
124
+ response:
125
+ status:
126
+ code: 200
127
+ message: OK
128
+ headers:
129
+ Content-Type:
130
+ - application/json; charset=utf-8
131
+ Cache-Control:
132
+ - public, max-age=7200
133
+ Access-Control-Allow-Origin:
134
+ - "*"
135
+ Access-Control-Allow-Headers:
136
+ - Accept, Authorization, Origin, Content-Type, Retry-After
137
+ Access-Control-Allow-Methods:
138
+ - GET, POST, OPTIONS, PUT, DELETE, PATCH
139
+ Access-Control-Allow-Credentials:
140
+ - 'true'
141
+ Access-Control-Max-Age:
142
+ - '604800'
143
+ Content-Encoding:
144
+ - gzip
145
+ Date:
146
+ - Fri, 01 Feb 2019 10:13:11 GMT
147
+ Via:
148
+ - 1.1 google
149
+ Alt-Svc:
150
+ - clear
151
+ Transfer-Encoding:
152
+ - chunked
153
+ body:
154
+ encoding: ASCII-8BIT
155
+ string: !binary |-
156
+ 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
157
+ http_version:
158
+ recorded_at: Fri, 01 Feb 2019 10:13:11 GMT
159
+ - request:
160
+ method: get
161
+ uri: https://api.spotify.com/v1/tracks/1UjRTBZvNexWzWMzlPUBFh
162
+ body:
163
+ encoding: US-ASCII
164
+ string: ''
165
+ headers:
166
+ Accept:
167
+ - "*/*"
168
+ Accept-Encoding:
169
+ - gzip, deflate
170
+ User-Agent:
171
+ - rest-client/2.0.2 (linux-gnu x86_64) ruby/2.5.0p0
172
+ Authorization:
173
+ - Bearer BQAH5Bi0XNhpKUe7e-3a7wM_u1eg__ZIkNXdh8AuvBwFTcUccPOWTweA9BiriAqoWqvMgw72x-ZSnTC8-fg
174
+ Host:
175
+ - api.spotify.com
176
+ response:
177
+ status:
178
+ code: 200
179
+ message: OK
180
+ headers:
181
+ Content-Type:
182
+ - application/json; charset=utf-8
183
+ Cache-Control:
184
+ - public, max-age=7200
185
+ Access-Control-Allow-Origin:
186
+ - "*"
187
+ Access-Control-Allow-Headers:
188
+ - Accept, Authorization, Origin, Content-Type, Retry-After
189
+ Access-Control-Allow-Methods:
190
+ - GET, POST, OPTIONS, PUT, DELETE, PATCH
191
+ Access-Control-Allow-Credentials:
192
+ - 'true'
193
+ Access-Control-Max-Age:
194
+ - '604800'
195
+ Content-Encoding:
196
+ - gzip
197
+ Date:
198
+ - Fri, 01 Feb 2019 10:13:11 GMT
199
+ Via:
200
+ - 1.1 google
201
+ Alt-Svc:
202
+ - clear
203
+ Transfer-Encoding:
204
+ - chunked
205
+ body:
206
+ encoding: ASCII-8BIT
207
+ string: !binary |-
208
+ H4sIAAAAAAAAAOxW23KjRhB936+geLaXmeEiUFUqZcn2SqtLFF1sr1Mp1TAM1qxBsDCSL1v+90ADkuUIWbvJQx7ycsrqbs6c6emLv39QFJUG7ipUlabyPftV/Z7Lp5jnRjUVy7uAqyelM5EilWnu+aP8ILPyR8mTJQ3mqyRIt1TgS+NICv8JuBZSxmlT06KYLz+Wjo8sCrWCViMcL1rfxvbz1XmvR3iH3NiXPlZLspeT6rxFwv0dQhqLHb41LinTOs4Nl/CA6b2wJQ2LfLQiKaOl0l5EYuvdZKs4detYJaLIYiGuWfibhy76ovxZJXtNRUDdgM9DmtzzKu3q2bl6kuEYcAo4y7F1AfgJ8DdAiGmfAXYA+4DgbRfeL4C3OZ4Dw3kPEGIu2oBgv5jkeNkFhG8/tQCLv0FJB77tDAFBVRfUdoGhCwxdiPw8yrEPbH2w9CG+f5XjAM4dgH1wAwg6hxA/hFsMQeEQlI/gjiM4ZQQ3HUHMCBhG8O0EvBPIzwR0TuCsKcRP4RbT6xxnoHMGX10N1c2L1Bb6kWWet5aGbydMTi/GnacZMWfXjw3Ru7W+lI9fHnRUhedsaR1dSVSW9ztBIb3jb5t6wcXdQuZGy0CvCjrY0ZWpYt4yk6QBieYSV0fMNRzucp9z5DiejrHj2ZkBGZyb3PVdil511oPw5KI8pszBPhE6Ol6EZWGDccps7jimzZDhUt/Blt0gJuKW4zCzYREbO3tEZMccEGEZR2tALkau5ehYt4lFfNvFFvIs32XMR66rW8yydeSaZG8i3gyCzfCZZEJOlByrp0t4wGnK5x6VRQhBuHGK9FPi7AuZxwlnIhXREoI9+lRFyUhmdS0Tyu6hEkhl34w22BOl9W9zLXc26ysb6nrf9vjHLfX+5vihnjpmaxy1Mw5tjJp98ePbYlOl/1Ia0cMEjbneXuHfb76dRXJ2vw6ng59PYw3fbhoPB21rfyFCpft19XM5rL9Z2Wb/b9v/1rZVPZGy+XIVujzJXwIXxlVCZTa95mExpAzdwIWHP8aBYALGtE+DlJfWsi2E96orVJEmDKqkNz7Ts4GJEDbRdk7VNNNxrQQjVMOzr+Np63Y95I/Xz9eD52A0a10utkcc00XFMK6jAppqvR8KSedBxGiwm5htW0UhV6bZjYvoOIpXAU2EhFuiwpbwteAP87crL96svDDWT8sozdSRQyzdRG7DsLFOqWcjYiG/YWKfM+aZpt3I/jkgvzLh/ZItZUe3dZMjbBkcE5rFGBZ1GsSnno6MQhQk4lUtkMJaDQBwF5Fvux9czbrHePkLAAD//wMA6/sn0wENAAA=
209
+ http_version:
210
+ recorded_at: Fri, 01 Feb 2019 10:13:11 GMT
211
+ recorded_with: VCR 4.0.0