fronkin_bandcamp 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c242455993c2dcfa2c41db366c8b6ae5ad9fe869fa1ce9a5385afb8f8439ed1
4
- data.tar.gz: c5a4f05d25b69f35d43aa175b908c6a7dfff0a92c72ad5ff766b9e06a8b61492
3
+ metadata.gz: 5aa721c0d234ac5d272756b4bae205934d15448cfb189a7a210f734660e0bec2
4
+ data.tar.gz: fa27e53eb91f0e5f50916209e127886e48a16782f8c430c3f7db32a9b986ee14
5
5
  SHA512:
6
- metadata.gz: 2098466e9b5f88602cf1d83f414542f127b39f39c511a86844195eee2c1fc6b8104719555418c3283af3c50ff540bcc3273b923a9727edb7bda5f59a3d412cfc
7
- data.tar.gz: 9ff2584771d6ed9f9b84fc2cedd5b03439e89b95a26fa9f22972e73139ec4d15eb9e916415852f0077bb1bbb0ce8e4b56b5d8805227dc093cfc93ff5d115847f
6
+ metadata.gz: 5ebd56d2dd9ba20a85e76db33396b26563438db8ffcc5930b28ac3d533642f933792b371c7b5694bf701e4549a5e2332d02271a55c8b7969f8e41cf2dcbb4632
7
+ data.tar.gz: e3cb91ed0cb4f1edc4e2c11f3667898ba0cdaae78d9d514ccea0e2efc7e3c91bc4a336af500368942ff83c1b0c5381e1791a60acfec2ca768f7c168f6485d5be
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fronkin_bandcamp (0.3.0)
4
+ fronkin_bandcamp (0.4.0)
5
5
  nokogiri (>= 1.10.4)
6
6
 
7
7
  GEM
@@ -13,7 +13,7 @@ GEM
13
13
  diff-lcs (1.3)
14
14
  method_source (0.9.0)
15
15
  mini_portile2 (2.4.0)
16
- nokogiri (1.10.7)
16
+ nokogiri (1.10.9)
17
17
  mini_portile2 (~> 2.4.0)
18
18
  pry (0.11.3)
19
19
  coderay (~> 1.1.0)
@@ -21,7 +21,7 @@ GEM
21
21
  pry-byebug (3.6.0)
22
22
  byebug (~> 10.0)
23
23
  pry (~> 0.10)
24
- rake (10.4.2)
24
+ rake (13.0.1)
25
25
  rspec (3.7.0)
26
26
  rspec-core (~> 3.7.0)
27
27
  rspec-expectations (~> 3.7.0)
@@ -41,12 +41,12 @@ PLATFORMS
41
41
 
42
42
  DEPENDENCIES
43
43
  awesome_print (~> 1.8)
44
- bundler (~> 1.16)
44
+ bundler
45
45
  fronkin_bandcamp!
46
46
  pry (~> 0.11)
47
47
  pry-byebug (~> 3.6)
48
- rake (~> 10.0)
48
+ rake (~> 13.0)
49
49
  rspec (~> 3.7)
50
50
 
51
51
  BUNDLED WITH
52
- 1.17.1
52
+ 2.1.4
data/README.md CHANGED
@@ -96,12 +96,6 @@ scraper.release.formats
96
96
 
97
97
  ## III. Miscellaneous
98
98
 
99
- ### TODO
100
-
101
- * ~~Scrape release formats~~
102
- * Scrape release fans
103
- * Add CLI
104
-
105
99
  ### Development
106
100
 
107
101
  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.
@@ -23,8 +23,8 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_dependency 'nokogiri', '>= 1.10.4'
25
25
 
26
- spec.add_development_dependency 'bundler', '~> 1.16'
27
- spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'bundler'
27
+ spec.add_development_dependency 'rake', '~> 13.0'
28
28
  spec.add_development_dependency 'rspec', '~> 3.7'
29
29
  spec.add_development_dependency 'pry', '~> 0.11'
30
30
  spec.add_development_dependency 'pry-byebug', '~> 3.6'
@@ -1,9 +1,11 @@
1
1
  module FronkinBandcamp
2
2
  class Artist
3
- attr_accessor :name, :photo, :location
3
+ attr_reader :name, :photo, :location
4
4
 
5
- def initialize
6
- yield self if block_given?
5
+ def initialize(doc)
6
+ @name = doc.css('div#bio-container span.title').text
7
+ @photo = doc.css('div#bio-container div.bio-pic a.popupImage').attribute('href').value
8
+ @location = doc.css('div#bio-container span.location').text
7
9
  end
