elvallenato 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.bundle/config +1 -0
- data/.document +5 -0
- data/.gitignore +21 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +57 -0
- data/Guardfile +30 -0
- data/LICENSE +20 -0
- data/README.rdoc +35 -0
- data/Rakefile +2 -0
- data/VERSION +1 -0
- data/autotest/discover.rb +9 -0
- data/elvallenato.gemspec +29 -0
- data/lib/elvallenato/letra.rb +30 -0
- data/lib/elvallenato/search.rb +65 -0
- data/lib/elvallenato/version.rb +3 -0
- data/lib/elvallenato.rb +12 -0
- data/spec/elvallenato_spec.rb +5 -0
- data/spec/fixtures/diomedes_search.htm +660 -0
- data/spec/fixtures/siete_palabras.htm +852 -0
- data/spec/letra_spec.rb +29 -0
- data/spec/search_spec.rb +55 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +7 -0
- metadata +185 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: face9e2c5e1d24fadb250ffe5aca8050c25e787c
|
4
|
+
data.tar.gz: c8d9fd37c89086591c64cb7378fe1fdfd910d1e1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e7aa19f89a71036673df7711262c9376c85cef38429ae25e67f5e41df06de6182645d084ad94fb5671c1e7bf366ad6d66ac10995e5f31e98bd13a29ad1a5367e
|
7
|
+
data.tar.gz: 2a3e3a81c206e6227998bafea7eeb4c23e8a922bc5fb05ef178831c1e3a50acd58f2a8352ab0bffa91e70cbded4b643b34b42cd38797524490d87cf355d58e77
|
data/.bundle/config
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--- {}
|
data/.document
ADDED
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
elvallenato (0.0.5)
|
5
|
+
RedCloth
|
6
|
+
nokogiri
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
RedCloth (4.2.9)
|
12
|
+
awesome_print (1.1.0)
|
13
|
+
coderay (1.1.0)
|
14
|
+
diff-lcs (1.2.5)
|
15
|
+
formatador (0.2.4)
|
16
|
+
guard (1.7.0)
|
17
|
+
formatador (>= 0.2.4)
|
18
|
+
listen (>= 0.6.0)
|
19
|
+
lumberjack (>= 1.0.2)
|
20
|
+
pry (>= 0.9.10)
|
21
|
+
thor (>= 0.14.6)
|
22
|
+
guard-bundler (1.0.0)
|
23
|
+
bundler (~> 1.0)
|
24
|
+
guard (~> 1.1)
|
25
|
+
guard-rspec (1.2.1)
|
26
|
+
guard (>= 1.1)
|
27
|
+
listen (0.7.3)
|
28
|
+
lumberjack (1.0.5)
|
29
|
+
method_source (0.8.2)
|
30
|
+
nokogiri (1.5.5)
|
31
|
+
pry (0.9.12.6)
|
32
|
+
coderay (~> 1.0)
|
33
|
+
method_source (~> 0.8)
|
34
|
+
slop (~> 3.4)
|
35
|
+
rb-fsevent (0.9.4)
|
36
|
+
rspec (2.14.1)
|
37
|
+
rspec-core (~> 2.14.0)
|
38
|
+
rspec-expectations (~> 2.14.0)
|
39
|
+
rspec-mocks (~> 2.14.0)
|
40
|
+
rspec-core (2.14.8)
|
41
|
+
rspec-expectations (2.14.5)
|
42
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
43
|
+
rspec-mocks (2.14.6)
|
44
|
+
slop (3.5.0)
|
45
|
+
thor (0.19.1)
|
46
|
+
|
47
|
+
PLATFORMS
|
48
|
+
ruby
|
49
|
+
|
50
|
+
DEPENDENCIES
|
51
|
+
awesome_print
|
52
|
+
elvallenato!
|
53
|
+
guard
|
54
|
+
guard-bundler
|
55
|
+
guard-rspec
|
56
|
+
rb-fsevent
|
57
|
+
rspec
|
data/Guardfile
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard 'bundler' do
|
5
|
+
watch('Gemfile')
|
6
|
+
# Uncomment next line if Gemfile contain `gemspec' command
|
7
|
+
# watch(/^.+\.gemspec/)
|
8
|
+
end
|
9
|
+
|
10
|
+
guard 'rspec', :version => 2 do
|
11
|
+
watch(%r{^spec/.+_spec\.rb$})
|
12
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
13
|
+
watch('spec/spec_helper.rb') { "spec" }
|
14
|
+
|
15
|
+
# Rails example
|
16
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
17
|
+
watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
18
|
+
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
19
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
20
|
+
watch('config/routes.rb') { "spec/routing" }
|
21
|
+
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
22
|
+
|
23
|
+
# Capybara request specs
|
24
|
+
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
|
25
|
+
|
26
|
+
# Turnip features and steps
|
27
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
28
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
29
|
+
end
|
30
|
+
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 John Maya
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
= elvallenato
|
2
|
+
|
3
|
+
This application is designed to scrap data from el vallenato.com
|
4
|
+
|
5
|
+
= Examples
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'elvallenato'
|
9
|
+
#Optional if you want to import the namespace
|
10
|
+
include ElVallenato
|
11
|
+
s = Search.new('canta', "Jorge")
|
12
|
+
s.fetch_content
|
13
|
+
letras = s.collect_lirics
|
14
|
+
puts letras[0].title
|
15
|
+
puts letras[0].body
|
16
|
+
puts letras[0].artist
|
17
|
+
puts letras[0].composer
|
18
|
+
|
19
|
+
#if you want to go to the next page fetch the contents again
|
20
|
+
s.fetch_content
|
21
|
+
|
22
|
+
|
23
|
+
== Note on Patches/Pull Requests
|
24
|
+
|
25
|
+
* Fork the project.
|
26
|
+
* Make your feature addition or bug fix.
|
27
|
+
* Add tests for it. This is important so I don't break it in a
|
28
|
+
future version unintentionally.
|
29
|
+
* Commit, do not mess with rakefile, version, or history.
|
30
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
31
|
+
* Send me a pull request. Bonus points for topic branches.
|
32
|
+
|
33
|
+
== Copyright
|
34
|
+
|
35
|
+
Copyright (c) 2009 John Maya. See LICENSE for details.
|
data/Rakefile
ADDED
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.2
|
data/elvallenato.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "elvallenato/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "elvallenato"
|
7
|
+
s.version = Elvallenato::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["John Maya"]
|
10
|
+
s.email = ["jcmaya@hotmail.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{This gem will interface with http://www.elvallenato.com}
|
13
|
+
s.description = %q{This gem will interface with http://www.elvallenato.com}
|
14
|
+
|
15
|
+
s.rubyforge_project = "elvallenato"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
s.add_development_dependency('rspec')
|
22
|
+
s.add_development_dependency('guard')
|
23
|
+
s.add_development_dependency('guard-rspec')
|
24
|
+
s.add_development_dependency('guard-bundler')
|
25
|
+
s.add_development_dependency('rb-fsevent')
|
26
|
+
s.add_development_dependency('awesome_print')
|
27
|
+
s.add_dependency('RedCloth')
|
28
|
+
s.add_dependency('nokogiri')
|
29
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module ElVallenato
|
4
|
+
class Letra
|
5
|
+
|
6
|
+
attr_reader :content
|
7
|
+
|
8
|
+
def initialize(content)
|
9
|
+
@content = content
|
10
|
+
@doc = Nokogiri::HTML(@content)
|
11
|
+
end
|
12
|
+
|
13
|
+
def title
|
14
|
+
@title ||= @doc.at(".text_title").text
|
15
|
+
end
|
16
|
+
|
17
|
+
def body
|
18
|
+
@body ||= @doc.search("td .text_std")[6].inner_html
|
19
|
+
end
|
20
|
+
|
21
|
+
def composer
|
22
|
+
@composer ||= @doc.search("td .text_std")[9].text
|
23
|
+
end
|
24
|
+
|
25
|
+
def artist
|
26
|
+
@artist ||= @doc.search("td .text_std")[8].text
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'URI'
|
4
|
+
|
5
|
+
module ElVallenato
|
6
|
+
|
7
|
+
class Search
|
8
|
+
attr_reader :mode,:term,:url
|
9
|
+
|
10
|
+
def initialize(mode,term)
|
11
|
+
@current_link = 0
|
12
|
+
@mode = CGI.escape(mode)
|
13
|
+
@term = CGI.escape(term)
|
14
|
+
@url = "http://www.elvallenato.com/letras/busqueda.php?x=#{@term}&busca=#{@mode}&image.x=12&image.y=11"
|
15
|
+
@base = "http://" + URI.parse(@url).host
|
16
|
+
end
|
17
|
+
|
18
|
+
def content
|
19
|
+
@content ||= OpenURI.open_uri(@url).read
|
20
|
+
end
|
21
|
+
|
22
|
+
def next_url
|
23
|
+
return nil if @current_link == pages
|
24
|
+
if @current_link > 0
|
25
|
+
link = @all_links[@current_link]["href"]
|
26
|
+
@current_link += 1
|
27
|
+
return [@base,link].join("/")
|
28
|
+
else
|
29
|
+
@all_links ||= Nokogiri::HTML.parse(content).css("span.class5 a")
|
30
|
+
link = @all_links[0]["href"]
|
31
|
+
@current_link += 1
|
32
|
+
return [@base,link].join("/")
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
def pages
|
37
|
+
links.size
|
38
|
+
end
|
39
|
+
|
40
|
+
def links
|
41
|
+
@page_links ||= Nokogiri::HTML.parse(content).css("span.class5 a").collect do |e|
|
42
|
+
e["href"] if e["href"] =~ /pg=\d+$/
|
43
|
+
end.compact.sort.uniq
|
44
|
+
end
|
45
|
+
|
46
|
+
def liric_links
|
47
|
+
@liric_links ||= Nokogiri::HTML.parse(content).css('.class10 a').collect do |e|
|
48
|
+
clean_url(e["href"])
|
49
|
+
end.compact.sort.uniq
|
50
|
+
end
|
51
|
+
|
52
|
+
def clean_url(url)
|
53
|
+
url =~ /letras\/letras\/(\d+)\/(.+?)$/
|
54
|
+
id = $1
|
55
|
+
song_name = CGI.escape($2)
|
56
|
+
[@base,"letras","letras",id,song_name].join("/")
|
57
|
+
end
|
58
|
+
|
59
|
+
def letras
|
60
|
+
liric_links.collect do |link|
|
61
|
+
Letra.new(OpenURI.open_uri(link).read)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/elvallenato.rb
ADDED