Class: Libertree::Embedding::CustomProviders::Bandcamp

Inherits:
Object
  • Object
show all
Defined in:
lib/libertree/embedding/custom-providers.rb

Class Method Summary collapse

Class Method Details

.formatObject



117
118
119
# File 'lib/libertree/embedding/custom-providers.rb', line 117

def self.format
  %r{https?://.*\.bandcamp\.com/(track|album)/.+}
end

.get(url) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/libertree/embedding/custom-providers.rb', line 121

def self.get(url)
  return unless url =~ self.format

  type = $1

  uri = URI.parse(url)
  Timeout.timeout(10) do
    Net::HTTP.start(uri.host) do |http|
      resp = http.get(uri.path)
      html = Nokogiri::HTML(resp.body)
      node = html.xpath("//meta[@property='og:video']/@content")
      if node.empty?
        raise Libertree::Embedding::Error, "failed to find embedding code"
      else
        if node.text.match(/#{type}=(\d+)/)
          "<iframe width=\"400\" height=\"100\" frameborder=\"0\" allowtransparency=\"true\" src=\"https://bandcamp.com/EmbeddedPlayer/size=venti/#{type}=#{$1}\"></iframe>"
        else
          raise Libertree::Embedding::Error, "failed to find #{type} id"
        end
      end
    end
  end
end