8
10
  end
9
11
  end
@@ -3,15 +3,24 @@ require 'fronkin_bandcamp/format'
3
3
 
4
4
  module FronkinBandcamp
5
5
  class Release
6
- attr_reader :title, :date, :cover, :tracks, :tags, :formats, :fans
6
+ attr_accessor :bandcamp_url, :artist_name
7
+ attr_reader :title, :date, :description, :credits, :cover, :tracks, :tags,
8
+ :release_id, :formats, :bandcamp_album_id
9
+
10
+ BARE_CREDITS_NODE_SIZE = 2
7
11
 
8
12
  def initialize(doc)
9
13
  @title = doc.css('div#name-section h2.trackTitle').text.strip
10
- @date = doc.css('div.tralbumData.tralbum-credits meta').attribute('content').value
14
+ @date = Date.parse(doc.css('div.tralbumData.tralbum-credits meta').attribute('content').value).strftime('%-m/%-d/%Y')
15
+ @description = doc.css('div.tralbumData.tralbum-about').text.strip.gsub(/\r/, "\n")
16
+ @credits = scrape_credits(doc)
11
17
  @cover = doc.css('div#tralbumArt a.popupImage').attribute('href').value
12
18
  @tracks = scrape_tracks(doc)
13
19
  @tags = doc.css('div.tralbumData.tralbum-tags a.tag').map(&:text)
20
+ @release_id = tags.find { |tag| tag.match(/\Annr/) }&.upcase
14
21
  @formats = scrape_formats(doc)
22
+ @bandcamp_album_id = doc.css('meta[property="og:video"]').attr("content").value.match(/album=(?<bandcamp_album_id>\d+)/).named_captures['bandcamp_album_id']
23
+ yield self if block_given?
15
24
  end
16
25
 
17
26
  private
@@ -26,5 +35,15 @@ module FronkinBandcamp
26
35
  format_choices = doc.css('li.buyItem')
27
36
  format_choices.map { |choice| Format.new(choice) }
28
37
  end
38
+
39
+ def scrape_credits(doc)
40
+ child_nodes = doc.css('div.tralbumData.tralbum-credits').children
41
+
42
+ if child_nodes.size <= BARE_CREDITS_NODE_SIZE
43
+ ''
44
+ else
45
+ child_nodes[4..-1].text.strip.gsub(/-\W/, '').split(/\r\n/)
46
+ end
47
+ end
29
48
  end
30
49
  end
@@ -5,21 +5,21 @@ require 'fronkin_bandcamp/artist'
5
5
 
6
6
  module FronkinBandcamp
7
7
  class Scraper
8
- attr_reader :doc, :release, :artist
8
+ attr_reader :doc, :release, :artist, :url
9
9
 
10
10
  def initialize(url)
11
- @doc = Nokogiri::HTML(open(url), nil, 'utf-8') { |config| config.noblanks }
11
+ @url = url
12
+ @doc = Nokogiri::HTML(URI.open(url), nil, 'utf-8') { |config| config.noblanks }
12
13
  scrape
13
14
  end
14
15
 
15
16
  private
16
17
 
17
18
  def scrape
18
- @release = Release.new(doc)
19
- @artist = Artist.new do |artist|
20
- artist.name = doc.css('div#bio-container span.title').text
21
- artist.photo = doc.css('div#bio-container div.bio-pic a.popupImage').attribute('href').value
22
- artist.location = doc.css('div#bio-container span.location').text
19
+ @artist = Artist.new(doc)
20
+ @release = Release.new(doc) do |release|
21
+ release.artist_name = artist.name
22
+ release.bandcamp_url = url
23
23
  end
24
24
  end
25
25
  end
@@ -1,3 +1,3 @@
1
1
  module FronkinBandcamp
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fronkin_bandcamp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fronk Lom Lom
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-27 00:00:00.000000000 Z
11
+ date: 2020-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -28,30 +28,30 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.16'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -155,8 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
155
  - !ruby/object:Gem::Version
156
156
  version: '0'
157
157
  requirements: []
158
- rubyforge_project:
159
- rubygems_version: 2.7.6
158
+ rubygems_version: 3.1.2
160
159
  signing_key:
161
160
  specification_version: 4
162
161
  summary: This gem is a convenient web scraper for Bandcamp releases.