Merge pull request #12 from Applicat/release_group_search2
Implementation of release group search
This commit is contained in:
@@ -24,6 +24,7 @@ require "musicbrainz/bindings/artist"
|
||||
require "musicbrainz/bindings/artist_search"
|
||||
require "musicbrainz/bindings/artist_release_groups"
|
||||
require "musicbrainz/bindings/release_group"
|
||||
require "musicbrainz/bindings/release_group_search"
|
||||
require "musicbrainz/bindings/release_group_releases"
|
||||
require "musicbrainz/bindings/release"
|
||||
require "musicbrainz/bindings/release_tracks"
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# encoding: UTF-8
|
||||
module MusicBrainz
|
||||
module Bindings
|
||||
module ReleaseGroupSearch
|
||||
def parse(xml)
|
||||
xml.xpath('./release-group-list/release-group').map do |xml|
|
||||
{
|
||||
id: (xml.attribute('id').value rescue nil),
|
||||
mbid: (xml.attribute('id').value rescue nil), # Old shit
|
||||
title: (xml.xpath('./title').text.gsub(/[`’]/, "'") rescue nil),
|
||||
type: (xml.attribute('type').value rescue nil),
|
||||
score: (xml.attribute('score').value.to_i rescue nil)
|
||||
} rescue nil
|
||||
end.delete_if{ |item| item.nil? }
|
||||
end
|
||||
|
||||
extend self
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -23,6 +23,23 @@ module MusicBrainz
|
||||
create_model: :release_group
|
||||
})
|
||||
end
|
||||
|
||||
def search(artist_name, title, options = {})
|
||||
artist_name = CGI.escape(artist_name).gsub(/\!/, '\!')
|
||||
title = CGI.escape(title).gsub(/\!/, '\!')
|
||||
query = ["artist:\"#{artist_name}\"", "releasegroup:\"#{title}\""]
|
||||
query << "type: #{options[:type]}" if options[:type]
|
||||
|
||||
client.load(
|
||||
:release_group, { query: query.join(' AND '), limit: 10 },
|
||||
{ binding: :release_group_search }
|
||||
)
|
||||
end
|
||||
|
||||
def find_by_artist_and_title(artist_name, title, options = {})
|
||||
matches = search(artist_name, title, options)
|
||||
matches.empty? ? nil : find(matches.first[:id])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user