fronkin_bandcamp 0.3.0 → 0.4.1

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: 4a08ddf83d87a1de4a6118401d81bf724ee8f8d7e7a3f240f3132e4f157fe033
4
+ data.tar.gz: 19e1f11e58fccc2ed87c82d139c4ad722781ad6015fc22f757f29bf10dd419d4
5
5
  SHA512:
6
- metadata.gz: 2098466e9b5f88602cf1d83f414542f127b39f39c511a86844195eee2c1fc6b8104719555418c3283af3c50ff540bcc3273b923a9727edb7bda5f59a3d412cfc
7
- data.tar.gz: 9ff2584771d6ed9f9b84fc2cedd5b03439e89b95a26fa9f22972e73139ec4d15eb9e916415852f0077bb1bbb0ce8e4b56b5d8805227dc093cfc93ff5d115847f
6
+ metadata.gz: 5985a16d7c260bc321beeea3d48f498e1f0623e089f71aa40e57604a0be63043bca7f8385a9feedc3ace6b29936e01b7ed08c9348aa64818f46aefb823954114
7
+ data.tar.gz: 2eb20dfac2c298a7a2721104f364726e9ebdaffcb62496e3016d78a84181e97a2873304319e259927e596519686ba98b67a454c2f06bfa881a2541df48c5dd5c
@@ -0,0 +1,18 @@
1
+ name: Run tests
2
+ on: [pull_request]
3
+ jobs:
4
+ test:
5
+ strategy:
6
+ fail-fast: true
7
+ matrix:
8
+ os: [ubuntu-latest, macos-latest]
9
+ # Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
10
+ ruby: ['3.3', '3.4', '4.0']
11
+ runs-on: ${{ matrix.os }}
12
+ steps:
13
+ - uses: actions/checkout@v6
14
+ - uses: ruby/setup-ruby@v1
15
+ with:
16
+ ruby-version: ${{ matrix.ruby }}
17
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
18
+ - run: bundle exec rake
data/{.pryrc → .irbrc} RENAMED
@@ -5,5 +5,6 @@ def reload!
5
5
  load 'fronkin_bandcamp/scraper.rb'
6
6
  end
7
7
 
8
- url = 'https://piglet.bandcamp.com/album/lava-land'
8
+ url = 'https://doncaballero.bandcamp.com/album/what-burns-never-returns'
9
9
  scraper = FronkinBandcamp::Scraper.new(url)
10
+ puts scraper.url
data/Gemfile.lock CHANGED
@@ -1,52 +1,45 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fronkin_bandcamp (0.3.0)
5
- nokogiri (>= 1.10.4)
4
+ fronkin_bandcamp (0.4.1)
5
+ nokogiri (~> 1.19)
6
+ ostruct (~> 0.6)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
- awesome_print (1.8.0)
11
- byebug (10.0.2)
12
- coderay (1.1.2)
13
- diff-lcs (1.3)
14
- method_source (0.9.0)
15
- mini_portile2 (2.4.0)
16
- nokogiri (1.10.7)
17
- mini_portile2 (~> 2.4.0)
18
- pry (0.11.3)
19
- coderay (~> 1.1.0)
20
- method_source (~> 0.9.0)
21
- pry-byebug (3.6.0)
22
- byebug (~> 10.0)
23
- pry (~> 0.10)
24
- rake (10.4.2)
25
- rspec (3.7.0)
26
- rspec-core (~> 3.7.0)
27
- rspec-expectations (~> 3.7.0)
28
- rspec-mocks (~> 3.7.0)
29
- rspec-core (3.7.1)
30
- rspec-support (~> 3.7.0)
31
- rspec-expectations (3.7.0)
11
+ awesome_print (1.9.2)
12
+ diff-lcs (1.6.2)
13
+ mini_portile2 (2.8.7)
14
+ nokogiri (1.19.3)
15
+ mini_portile2 (~> 2.8.2)
16
+ racc (~> 1.4)
17
+ ostruct (0.6.3)
18
+ racc (1.8.1)
19
+ rake (13.4.2)
20
+ rspec (3.13.2)
21
+ rspec-core (~> 3.13.0)
22
+ rspec-expectations (~> 3.13.0)
23
+ rspec-mocks (~> 3.13.0)
24
+ rspec-core (3.13.6)
25
+ rspec-support (~> 3.13.0)
26
+ rspec-expectations (3.13.5)
32
27
  diff-lcs (>= 1.2.0, < 2.0)
33
- rspec-support (~> 3.7.0)
34
- rspec-mocks (3.7.0)
28
+ rspec-support (~> 3.13.0)
29
+ rspec-mocks (3.13.8)
35
30
  diff-lcs (>= 1.2.0, < 2.0)
36
- rspec-support (~> 3.7.0)
37
- rspec-support (3.7.1)
31
+ rspec-support (~> 3.13.0)
32
+ rspec-support (3.13.7)
38
33
 
39
34
  PLATFORMS
40
35
  ruby
41
36
 
42
37
  DEPENDENCIES
43
- awesome_print (~> 1.8)
44
- bundler (~> 1.16)
38
+ awesome_print (~> 1.9)
39
+ bundler
45
40
  fronkin_bandcamp!
46
- pry (~> 0.11)
47
- pry-byebug (~> 3.6)
48
- rake (~> 10.0)
49
- rspec (~> 3.7)
41
+ rake (~> 13.4)
42
+ rspec (~> 3.13)
50
43
 
51
44
  BUNDLED WITH
