rapgenius 0.0.3 → 0.1.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.
- data/CHANGELOG.md +5 -1
- data/README.md +39 -6
- data/lib/rapgenius/scraper.rb +26 -1
- data/lib/rapgenius/song.rb +22 -3
- data/lib/rapgenius/version.rb +1 -1
- data/pkg/rapgenius-0.0.3.gem +0 -0
- data/rapgenius.gemspec +3 -3
- data/spec/rapgenius/annotation_spec.rb +1 -1
- data/spec/rapgenius/song_spec.rb +17 -0
- metadata +7 -4
data/CHANGELOG.md
CHANGED
@@ -11,4 +11,8 @@ __v0.0.2__ (17th August 2013)
|
|
11
11
|
__v0.0.3__ (22nd August 2013, *contributed by [tsigo](https://github.com/tsigo)*)
|
12
12
|
|
13
13
|
* Improves implementation of HTTParty
|
14
|
-
* Reorganises specs to use VCR
|
14
|
+
* Reorganises specs to use VCR
|
15
|
+
|
16
|
+
__v0.1.0__ (29th August 2013, *contributed by [tsigo](https://github.com/tsigo)*)
|
17
|
+
|
18
|
+
* Adds support for searching for songs with `RapGenius::Song.search("Song, artist name or other query")`
|
data/README.md
CHANGED
@@ -15,7 +15,7 @@ with a nice bit of screen scraping with [Nokogiri](https://github.com/sparklemot
|
|
15
15
|
Install the gem, and you're ready to go. Simply add the following to your
|
16
16
|
Gemfile:
|
17
17
|
|
18
|
-
`gem "rapgenius", "~> 0.0
|
18
|
+
`gem "rapgenius", "~> 0.1.0"`
|
19
19
|
|
20
20
|
## Usage
|
21
21
|
|
@@ -77,14 +77,45 @@ annotation == annotations2
|
|
77
77
|
# => true
|
78
78
|
```
|
79
79
|
|
80
|
+
You can search for songs by artist and/or title.
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
results = RapGenius::Song.search("Big Sean Control")
|
84
|
+
# => [#<RapGenius::Song:0x007fbe4b9195e0
|
85
|
+
# @artist="Big Sean (Ft. Jay Electronica & Kendrick Lamar)",
|
86
|
+
# @title="Control",
|
87
|
+
# @url="http://rapgenius.com/Big-sean-control-lyrics">,
|
88
|
+
# #<RapGenius::Song:0x007fbe4b920f70
|
89
|
+
# @artist="Big Sean (Ft. Jay Electronica & Kendrick Lamar)",
|
90
|
+
# @title="Control (French Version)",
|
91
|
+
# @url="http://rapgenius.com/Big-sean-control-french-version-lyrics">,
|
92
|
+
# #<RapGenius::Song:0x007fbe4b920958
|
93
|
+
# @artist="Big Sean (Ft. Crobar, Jay Electronica & Kendrick Lamar)",
|
94
|
+
# @title="Control (Remix) [Kendrick Diss]",
|
95
|
+
# @url="http://rapgenius.com/Big-sean-control-remix-kendrick-diss-lyrics">,
|
96
|
+
# #<RapGenius::Song:0x007fbe4b920250
|
97
|
+
# @artist=
|
98
|
+
# "Sa-roc (Ft. Big Sean - No I.D., Jay Electronica, Kendrick Lamar & Sa-roc)",
|
99
|
+
# @title="CONTROL",
|
100
|
+
# @url="http://rapgenius.com/Sa-roc-control-lyrics">,
|
101
|
+
# #<RapGenius::Song:0x007fbe4b91ff30
|
102
|
+
# @artist="C3",
|
103
|
+
# @title=
|
104
|
+
# "Control ( Disses Kendrick Lamar , Jay-Z, Tyler The Creator, Big Sean, Meek Mill & More )",
|
105
|
+
# @url=
|
106
|
+
# "http://rapgenius.com/C3-control-disses-kendrick-lamar-jay-z-tyler-the-creator-big-sean-meek-mill-and-more-lyrics">]
|
107
|
+
|
108
|
+
results[0].description
|
109
|
+
# => "The non-album cut from Sean that basically blew up the Internet due to a world-beating verse by Kendrick Lamar...
|
110
|
+
```
|
111
|
+
|
80
112
|
## Contributing
|
81
113
|
|
82
|
-
|
114
|
+
After the last few contributions, there's one core thing I'd like to add to the gem:
|
83
115
|
|
84
|
-
*
|
85
|
-
* __Support for *\*Genius*__ - RapG enius also have other sites on subdomains like [News Genius](http://news.rapgenius.com) and [Poetry Genius](http://poetry.rapgenius.com). These could very easily be supported, since theyre identical in terms of markup.
|
116
|
+
* __Support for *\*Genius*__ - Rap Genius also have other sites on subdomains like [News Genius](http://news.rapgenius.com) and [Poetry Genius](http://poetry.rapgenius.com). These could very easily be supported, since theyre identical in terms of markup.
|
86
117
|
|
87
|
-
|
118
|
+
If you'd like to contribute anything else, go ahead or better still, make an issue and we can talk it over and spec it out! A few quick tips:
|
88
119
|
|
89
120
|
* Don't update the version numbers before your pull request - I'll sort that part out for you!
|
90
121
|
* Make sure you write specs, then run them with `$ bundle exec rake`
|
@@ -92,4 +123,6 @@ This gem is open source, so feel free to add anything you want, then make a pull
|
|
92
123
|
|
93
124
|
## Get in touch
|
94
125
|
|
95
|
-
|
126
|
+
[timrogers](https://github.com/timrogers) and [tsigo](https://github.com/tsigo) are the gem's primary contributors.
|
127
|
+
|
128
|
+
Any questions, thoughts or comments? Email me at <me+rapgenius@timrogers.co.uk> or create an issue.
|
data/lib/rapgenius/scraper.rb
CHANGED
@@ -24,6 +24,31 @@ module RapGenius
|
|
24
24
|
parser NokogiriParser
|
25
25
|
base_uri 'http://rapgenius.com'
|
26
26
|
headers 'User-Agent' => "rapgenius.rb v#{RapGenius::VERSION}"
|
27
|
+
|
28
|
+
# Perform a search
|
29
|
+
#
|
30
|
+
# query - Query string
|
31
|
+
#
|
32
|
+
# Note: Currently only supports Song searching
|
33
|
+
#
|
34
|
+
# Returns a non-parsed (i.e., plaintext) response body
|
35
|
+
def self.search(query)
|
36
|
+
response = get("/search/quick", query: {q: query}, headers: default_search_headers)
|
37
|
+
response.body
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# Default headers for a search request
|
43
|
+
#
|
44
|
+
# Tells RapGenius we only want Javascript so we get plaintext results back.
|
45
|
+
def self.default_search_headers
|
46
|
+
{
|
47
|
+
'X-Requested-With' => 'XMLHttpRequest',
|
48
|
+
'Referer' => base_uri,
|
49
|
+
'Accept' => 'application/x-javascript,text/javascript'
|
50
|
+
}
|
51
|
+
end
|
27
52
|
end
|
28
53
|
|
29
54
|
BASE_URL = Client.base_uri + "/".freeze
|
@@ -32,7 +57,7 @@ module RapGenius
|
|
32
57
|
|
33
58
|
def url=(url)
|
34
59
|
unless url =~ /^https?:\/\//
|
35
|
-
@url = BASE_URL + url
|
60
|
+
@url = BASE_URL + url.gsub(/^\//, '')
|
36
61
|
else
|
37
62
|
@url = url
|
38
63
|
end
|
data/lib/rapgenius/song.rb
CHANGED
@@ -7,16 +7,35 @@ module RapGenius
|
|
7
7
|
self.new(path)
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
# Search for a song
|
11
|
+
#
|
12
|
+
# query - Song to search for
|
13
|
+
#
|
14
|
+
# Returns an Array of Song objects.
|
15
|
+
def self.search(query)
|
16
|
+
results = Client.search(query)
|
17
|
+
|
18
|
+
results.split("\n").map do |song|
|
19
|
+
info, link, id = song.split('|')
|
20
|
+
artist, title = info.force_encoding('UTF-8').split(' – ')
|
21
|
+
|
22
|
+
new(link, artist: artist, title: title)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(path, kwargs = {})
|
11
27
|
self.url = path
|
28
|
+
|
29
|
+
@artist = kwargs.delete(:artist)
|
30
|
+
@title = kwargs.delete(:title)
|
12
31
|
end
|
13
32
|
|
14
33
|
def artist
|
15
|
-
document.css('.song_title a').text
|
34
|
+
@artist ||= document.css('.song_title a').text
|
16
35
|
end
|
17
36
|
|
18
37
|
def title
|
19
|
-
document.css('.edit_song_description i').text
|
38
|
+
@title ||= document.css('.edit_song_description i').text
|
20
39
|
end
|
21
40
|
|
22
41
|
def description
|
data/lib/rapgenius/version.rb
CHANGED
Binary file
|
data/rapgenius.gemspec
CHANGED
@@ -6,9 +6,9 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = "rapgenius"
|
7
7
|
s.version = RapGenius::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Tim Rogers"]
|
10
|
-
s.email = ["me@timrogers.co.uk"]
|
11
|
-
s.homepage = "
|
9
|
+
s.authors = ["Tim Rogers", "Robert Speicher"]
|
10
|
+
s.email = ["me+rapgenius@timrogers.co.uk", "rspeicher@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/timrogers/rapgenius"
|
12
12
|
s.summary = %q{A gem for accessing lyrics and explanations on RapGenius.com}
|
13
13
|
s.description = %q{Up until until now, to quote RapGenius themselves,
|
14
14
|
"working at Rap Genius is the API". With this magical screen-scraping gem,
|
data/spec/rapgenius/song_spec.rb
CHANGED
@@ -42,5 +42,22 @@ module RapGenius
|
|
42
42
|
i.url.should eq 'http://rapgenius.com/foobar'
|
43
43
|
end
|
44
44
|
end
|
45
|
+
|
46
|
+
describe '.search', vcr: {cassette_name: 'song-search-big-sean-control'} do
|
47
|
+
let(:results) { described_class.search('Big Sean Control') }
|
48
|
+
|
49
|
+
it "returns an Array of Songs" do
|
50
|
+
results.should be_an Array
|
51
|
+
results.first.should be_a Song
|
52
|
+
end
|
53
|
+
|
54
|
+
describe 'assigned attributes' do
|
55
|
+
subject { results.first }
|
56
|
+
|
57
|
+
its(:url) { should eq "http://rapgenius.com/Big-sean-control-lyrics" }
|
58
|
+
its(:artist) { should eq "Big Sean (Ft. Jay Electronica & Kendrick Lamar)" }
|
59
|
+
its(:title) { should eq "Control" }
|
60
|
+
end
|
61
|
+
end
|
45
62
|
end
|
46
63
|
end
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rapgenius
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Tim Rogers
|
9
|
+
- Robert Speicher
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
13
|
+
date: 2013-08-29 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: nokogiri
|
@@ -111,7 +112,8 @@ description: ! "Up until until now, to quote RapGenius themselves,\n \"workin
|
|
111
112
|
at Rap Genius is the API\". With this magical screen-scraping gem,\n you can
|
112
113
|
access the wealth of data on the internet Talmud in Ruby."
|
113
114
|
email:
|
114
|
-
- me@timrogers.co.uk
|
115
|
+
- me+rapgenius@timrogers.co.uk
|
116
|
+
- rspeicher@gmail.com
|
115
117
|
executables: []
|
116
118
|
extensions: []
|
117
119
|
extra_rdoc_files: []
|
@@ -130,13 +132,14 @@ files:
|
|
130
132
|
- lib/rapgenius/version.rb
|
131
133
|
- pkg/rapgenius-0.0.1.gem
|
132
134
|
- pkg/rapgenius-0.0.2.gem
|
135
|
+
- pkg/rapgenius-0.0.3.gem
|
133
136
|
- rapgenius.gemspec
|
134
137
|
- spec/rapgenius/annotation_spec.rb
|
135
138
|
- spec/rapgenius/scraper_spec.rb
|
136
139
|
- spec/rapgenius/song_spec.rb
|
137
140
|
- spec/spec_helper.rb
|
138
141
|
- spec/support/vcr.rb
|
139
|
-
homepage:
|
142
|
+
homepage: https://github.com/timrogers/rapgenius
|
140
143
|
licenses: []
|
141
144
|
post_install_message:
|
142
145
|
rdoc_options: []
|