Exemplo n.º 1
0
	def get_MB_releases(self):

		if self.is_audio_cd:
			try:
				from musicbrainzngs import musicbrainz, ResponseError, NetworkError
			except ImportError as imperr:
				print "musicbrainzngs not available"
				self.error = (100, "Import error: musicbrainzngs not available", imperr)
				raise

			disc_id = self.get_MB_disc_id()

			"""MBhost = "mm.musicbrainz.org"
	 		query = urllib.urlencode({
            			"id": disc_id,
            			"toc": " ".join([str(value) for value in self.__MB_full_toc]),
            			"tracks": self.num_tracks,
       				})
			print urlparse.urlunparse(("http", MBhost, "/bare/cdlookup.html", "", query, ""))"""

			try:
				musicbrainz.set_useragent("xaudiocopy", "0.02.1")
			except:
				print "MusicBrainz user agent error"
				self.error = (101, "MusicBrainz user agent error", "")
				raise
			# Scarica le release del disco in base al Disc ID
			try:
				releases = musicbrainz.get_releases_by_discid(disc_id, 
					includes=["artists", "recordings", "release-groups", "labels"])
			except ResponseError as reserr:
				if reserr.cause.code == 404:
					print "Disc not found.", reserr
					self.error = (int(reserr.cause.code), "Disc not found.", reserr)
					raise
				elif reserr.cause.code == 400:
					print "Bad request to the MusicBrainz server.", reserr
					self.error = (400, "Bad response from the MB server.", reserr)
					raise
				else:
					print "Bad response from the MusicBrainz server.", reserr
					self.error = (int(reserr.cause.code), "Bad response from the MB server.", reserr)
					raise
			except NetworkError as neterr:
				print "Network connection error.", neterr
				self.error = (402, "Network connection error.", neterr)
				raise
				""" Eccezione non gestita nella versione 0.2 di musicbrainzngs
			except AuthenticationError as auterr:
				print "Receved a HTTP 401 response while accessing a protected resource."
				self.error = (auterr, "Receved a HTTP 401 response while accessing a protected resource.", auterr)		
				raise"""
			i = 0
			# Lista che contiene tutte le release
			MB_releases = []

			for release in releases['disc']['release-list']:
				#res = musicbrainz.get_release_by_id(release['id'],
            			#	includes=["artists", "artist-credits", "recordings", "discids"])
				
				# Dizionario che contiene le informazioni di ogni release
				MB_release = {
					"artist" : "",
					"album-title" : "",
					"album-id" : "",
					"barcode" : "",
					"catalog" : [],
					"packaging" : "",
					"date" : "",
					"country" : "",
					"disc-id" : disc_id,
				}

				# Artista
				if release.get("artist-credit-phrase"):
					MB_release["artist"] = release["artist-credit-phrase"]
				# Titolo
				if release.get("title"):
					MB_release["album-title"] = release["title"]
				# MusicBrainz ID
				if release.get("id"):
					MB_release["album-id"] = release["id"]
				# Codice a barre EAN/UPC
				if release.get("barcode"):
					MB_release["barcode"] = release["barcode"]
				# Label e numero di catalogo (dizionari in una lista)
				if release.get("label-info-list"):
					for info in release["label-info-list"]:
						catalog = {"label" : "", "catalog-number" : ""}
						if info.get("label"):
							catalog["label"] = info["label"]["name"]
						if info.get("catalog-number"):
							catalog["catalog-number"] = info["catalog-number"]
						MB_release["catalog"].append(catalog)
				else:
					MB_release["catalog"].append({"label" : "", "catalog-number" : ""})
				# Packaging
				if release.get("packaging"):
					MB_release["packaging"] = release["packaging"]
				# Data
				if release.get("date"):
					MB_release["date"] = release["date"]
				# Nazione
				if release.get("country"):
					MB_release["country"] = release["country"]

				# Aggiunge la release alla lista
				MB_releases.append(MB_release)

			# Stampa di prova
			for rel in MB_releases:
				i+=1
				print
				print "RELEASE %d" % i
				keys = rel.keys()
				for k in keys:
					print '%s = %s' % (k,rel[k])
				 				
			return MB_releases
		else:
			return None