52
- 1.17.1
45
+ 2.5.17
data/README.md CHANGED
@@ -1,6 +1,3 @@
1
- [![Build
2
- Status](https://travis-ci.org/FTLam11/fronkin_bandcamp_scraper.svg?branch=master)](https://travis-ci.org/FTLam11/fronkin_bandcamp_scraper)
3
-
4
1
  # FronkinBandcamp
5
2
 
6
3
  Maybe you thought you'd flop your way to a championship.
@@ -96,12 +93,6 @@ scraper.release.formats
96
93
 
97
94
  ## III. Miscellaneous
98
95
 
99
- ### TODO
100
-
101
- * ~~Scrape release formats~~
102
- * Scrape release fans
103
- * Add CLI
104
-
105
96
  ### Development
106
97
 
107
98
  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.
@@ -21,12 +21,11 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ['lib']
23
23
 
24
- spec.add_dependency 'nokogiri', '>= 1.10.4'
24
+ spec.add_dependency 'nokogiri', '~> 1.19'
25
+ spec.add_dependency 'ostruct', '~> 0.6'
25
26
 
26
- spec.add_development_dependency 'bundler', '~> 1.16'
27
- spec.add_development_dependency 'rake', '~> 10.0'
28
- spec.add_development_dependency 'rspec', '~> 3.7'
29
- spec.add_development_dependency 'pry', '~> 0.11'
30
- spec.add_development_dependency 'pry-byebug', '~> 3.6'
31
- spec.add_development_dependency 'awesome_print', '~> 1.8'
27
+ spec.add_development_dependency 'bundler'
28
+ spec.add_development_dependency 'rake', '~> 13.4'
29
+ spec.add_development_dependency 'rspec', '~> 3.13'
30
+ spec.add_development_dependency 'awesome_print', '~> 1.9'
32
31
  end
@@ -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
@@ -1,5 +1,5 @@
1
1
  module FronkinBandcamp
2
- module CleanAsFuck
2
+ module StringRefinement
3
3
  refine String do
4
4
  def kleanse
5
5
  strip.gsub!(/\n\s+/, ' ')
@@ -7,7 +7,7 @@ module FronkinBandcamp
7
7
  end
8
8
  end
9
9
 
10
- using CleanAsFuck
10
+ using StringRefinement
11
11
 
12
12
  class Format
13
13
  attr_reader :name, :product, :description, :product_images, :price, :is_available
@@ -3,21 +3,30 @@ 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').children[0].to_s.strip[9..-1]).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
18
27
 
19
28
  def scrape_tracks(doc)
20
- track_titles = doc.css('table#track_table td.title-col span[itemprop="name"]').map(&:text)
29
+ track_titles = doc.css('table#track_table td.title-col span.track-title').map(&:text)
21
30
  track_durations = doc.css('table#track_table td.title-col span.time').map { |node| node.text.strip }
22
31
  track_titles.zip(track_durations).map.with_index { |t, idx| Track.new(idx + 1, t[0], t[1]) }
23
32
  end
@@ -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.parse(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.1"
3
3
  end
metadata CHANGED
@@ -1,113 +1,99 @@
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.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fronk Lom Lom
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-27 00:00:00.000000000 Z
11
+ date: 2026-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 1.10.4
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 1.10.4
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '1.16'
34
- type: :development
19
+ version: '1.19'
20
+ type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '1.16'
26
+ version: '1.19'
41
27
  - !ruby/object:Gem::Dependency
42
- name: rake
28
+ name: ostruct
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '10.0'
48
- type: :development
33
+ version: '0.6'
34
+ type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '10.0'
40
+ version: '0.6'
55
41
  - !ruby/object:Gem::Dependency
56
- name: rspec
42
+ name: bundler
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - "~>"
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
- version: '3.7'
47
+ version: '0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - "~>"
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
- version: '3.7'
54
+ version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: pry
56
+ name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '0.11'
61
+ version: '13.4'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '0.11'
68
+ version: '13.4'
83
69
  - !ruby/object:Gem::Dependency
84
- name: pry-byebug
70
+ name: rspec
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '3.6'
75
+ version: '3.13'
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '3.6'
82
+ version: '3.13'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: awesome_print
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '1.8'
89
+ version: '1.9'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '1.8'
96
+ version: '1.9'
111
97
  description: YO, this gem is a convenient web scraper for Bandcamp releases. Currently,
112
98
  it scrapes artist and release information.
113
99
  email:
@@ -116,10 +102,10 @@ executables: []
116
102
  extensions: []
117
103
  extra_rdoc_files: []
118
104
  files:
105
+ - ".github/workflows/test.yml"
119
106
  - ".gitignore"
120
- - ".pryrc"
107
+ - ".irbrc"
121
108
  - ".rspec"
122
- - ".travis.yml"
123
109
  - CODE_OF_CONDUCT.md
124
110
  - Gemfile
125
111
  - Gemfile.lock
@@ -140,7 +126,7 @@ homepage: https://github.com/FTLam11/fronkin_bandcamp_scraper
140
126
  licenses:
141
127
  - MIT
142
128
  metadata: {}
143
- post_install_message:
129
+ post_install_message:
144
130
  rdoc_options: []
145
131
  require_paths:
146
132
  - lib
@@ -155,9 +141,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
141
  - !ruby/object:Gem::Version
156
142
  version: '0'
157
143
  requirements: []
158
- rubyforge_project:
159
- rubygems_version: 2.7.6
160
- signing_key:
144
+ rubygems_version: 3.5.14
145
+ signing_key:
161
146
  specification_version: 4
162
147
  summary: This gem is a convenient web scraper for Bandcamp releases.
163
148
  test_files: []
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.5.1
5
- before_install: gem install bundler -v 1.16.1