diff options
17 files changed, 632 insertions, 0 deletions
diff --git a/addons/metadata.album.universal/addon.xml b/addons/metadata.album.universal/addon.xml new file mode 100644 index 0000000000..e25ee4a547 --- /dev/null +++ b/addons/metadata.album.universal/addon.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<addon id="metadata.album.universal" + name="Universal Album Scraper" + version="1.2.2" + provider-name="Olympia, Team XBMC"> + <requires> + <import addon="xbmc.metadata" version="1.0"/> + <import addon="metadata.common.last.fm" version="1.3.2"/> + <import addon="metadata.common.allmusic.com" version="2.3.1"/> + <import addon="metadata.common.musicbrainz.org" version="1.2.3"/> + <import addon="metadata.common.fanart.tv" version="1.0.1"/> + <import addon="metadata.common.amazon.de" version="1.0.0"/> + </requires> + <extension point="xbmc.metadata.scraper.albums" + language="en" + library="albumuniversal.xml"/> + <extension point="xbmc.addon.metadata"> + <summary lang="en">Universal Scraper for Albums</summary> + <description lang="en">This scraper collects information from the following supported sites: MusicBrainz, last.fm, allmusic.com and amazon.de, while grabs artwork from: fanart.tv, last.fm and allmusic.com. It can be set field by field that from which site you want that specific information. + +The initial search is always done on MusicBrainz. In case allmusic and/or amazon.de links are not added on the MusicBrainz site, fields from allmusic.com and/or amazon.de cannot be fetched (very easy to add those missing links though).</description> + <platform>all</platform> + </extension> +</addon> diff --git a/addons/metadata.album.universal/albumuniversal.xml b/addons/metadata.album.universal/albumuniversal.xml new file mode 100644 index 0000000000..9a90ff04c5 --- /dev/null +++ b/addons/metadata.album.universal/albumuniversal.xml @@ -0,0 +1,166 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scraper framework="1.1" date="2012-06-09"> + <NfoUrl dest="3"> + <RegExp input="$$1" output="<url>http://musicbrainz.org/ws/2/release/\1?inc=recordings+release-groups+artists+labels+ratings</url>" dest="3"> + <expression>release/(.+)</expression> + </RegExp> + </NfoUrl> + <CreateAlbumSearchUrl dest="3"> + <RegExp input="$$1" output="<url>http://search.musicbrainz.org/ws/2/release/?fmt=xml&query=release:"\1"%20AND%20artist:"$$2"</url>" dest="3"> + <RegExp input="$$2" output="\1" dest="4"> + <expression noclean="1">(.+)</expression> + </RegExp> + <RegExp input="$$2" output="\1" dest="6"> + <expression noclean="1">(.+)(?:Ft%2e|Feat%2e|Ft.|Feat.|%20and%20)</expression> + </RegExp> + <RegExp input="$$6" output="\1" dest="4"> + <expression>(.+)</expression> + </RegExp> + <expression/> + </RegExp> + </CreateAlbumSearchUrl> + <GetAlbumSearchResults dest="8"> + <RegExp input="$$5" output="<results>\1</results>" dest="8"> + <RegExp input="$$1" output="<entity><year>\5-\4-T#\6</year><artist>\3</artist><title>\2</title><url cache="mb-\1-album.xml">http://musicbrainz.org/ws/2/release/\1?inc=recordings+release-groups+artists+labels+ratings</url></entity>" dest="5"> + <expression repeat="yes">id="([^"]*)"><title>([^<]*)</title><status>Official</status><text-representation><language>[^<]*</language><script>[^<]*</script></text-representation><artist-credit><name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>([^<]*)</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>.*?</alias-list>)*</artist></name-credit>(?:<name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>[^<]*</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>.*?</alias-list>)*</artist></name-credit>)*</artist-credit><release-group\stype="Album"\sid="[^"]*">(?:<primary-type>[^<]*</primary-type>)*(?:<secondary-type-list><secondary-type>[^<]*</secondary-type></secondary-type-list>)*</release-group><date>(\d{4})[^<]*</date>(?:<country>)*([^<]*)?.*?<track-list\scount="(\d+)</expression> + </RegExp> + <RegExp input="$$1" output="<entity><year>\5-\4-T#\6</year><artist>\3</artist><title>\2</title><url cache="mb-\1-album.xml">http://musicbrainz.org/ws/2/release/\1?inc=recordings+release-groups+artists+labels+ratings</url></entity>" dest="5+"> + <expression repeat="yes">id="([^"]*)"><title>([^<]*)</title><status>Official</status><text-representation><language>[^<]*</language><script>[^<]*</script></text-representation><artist-credit><name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>([^<]*)</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>.*?</alias-list>)*</artist></name-credit>(?:<name-credit(?:>)*(?:\sjoinphrase="[^"]*">)*(?:<name>[^<]*</name)*(?:>)*<artist\sid="[^"]*"><name>[^<]*</name>(?:<sort-name>[^<]*</sort-name>)*(?:<disambiguation>[^<]*</disambiguation>)*(?:<alias-list>.*?</alias-list>)*</artist></name-credit>)*</artist-credit><release-group(?:\stype="[^"]*")*\sid="[^"]*">(?:<primary-type>[^<]*</primary-type>)*(?:<secondary-type-list><secondary-type>[^<]*</secondary-type></secondary-type-list>)*</release-group><date>(\d{4})[^<]*</date>(?:<country>)*([^<]*)?.*?<track-list\scount="(\d+)</expression> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetAlbumSearchResults> + <GetAlbumDetails dest="3"> + <RegExp input="$$5" output="<details>\1</details>" dest="3"> + <!--MBID - release--> + <RegExp input="$$1" output="\1" dest="3"> + <expression>id="([^"]*)</expression> + </RegExp> + <!--MBID - release group--> + <RegExp input="$$1" output="\1" dest="4"> + <expression><release-group type="[^"]*" id="([^"]*)"</expression> + </RegExp> + <!--Album title--> + <RegExp input="$$1" output="\1" dest="7"> + <expression trim="1"><release id="[^"]*"><title>([^<]*)<</expression> + </RegExp> + <!--Artist name--> + <RegExp input="$$1" output="\1" dest="8"> + <expression trim="1"><release id="[^"]*"><title>[^<]*<.*?<artist id="[^"]*"><name>([^<]*)<</expression> + </RegExp> + <RegExp input="$$3" output="<chain function="GetMBAlbumTitleByMBID">\1</chain>" dest="5"> + <expression noclean="1">(.+)</expression> + </RegExp> + <RegExp input="$$3" output="<chain function="GetMBAlbumArtistByMBID">\1</chain>" dest="5+"> + <expression noclean="1">(.+)</expression> + </RegExp> + <RegExp input="$$3" output="<chain function="GetMBAlbumLabelByMBID">\1</chain>" dest="5+"> + <expression noclean="1">(.+)</expression> + </RegExp> + <RegExp input="$$3" output="<chain function="GetMBAlbumDateByMBID">\1</chain>" dest="5+"> + <expression noclean="1">(.+)</expression> + </RegExp> + <RegExp input="$$3" output="<chain function="GetMBAlbumTracksByMBID">\1</chain>" dest="5+"> + <expression noclean="1">(.+)</expression> + </RegExp> + <RegExp input="$INFO[albumreviewsource]" output="<url function="GetAMGAlbumReview" cache="mb-$$4-rg.xml">http://musicbrainz.org/ws/2/release-group/$$4?inc=url-rels</url>" dest="5+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$INFO[albumreviewsource]" output="<chain function="GetLastFMAlbumReviewByAlbumAndArtist">$$7::$$8::$$7::$$8</chain>" dest="5+"> + <expression>last.fm</expression> + </RegExp> + <RegExp input="$INFO[albumreviewsource]" output="<url function="GetAmazonDEAlbumReview">http://musicbrainz.org/ws/2/release-group/$$4?inc=url-rels</url>" dest="5+"> + <expression>amazon.de</expression> + </RegExp> + <RegExp input="$INFO[albumratingsource]" output="<chain function="GetMBAlbumRatingByMBID">$$3</chain>" dest="5+"> + <expression>MusicBrainz</expression> + </RegExp> + <RegExp input="$INFO[albumratingsource]" output="<url function="GetAMGAlbumRating" cache="mb-$$4-rg.xml">http://musicbrainz.org/ws/2/release-group/$$4?inc=url-rels</url>" dest="5+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$INFO[albumstylessource]" output="<url function="GetAMGAlbumStyles" cache="mb-$$4-rg.xml">http://musicbrainz.org/ws/2/release-group/$$4?inc=url-rels</url>" dest="5+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$INFO[albummoodssource]" output="<url function="GetAMGAlbumMoods" cache="mb-$$4-rg.xml">http://musicbrainz.org/ws/2/release-group/$$4?inc=url-rels</url>" dest="5+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$INFO[albumthemessource]" output="<url function="GetAMGAlbumThemes" cache="mb-$$4-rg.xml">http://musicbrainz.org/ws/2/release-group/$$4?inc=url-rels</url>" dest="5+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp conditional="fanarttvalbumthumbs" input="$$1" output="<chain function="GetFanartTvAlbumThumbsByMBID">$$4</chain>" dest="5+"> + <expression noclean="1" /> + </RegExp> + <RegExp conditional="allmusicalbumthumbs" input="$$1" output="<url function="GetAMGAlbumThumbs" cache="mb-$$4-rg.xml">http://musicbrainz.org/ws/2/release-group/$$4?inc=url-rels</url>" dest="5+"> + <expression noclean="1" /> + </RegExp> + <RegExp conditional="lastfmalbumthumbs" input="$$1" output="<chain function="GetLastFMAlbumThumbs">$$7::$$8::$$7::$$8</chain>" dest="5+"> + <expression noclean="1" /> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetAlbumDetails> + + <GetAMGAlbumReview dest="5"> + <RegExp input="$$2" output="<details>\1</details>" dest="5"> + <RegExp input="$$1" output="<chain function="GetAMGAlbumReviewByAMGID">\1</chain>" dest="2"> + <expression noclean="1">allmusic.com/album/([^<]*)</expression> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetAMGAlbumReview> + + <GetAMGAlbumRating dest="5"> + <RegExp input="$$2" output="<details>\1</details>" dest="5"> + <RegExp input="$$1" output="<chain function="GetAMGAlbumRatingByAMGID">\1</chain>" dest="2"> + <expression noclean="1">allmusic.com/album/([^<]*)</expression> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetAMGAlbumRating> + + <GetAMGAlbumStyles dest="5"> + <RegExp input="$$2" output="<details>\1</details>" dest="5"> + <RegExp input="$$1" output="<chain function="GetAMGAlbumStylesByAMGID">\1</chain>" dest="2"> + <expression noclean="1">allmusic.com/album/([^<]*)</expression> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetAMGAlbumStyles> + + <GetAMGAlbumMoods dest="5"> + <RegExp input="$$2" output="<details>\1</details>" dest="5"> + <RegExp input="$$1" output="<chain function="GetAMGAlbumMoodsByAMGID">\1</chain>" dest="2"> + <expression noclean="1">allmusic.com/album/([^<]*)</expression> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetAMGAlbumMoods> + + <GetAMGAlbumThemes dest="5"> + <RegExp input="$$2" output="<details>\1</details>" dest="5"> + <RegExp input="$$1" output="<chain function="GetAMGAlbumThemesByAMGID">\1</chain>" dest="2"> + <expression noclean="1">allmusic.com/album/([^<]*)</expression> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetAMGAlbumThemes> + + <GetAMGAlbumThumbs dest="5"> + <RegExp input="$$2" output="<details>\1</details>" dest="5"> + <RegExp input="$$1" output="<chain function="GetAMGAlbumThumbsByAMGID">\1</chain>" dest="2"> + <expression noclean="1">allmusic.com/album/([^<]*)</expression> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetAMGAlbumThumbs> + + <GetAmazonDEAlbumReview dest="5"> + <RegExp input="$$2" output="<details>\1</details>" dest="5"> + <RegExp input="$$1" output="<chain function="GetAmazonDEAlbumReviewByASIN">\1</chain>" dest="2"> + <expression noclean="1">http://www.amazon.de/gp/product/([^<]*)</expression> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetAmazonDEAlbumReview> + +</scraper> diff --git a/addons/metadata.album.universal/changelog.txt b/addons/metadata.album.universal/changelog.txt new file mode 100644 index 0000000000..10cbfbfe72 --- /dev/null +++ b/addons/metadata.album.universal/changelog.txt @@ -0,0 +1,36 @@ +[B]1.2.2[/B] +Fixed: accommodate new Frodo style URL encoding + +[B]1.2.1[/B] +Removed: '&' sign from artist splitter + +[B]1.2.0[/B] +Added: scraping album review from amazon.de (if link exist on MusicBrainz) + +[B]1.1.4[/B] +Fixed: typo blocks preferring album in search result + +[B]1.1.3[/B] +Fixed: won't find tracks without recording id + +[B]1.1.2[/B] +Fixed: won't find tracks without duration + +[B]1.1.1[/B] +Fixed: artists won't find with 'and' in their name + +[B]1.1.0[/B] +Added: trying to get album info when multiple artists are credited (first artist will be used) +Fixed: will not find some albums + +[B]1.0.3[/B] +Fixed: Some Album releases were not found + +[B]1.0.2[/B] +Fixed: Track Duration from MusicBrainz was wrong in certain cases. Credits to scudlee! + +[B]1.0.1[/B] +Fixed: scraping moods from allmusic.com + +[B]1.0.0[/B] +Initial version
\ No newline at end of file diff --git a/addons/metadata.album.universal/icon.png b/addons/metadata.album.universal/icon.png Binary files differnew file mode 100644 index 0000000000..7c3d600dfc --- /dev/null +++ b/addons/metadata.album.universal/icon.png diff --git a/addons/metadata.album.universal/resources/language/English/strings.xml b/addons/metadata.album.universal/resources/language/English/strings.xml new file mode 100644 index 0000000000..9777a0958e --- /dev/null +++ b/addons/metadata.album.universal/resources/language/English/strings.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<strings> + <string id="30000">Grab Album Thumbs from fanart.tv</string> + <string id="30001">Grab Album Thumbs from Last.fm</string> + <string id="30002">Get Album Review from</string> + <string id="30003"> Preferred Language</string> + <string id="30004">Get Album Rating from</string> + <string id="30005">Get Album Styles from</string> + <string id="30006">Get Album Moods from</string> + <string id="30007">Get Album Themes from</string> + <string id="30008">Grab Album Thumbs from allmusic.com</string> + <string id="30009">Artwork</string> +</strings> diff --git a/addons/metadata.album.universal/resources/settings.xml b/addons/metadata.album.universal/resources/settings.xml new file mode 100644 index 0000000000..8b2a8a9905 --- /dev/null +++ b/addons/metadata.album.universal/resources/settings.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<settings> + <category label="128"> + <setting type="lsep" label="General Settings"/> + <setting label="30002" type="labelenum" values="last.fm|amazon.de|None" id="albumreviewsource" default="last.fm"/> + <setting label="30003" type="labelenum" values="en|de|es|fr|it|jp|pl|pt|ru|sv|tr|zh" id="lastfmlanguage" default="en" visible="eq(-1,0)"/> + <setting type="sep"/> + <setting label="30004" type="labelenum" values="MusicBrainz|allmusic.com|None" id="albumratingsource" default="MusicBrainz"/> + <setting label="30005" type="labelenum" values="allmusic.com|None" id="albumstylessource" default="allmusic.com"/> + <setting label="30006" type="labelenum" values="allmusic.com|None" id="albummoodssource" default="allmusic.com"/> + <setting label="30007" type="labelenum" values="allmusic.com|None" id="albumthemessource" default="allmusic.com"/> + </category> + + <category label="30009"> + <setting type="lsep" label="Artwork Settings"/> + <setting label="30000" type="bool" id="fanarttvalbumthumbs" default="true"/> + <setting label="30001" type="bool" id="lastfmalbumthumbs" default="true"/> + <setting label="30008" type="bool" id="allmusicalbumthumbs" default="true"/> + </category> +</settings> diff --git a/addons/metadata.artists.universal/addon.xml b/addons/metadata.artists.universal/addon.xml new file mode 100644 index 0000000000..2d94544ae6 --- /dev/null +++ b/addons/metadata.artists.universal/addon.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<addon id="metadata.artists.universal" + name="Universal Artist Scraper" + version="2.0.6" + provider-name="Team XBMC"> + <requires> + <import addon="xbmc.metadata" version="1.0"/> + <import addon="metadata.common.last.fm" version="1.4.1"/> + <import addon="metadata.common.allmusic.com" version="2.4.1"/> + <import addon="metadata.common.musicbrainz.org" version="1.2.1"/> + <import addon="metadata.common.htbackdrops.com" version="1.2.0"/> + <import addon="metadata.common.fanart.tv" version="1.1.0"/> + </requires> + <extension point="xbmc.metadata.scraper.artists" + language="en" + library="artistuniversal.xml"/> + <extension point="xbmc.addon.metadata"> + <summary lang="en">Universal Scraper for Artists</summary> + <description lang="en">This scraper collects information from the following supported sites: MusicBrainz, last.fm, and allmusic.com, while grabs artwork from: fanart.tv, htbackdrops.com, last.fm and allmusic.com. It can be set field by field that from which site you want that specific information. + +The initial search is always done on MusicBrainz. In case allmusic link is not added on the MusicBrainz site fields from allmusic.com cannot be fetched (very easy to add those missing links though).</description> + <platform>all</platform> + </extension> +</addon> diff --git a/addons/metadata.artists.universal/artistuniversal.xml b/addons/metadata.artists.universal/artistuniversal.xml new file mode 100644 index 0000000000..ec474e1e70 --- /dev/null +++ b/addons/metadata.artists.universal/artistuniversal.xml @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scraper framework="1.1" date="2012-05-28"> + <NfoUrl dest="3"> + <RegExp input="$$1" output="<url>http://www.musicbrainz.org/ws/2/artist/\1?inc=url-rels</url>" dest="3"> + <expression>http://musicbrainz.org/artist/(.+)</expression> + </RegExp> + </NfoUrl> + <CreateArtistSearchUrl dest="3"> + <RegExp input="$$1" output="<url>http://search.musicbrainz.org/ws/2/artist/?fmt=xml&query=artist:"$$4"&limit=100</url>" dest="3"> + <RegExp input="$$1" output="\1" dest="4"> + <expression noclean="1">(.+)</expression> + </RegExp> + <RegExp input="$$1" output="\1" dest="6"> + <expression noclean="1">(.+)(?:Ft%2e|Feat%2e|Ft.|Feat.|%20and%20)</expression> + </RegExp> + <RegExp input="$$6" output="\1" dest="4"> + <expression>(.+)</expression> + </RegExp> + <expression/> + </RegExp> + </CreateArtistSearchUrl> + <GetArtistSearchResults dest="8"> + <RegExp input="$$5" output="<results>\1</results>" dest="8"> + <RegExp input="$$1" output="<entity><title>\2</title><genre>\7</genre><url cache="mb-\1-artist.xml">http://www.musicbrainz.org/ws/2/artist/\1?inc=url-rels</url></entity>" dest="9"> + <expression repeat="yes" noclean="1">artist ext:score="[^"]*"(?:\stype="[^"]*")* id="([^"]*)"><name>([^<]*)</name>(<sort-name>[^<]*</sort-name>)?(<gender>[^<]*</gender>)?(<country>[^<]*</country>)?(<disambiguation>([^<]*))?</expression> + </RegExp> + <RegExp input="$$9" output="\1" dest="5"> + <expression noclean="1">(.+)</expression> + </RegExp> + <expression noclean="1"/> + </RegExp> + </GetArtistSearchResults> + <GetArtistDetails dest="3" clearbuffers="no"> + <RegExp input="$$5" output="<details>\1</details>" dest="3"> + <!--MBID - Artist--> + <RegExp input="$$1" output="\1" dest="8"> + <expression noclean="1"><artist(?:\stype="[^"]*")* id="([^"]*)"><name>([^<]*)</expression> + </RegExp> + <!--AMGID - Artist--> + <RegExp input="$$1" output="\2" dest="9"> + <expression noclean="1">><relation type="allmusic"><target>http://(www.)?allmusic.com/artist/([^<]*)</expression> + </RegExp> + <RegExp input="$$8" conditional="fanarttvthumbs" output="<chain function="GetFanartTvArtistThumbsByMBID">\1</chain>" dest="5+"> + <expression/> + </RegExp> + <RegExp input="$$8" conditional="htbthumbs" output="<chain function="GetHTBThumbsByMBID">\1</chain>" dest="5+"> + <expression/> + </RegExp> + <RegExp input="$$8" conditional="lastfmartistthumbs" output="<chain function="GetLastFMArtistThumbsByMBID">\1</chain>" dest="5+"> + <expression/> + </RegExp> + <RegExp input="$$8" conditional="fanarttvfanart" output="<chain function="GetFanartTvArtistFanartsByMBID">\1</chain>" dest="5+"> + <expression/> + </RegExp> + <RegExp input="$$8" conditional="htbfanart" output="<chain function="GetHTBFanartByMBID">\1</chain>" dest="5+"> + <expression/> + </RegExp> + <RegExp input="$$9" output="<chain function="GetAMGData">\1</chain>" dest="5+"> + <expression noclean="1">(.+)</expression> + </RegExp> + <RegExp input="$$9" output="<chain function="AMGFallback">\1</chain>" dest="5+"> + <expression noclean="1">^$</expression> + </RegExp> + <RegExp input="$INFO[discogsource]" output="<chain function="GetMBDiscographyByMBID">$$8</chain>" dest="5+"> + <expression>MusicBrainz</expression> + </RegExp> + <RegExp input="$INFO[lifespansource]" output="<chain function="GetMBLafeSpanByMBID">$$8</chain>" dest="5+"> + <expression>MusicBrainz</expression> + </RegExp> + <RegExp input="$INFO[biogsource]" output="<chain function="GetLastFMBiographyByMBID">$$8</chain>" dest="5+"> + <expression>last.fm</expression> + </RegExp> + <RegExp input="$INFO[discogsource]" output="<chain function="GetLastFMDiscographyByMBID">$$8</chain>" dest="5+"> + <expression>last.fm</expression> + </RegExp> + <RegExp input="$INFO[genressource]" output="<chain function="GetLastFMArtistGenresByMBID">$$8</chain>" dest="5+"> + <expression>last.fm</expression> + </RegExp> + <RegExp input="$INFO[stylessource]" output="<chain function="GetLastFMArtistStylesByMBID">$$8</chain>" dest="5+"> + <expression>last.fm</expression> + </RegExp> + <expression noclean="1"/> + </RegExp> + </GetArtistDetails> + + <GetAMGData dest="5" clearbuffers="no"> + <RegExp input="$$2" output="<details>\1</details>" dest="5"> + <RegExp input="$$1" output="\1" dest="9"> + <expression/> + </RegExp> + <RegExp input="" output="" dest="2"> + <expression /> + </RegExp> + <RegExp input="$INFO[discogsource]" output="<chain function="GetAMGDiscographyByAMGID">$$9</chain>" dest="2"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$INFO[lifespansource]" output="<chain function="GetAMGArtistLifeSpanByAMGID">$$9</chain>" dest="2+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$INFO[biogsource]" output="<chain function="GetAMGBiographyByAMGID">$$9</chain>" dest="2+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$INFO[genressource]" output="<chain function="GetAMGArtistGenresByAMGID">$$9</chain>" dest="2+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$INFO[stylessource]" output="<chain function="GetAMGArtistStylesByAMGID">$$9</chain>" dest="2+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$INFO[moodssource]" output="<chain function="GetAMGArtistMoodsByAMGID">$$9</chain>" dest="2+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$INFO[yearsasource]" output="<chain function="GetAMGArtistYearsActiveByAMGID">$$9</chain>" dest="2+"> + <expression>allmusic.com</expression> + </RegExp> + <RegExp input="$$9" conditional="allmusicartistthumbs" output="<chain function="GetAMGArtistThumbsByAMGID">\1</chain>" dest="2+"> + <expression/> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetAMGData> + + <AMGFallback dest="5" clearbuffers="no"> + <RegExp input="$$11" output="<details>\1</details>" dest="5"> + <RegExp input="$INFO[biogfbsource]" output="<chain function="GetLastFMBiographyByMBID">$$8</chain>" dest="11+"> + <expression>last.fm</expression> + </RegExp> + <RegExp input="$INFO[discogfbsource]" output="<chain function="GetLastFMDiscographyByMBID">$$8</chain>" dest="11+"> + <expression>last.fm</expression> + </RegExp> + <RegExp input="$INFO[discogfbsource]" output="<chain function="GetMBDiscographyByMBID">$$8</chain>" dest="11+"> + <expression>MusicBrainz</expression> + </RegExp> + <RegExp input="$INFO[genresfbsource]" output="<chain function="GetLastFMArtistGenresByMBID">$$8</chain>" dest="11+"> + <expression>last.fm</expression> + </RegExp> + <RegExp input="$INFO[stylesfbsource]" output="<chain function="GetLastFMArtistStylesByMBID">$$8</chain>" dest="11+"> + <expression>last.fm</expression> + </RegExp> + <RegExp input="$INFO[lifespanfbsource]" output="<chain function="GetMBLafeSpanByMBID">$$8</chain>" dest="11+"> + <expression>MusicBrainz</expression> + </RegExp> + <expression noclean="1" /> + </RegExp> + </AMGFallback> + +</scraper> diff --git a/addons/metadata.artists.universal/changelog.txt b/addons/metadata.artists.universal/changelog.txt new file mode 100644 index 0000000000..961ee0b989 --- /dev/null +++ b/addons/metadata.artists.universal/changelog.txt @@ -0,0 +1,37 @@ +[B]2.0.6[/B] +Fixed: accommodate new Frodo style URL encoding + +[B]2.0.5[/B] +Removed: '&' sign from artist splitter + +[B]2.0.4[/B] +Improved: further improve search results for artists with almost no data + +[B]2.0.3[/B] +Improved: search results are now return artists with almost no data + +[B]2.0.2[/B] +Fixed: artists won't find with 'and' in their name + +[B]2.0.1[/B] +Fixed: potential crashes due to infinite loop + +[B]2.0.0[/B] +Added: Fallback per field +Added: scraping in case of multiple artists (feat., ft., &, and) +Added: other improvements + +[B]1.2.1[/B] +Added: Enable all source for artwork by default + +[B]1.2.0[/B] +Added: extra options for Artist Biography + +[B]1.1.1[/B] +Added: handling of new format of allmusic link + +[B]1.1.0[/B] +Added: language setting for last.fm artist biography + +[B]1.0.0[/B] +Initial version
\ No newline at end of file diff --git a/addons/metadata.artists.universal/icon.png b/addons/metadata.artists.universal/icon.png Binary files differnew file mode 100644 index 0000000000..7c3d600dfc --- /dev/null +++ b/addons/metadata.artists.universal/icon.png diff --git a/addons/metadata.artists.universal/resources/language/English/strings.xml b/addons/metadata.artists.universal/resources/language/English/strings.xml new file mode 100644 index 0000000000..ae97b7900c --- /dev/null +++ b/addons/metadata.artists.universal/resources/language/English/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<strings> + <string id="30000">Enable Artist Fanarts from HTBackdrops.com</string> + <string id="30001">Enable Artist Thumbs from allmusic.com</string> + <string id="30002">Enable Artist Thumbs from last.fm</string> + <string id="30003">Enable Artist Thumbs from HTBackdrops.com</string> + <string id="30004">Enable Artist Fanarts from fanart.tv</string> + <string id="30005">Enable Artist Thumbs from fanart.tv</string> + <string id="30006">Get Artist Biography from</string> + <string id="30007">Artwork</string> + <string id="30008">Get Artist Discography from</string> + <string id="30009">Get Artist Genres from</string> + <string id="30010">Get Artist Styles from</string> + <string id="30011">Get Artist Life-Span from</string> + <string id="30012">Get Artist Moods from</string> + <string id="30014">Get Artist Years Active from</string> + <string id="30015"> Preferred Language</string> + <string id="30016">Fallback to Artist Biography from</string> + <string id="30017">Fallback to Artist Discography from</string> + <string id="30018">Fallback to Artist Genres from</string> + <string id="30019">Fallback to Artist Styles from</string> + <string id="30020">Fallback to Artist Life-Span from</string> + <string id="30021">Fallbacks</string> +</strings> diff --git a/addons/metadata.artists.universal/resources/settings.xml b/addons/metadata.artists.universal/resources/settings.xml new file mode 100644 index 0000000000..c91d6c548a --- /dev/null +++ b/addons/metadata.artists.universal/resources/settings.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<settings> + <category label="128"> + <setting label="30006" type="labelenum" values="last.fm|None" id="biogsource" default="last.fm"/> + <setting label="30015" type="labelenum" values="en|de|es|fr|it|jp|pl|pt|ru|sv|tr|zh" id="lastfmlanguage" default="en" visible="eq(-1,0)"/> + <setting type="sep"/> + <setting label="30008" type="labelenum" values="last.fm|MusicBrainz|allmusic.com|None" id="discogsource" default="MusicBrainz"/> + <setting type="sep"/> + <setting label="30009" type="labelenum" values="last.fm|allmusic.com|None" id="genressource" default="last.fm"/> + <setting label="30010" type="labelenum" values="last.fm|allmusic.com|None" id="stylessource" default="last.fm"/> + <setting label="30011" type="labelenum" values="allmusic.com|MusicBrainz|None" id="lifespansource" default="allmusic.com"/> + <setting label="30012" type="labelenum" values="allmusic.com|None" id="moodssource" default="allmusic.com"/> + <setting label="30014" type="labelenum" values="allmusic.com|None" id="yearsasource" default="allmusic.com"/> + </category> + + <category label="30021"> + <setting label="30016" type="labelenum" values="last.fm|None" id="biogfbsource" default="None"/> + <setting label="30015" type="labelenum" values="en|de|es|fr|it|jp|pl|pt|ru|sv|tr|zh" id="lastfmlanguage" default="en" visible="eq(-1,0)"/> + <setting type="sep"/> + <setting label="30017" type="labelenum" values="last.fm|MusicBrainz|None" id="discogfbsource" default="None" visible="false"/> + <setting label="30018" type="labelenum" values="last.fm|allmusic.com|None" id="genresfbsource" default="None"/> + <setting label="30019" type="labelenum" values="last.fm|allmusic.com|None" id="stylesfbsource" default="None"/> + <setting label="30020" type="labelenum" values="MusicBrainz|allmusic.com|None" id="lifespanfbsource" default="None"/> + </category> + + <category label="30007"> + <setting type="lsep" label="Thumb Sources"/> + <setting label="30005" type="bool" id="fanarttvthumbs" default="true"/> + <setting label="30003" type="bool" id="htbthumbs" default="true"/> + <setting label="30002" type="bool" id="lastfmartistthumbs" default="true"/> + <setting label="30001" type="bool" id="allmusicartistthumbs" default="true"/> + <setting type="lsep" label="Fanart Sources"/> + <setting label="30004" type="bool" id="fanarttvfanart" default="true"/> + <setting label="30000" type="bool" id="htbfanart" default="true"/> + </category> + +</settings> diff --git a/addons/metadata.musicvideos.last.fm/addon.xml b/addons/metadata.musicvideos.last.fm/addon.xml new file mode 100644 index 0000000000..b687aa98a3 --- /dev/null +++ b/addons/metadata.musicvideos.last.fm/addon.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<addon id="metadata.musicvideos.last.fm" + name="Last.fm for Music Videos" + version="1.0.0" + provider-name="Team XBMC"> + <requires> + <import addon="xbmc.metadata" version="1.0"/> + <import addon="metadata.common.last.fm" version="1.3.2"/> + <import addon="metadata.common.fanart.tv" version="1.0.1"/> + </requires> + <extension point="xbmc.metadata.scraper.musicvideos" + language="en" + library="lastfmmusicvideos.xml"/> + <extension point="xbmc.addon.metadata"> + <summary lang="bg">Сваля инф. за музикални клипове от Last.fm</summary> + <summary lang="en">Last.fm Music Video Scraper</summary> + <summary lang="fi">Last.fm musiikkivideotietojen lataaja</summary> + <summary lang="hu">Last.fm videóklip leolvasó</summary> + <summary lang="kr">야후! 뮤직 비디오 스크래퍼</summary> + <summary lang="pl">Scraper teledysków Last.fm</summary> + <summary lang="pt">Scraper de música Last.fm</summary> + <summary lang="se">Skrapa för Last.fm musik</summary> + <description lang="bg">Сваля информация за музикални клипове</description> + <description lang="en">Download Music Video information</description> + <description lang="fi">Lataa musiikkivideoiden tiedot</description> + <description lang="hu">Videóklip információk letöltése a Last.fm webhelyről</description> + <description lang="kr">뮤직 비디오 정보 다운로드</description> + <description lang="pl">Pobieraj informacje o teledyskach z last.fm</description> + <description lang="pt">Descarregar informação de filmes de last.fm</description> + <description lang="se">Ladda ner musikvideoinformation från last.fm</description> + </extension> +</addon> diff --git a/addons/metadata.musicvideos.last.fm/icon.png b/addons/metadata.musicvideos.last.fm/icon.png Binary files differnew file mode 100644 index 0000000000..b253ec5897 --- /dev/null +++ b/addons/metadata.musicvideos.last.fm/icon.png diff --git a/addons/metadata.musicvideos.last.fm/lastfmmusicvideos.xml b/addons/metadata.musicvideos.last.fm/lastfmmusicvideos.xml new file mode 100644 index 0000000000..64d58e73e1 --- /dev/null +++ b/addons/metadata.musicvideos.last.fm/lastfmmusicvideos.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scraper framework="1.1" date="2012-06-10"> + <CreateSearchUrl dest="3"> + <RegExp input="$$1" output="<url cache="lastfmm-\2.xml">http://ws.audioscrobbler.com/2.0/?method=track.getinfo&api_key=71e468a84c1f40d4991ddccc46e40f1b&artist=\1&track=\2</url>" dest="3"> + <expression trim="1,2">(.+)%20%20%20(.+)</expression> + </RegExp> + </CreateSearchUrl> + <GetSearchResults dest="3"> + <RegExp input="$$5" output="<results>\1</results>" dest="3"> + <RegExp input="$$1" output="\1" dest="6"> + <expression></id>\s*<name>([^<]*).*?<artist>\s*<name>([^<]*)</expression> + </RegExp> + <RegExp input="$$1" output="\2" dest="7"> + <expression></id>\s*<name>([^<]*).*?<artist>\s*<name>([^<]*)</expression> + </RegExp> + <RegExp input="$$1" output="<entity><title>$$7 - $$6</title><url cache="lastfmm-\1.xml">http://ws.audioscrobbler.com/2.0/?method=track.getinfo&api_key=71e468a84c1f40d4991ddccc46e40f1b&artist=\2&track=\1</url></entity>" dest="5"> + <expression encode="1,2"></id>\s*<name>([^<]*).*?<artist>\s*<name>([^<]*)</expression> + </RegExp> + <expression noclean="1" /> + </RegExp> + </GetSearchResults> + <GetDetails dest="3"> + <RegExp input="$$5" output="<details>\1</details>" dest="3"> + <RegExp input="$$1" output="\1" dest="4"> + <expression></title>\s*<mbid>([^<]*)<</expression> + </RegExp> + <RegExp input="$$1" output="\1" dest="7"> + <expression><album[^>]*>\s*<artist>\s*[^<]*</artist>\s*<title>([^<]*)</title></expression> + </RegExp> + <RegExp input="$$1" output="\1" dest="8"> + <expression><artist>\s*<name>([^<]*)<</expression> + </RegExp> + <RegExp input="$$1" output="<title>\1</title>" dest="5"> + <expression><name>([^<]*)<</expression> + </RegExp> + <RegExp input="$$8" output="<artist>\1</artist>" dest="5+"> + <expression noclean="1" /> + </RegExp> + <RegExp input="$$7" output="<album>\1</album>" dest="5+"> + <expression noclean="1" /> + </RegExp> + <RegExp input="$$4" output="<chain function="GetLastFMAlbumDateByAlbumAndArtist">$$7::$$8::$$7::$$8</chain>" dest="5+"> + <expression noclean="1" /> + </RegExp> + <RegExp input="$$1" output="<plot>\1</plot>" dest="5+"> + <expression fixchars="1"><content><!\[CDATA\[(.*?)(User-|\]\])</expression> + </RegExp> + <RegExp input="$$1" output="<genre>\1</genre>" dest="5+"> + <expression repeat="yes"><tag>\s*<name>([^<]*)</name></expression> + </RegExp> + <RegExp conditional="lastfmalbumthumbs" input="$$1" output="<thumb>\1</thumb>" dest="5+"> + <expression><image size="extralarge">\s*([^<]*)\s*</image></expression> + </RegExp> + <RegExp conditional="fanarttvalbumthumbs" input="$$1" output="<chain function="GetFanartTvAlbumThumbsByMBID">$$4</chain>" dest="5+"> + <expression noclean="1">(.+)</expression> + </RegExp> + <RegExp conditional="lastfmalbumthumbs" input="$$1" output="<chain function="GetLastFMAlbumThumbs">$$7::$$8::$$7::$$8</chain>" dest="5+"> + <expression noclean="1" /> + </RegExp> + <expression noclean="1"/> + </RegExp> + </GetDetails> +</scraper> diff --git a/addons/metadata.musicvideos.last.fm/resources/language/English/strings.xml b/addons/metadata.musicvideos.last.fm/resources/language/English/strings.xml new file mode 100644 index 0000000000..acb2b4fd1a --- /dev/null +++ b/addons/metadata.musicvideos.last.fm/resources/language/English/strings.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<strings> + <string id="30000">Grab album thumbs from fanart.tv</string> + <string id="30001">Grab album thumbs from Last.fm</string> +</strings> diff --git a/addons/metadata.musicvideos.last.fm/resources/settings.xml b/addons/metadata.musicvideos.last.fm/resources/settings.xml new file mode 100644 index 0000000000..403462073b --- /dev/null +++ b/addons/metadata.musicvideos.last.fm/resources/settings.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<settings> + <setting label="30000" type="bool" id="fanarttvalbumthumbs" default="true"/> + <setting label="30001" type="bool" id="lastfmalbumthumbs" default="true"/> +</settings> |