Implements MusicBrainz::ReleaseGroup.search and .find_by_artist_and_title

This commit is contained in:
Mathias Gawlista
2013-01-22 16:04:15 +01:00
parent efaf9d6503
commit 18ebfad7c5
6 changed files with 113 additions and 24 deletions
+1
View File
@@ -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
+17
View File
@@ -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