Exemplo n.º 2
0
	def get_MB_tracks_from_release(self, MB_release):
			
		try:
			from musicbrainzngs import musicbrainz, ResponseError, NetworkError
		except ImportError as imperr:
			print "musicbrainzngs not available"
			self.error = ("100", "Import error", imperr)
			raise
			
		try:
			musicbrainz.set_useragent("xaudiocopy", "0.02.1")
		except:
			self.error(101, "User agent error", "")
			raise
		# Scarica la release del disco in base all'ID
		try:
			release = musicbrainz.get_release_by_id(MB_release["album-id"], 
				includes=["artists", "recordings", "release-groups", "labels"])
		except ResponseError as reserr:
			if reserr.cause.code == 404:
				print "Disc not found", reserr
				self.error = (int(reserr.cause.code), "Disc not found", reserr)
				raise
			else:
				print "Bad response from the MB server", reserr
				self.error = (int(reserr.cause.code), "Bad response from the MB server", reserr)
				raise
		except NetworkError as neterr:
			print "Network connection error", neterr
			self.error = (402, "Network connection error", neterr)
			raise
			""" Eccezione non gestita nella versione 0.2 di musicbrainzngs
		except AuthenticationError as auterr:
			print "Receved a HTTP 401 response while accessing a protected resource"
			self.error = (auterr, "Receved a HTTP 401 response while accessing a protected resource", auterr)		
			raise"""
		print release
		
		# La release è un dict con dentro un altro dict "release"
		# TODO Esistono release che hanno altri elementi?
		release = release["release"]

		tracks_list = []
		# Per ogni disco presente (se presente) trova quello giusto
		if release["id"] == MB_release["album-id"]:
			for medium in release["medium-list"]:
				for track in medium["track-list"]:
					# Dizionario con i tag della canzone
					self.track = {
						"track-number" : int(track["position"]),
						"title" : track["recording"]["title"],
						"artist" : release["artist-credit"][0]["artist"]["name"],
						"artist-sort-name" : release["artist-credit"][0]["artist"]["sort-name"],
						"album" : release["title"],
						"recording-id" : track["recording"]["id"],
						"album-id" : release["id"],
						"artist-id" : release["artist-credit"][0]["artist"]["id"],
						#"lenght" : track["recording"]["lenght"],
						"release" : MB_release,
						}
					tracks_list.append(self.track)
				
		# Stampa di prova
		i = 0
		for t in tracks_list:
			i+=1
			print
			print "TRACK %d" % i
			keys = t.keys()
			for k in keys:
				print '%s = %s' % (k,t[k])

		return tracks_list
Exemplo n.º 3
0
import requests_cache
from musicbrainzngs import musicbrainz as mb
from requests.adapters import HTTPAdapter

mb.set_useragent('trompa', '0.1')


session = requests_cache.CachedSession()
adapter = HTTPAdapter(max_retries=5)
session.mount("https://", adapter)
session.mount("http://", adapter)


VIAF_REL = 'e8571dcc-35d4-4e91-a577-a3382fd84460'
WIKIDATA_REL = '689870a4-a1e4-4912-b17f-7b2664215698'
IMSLP_REL = '8147b6a2-ad14-4ce7-8f0a-697f9a31f68f'

# Indicates that an artist gwas the composer of a work
COMPOSER_REL = 'd59d99ea-23d4-4a80-b066-edca32ee158f'
# Indicates that a work is a subpart of another work
PARTS_REL = 'ca8d3642-ce5f-49f8-91f2-125d72524e6a'


def get_artist_from_musicbrainz(artist_mbid):
    """
    """
    artist = mb.get_artist_by_id(artist_mbid, includes=['artist-rels'])['artist']

    return artist

Exemplo n.º 4
0
import userprefs
import utils
import extradata
import shutil
from datetime import datetime
from collections import defaultdict
import progressbar
import logging
logging.basicConfig(level=logging.INFO)

overWriteAll = False

# Have to give an identity for musicbrainzngs
mb.set_useragent(
    "python-musicbrainz-ngs-catalog",
    "0.1",
    "https://github.com/rlhelinski/musicbrainz-catalog/",
)

# Get the XML parsing exceptions to catch. The behavior chnaged with Python 2.7
# and ElementTree 1.3.
import xml.etree.ElementTree as etree
from xml.parsers import expat
if hasattr(etree, 'ParseError'):
    ETREE_EXCEPTIONS = (etree.ParseError, expat.ExpatError)
else:
    ETREE_EXCEPTIONS = (expat.ExpatError)

def releaseSortCmp(a, b):
    return unicode.lower(a[1]) < unicode.lower(b[1])
Exemplo n.º 5
0
    logger.info("Using Plex backend.")
    plex = PlexServer(settings['backends']['plex']['server_address'], settings['backends']['plex']['server_token'])
    music = plex.library.section(settings['backends']['plex']['music_library_section'])
    settings['musicLibrary'] = music.locations[0]

    logger.debug("Starting plex alert listener.")
    # plex.startAlertListener(listen)  # TODO Fix alert listener

# Login manager configuration
logger.debug("Creating login manager.")
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'users.login'

logger.debug("Setting musicbrainz useragent.")
musicbrainz.set_useragent('Plex Music Viewer', '0.1',
                          'https://github.com/JakeStanger/Plex-Music-Viewer')  # TODO Proper version management


@app.errorhandler(404)
def page_not_found(e, custom_message=None):
    logger.debug("Throwing error 404 (%s)" % custom_message or e)
    return render_template('error.html', code=str(404), message=custom_message or e)


app.jinja_env.globals.update(throw_error=throw_error)


# Support login via API
@login_manager.request_loader
def request_loader(req):
    # Attempt login via URL arg
Exemplo n.º 6
0
 def setUp(self):
     self.orig_opener = musicbrainzngs.compat.build_opener
     musicbrainz.set_useragent("test_client", "1.0")
     musicbrainz.auth("user", "password")
Exemplo n.º 7
0
 def __init__(self, cache, interact):
     DataProvider.__init__(self, ['artist', 'album'], cache, None, interact)
     mb.set_useragent('whatlastgenre', __version__,
                      'http://github.com/YetAnotherNerd/whatlastgenre')