Questa pagina è protetta dallo spostamento
Questa pagina è protetta

Modulo:Cita siti musicali: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
per Allmusic il nome della class è spesso ricavabile dall'id
Riga 35: Riga 35:
end
end
else
else
class = '' --se "class" è nil e non è recuperabile da Wikidata la funzione format() darà errore
for try_class, property in pairs(class_type) do
for try_class, property in pairs(class_type) do
local try_id = mWikidata._getProperty({ property })
local try_id = mWikidata._getProperty({ property })
Riga 44: Riga 43:
class = try_class
class = try_class
break
break
end
end
if not is_defined(class) then --se "class" non è ancora definito, cerca di ricavarlo dal nome dell'id
if string.find(id, 'mn%d') or string.find(id, 'p%d') then class = class_type[0]
elseif string.find(id, 'mw%d') or string.find(id, 'r%d') then class = class_type[1]
elseif string.find(id, 'mt%d') or string.find(id, 't%d') then class = class_type[2]
--se l'id inizia con "ma", class può essere composition, style, genre, ecc.
else class = ''
end
end
end
end

Versione delle 13:41, 23 mag 2016

Modulo a supporto dei template {{Allmusic}}, {{Discogs}}, {{MusicBrainz}}, {{SecondHandSongs}} e {{Metal Archives}}.


local p = {}

--require('Module:No globals')
local mWikidata = require('Modulo:Wikidata')
local getArgs = require('Module:Arguments').getArgs
local mCitazione = require( "Modulo:Citazione/sandbox" )

local function is_defined(s)
	if s and s ~= '' then
		return s
	end
	return false
end

--[[ ===============================================================================
Dati i parametri class, id e tab ritorna l'url di un artista od opera su Allmusic
- class = uno delle chiavi di class_type, indica se si vuole un artista o un'opera
- id = l'id dell'artista o opera su Allmusic
- tab = una sottopagina dell'url (opzionale)

Se class o id non sono definiti tenta di recuperare l'informazione da wikidata 
supponendo che si voglia la pagina di allmusic relativa alla voce in cui ci si trova
	===============================================================================]]
local function allmusic_get_url(class, id, tab)
	local class_type = {
		['artist'] = 'P1728',
		['album'] = 'P1729',
		['song'] = 'P1730',
		['composition'] = 'P1994',
	}
	class = class and string.lower(class)
	if is_defined(class) then
		if not is_defined(id) and class_type[class] then  
			id = mWikidata._getProperty({ class_type[class] })
		end
	else
		for try_class, property in pairs(class_type) do
			local try_id = mWikidata._getProperty({ property })
			if try_id and try_id ~= '' then
				if not is_defined(id) then
					id = try_id
				end
				class = try_class
				break
			end
		end
		if not is_defined(class) then		--se "class" non è ancora definito, cerca di ricavarlo dal nome dell'id
			if string.find(id, 'mn%d') or string.find(id, 'p%d') then class = class_type[0]
			elseif string.find(id, 'mw%d') or string.find(id, 'r%d') then class = class_type[1]
			elseif string.find(id, 'mt%d') or string.find(id, 't%d') then class = class_type[2]
			--se l'id inizia con "ma", class può essere composition, style, genre, ecc.
			else class = ''
			end
		end
	end
	if not id or id=='' then return '' end
	if is_defined(tab) then
		return mw.ustring.format('http://www.allmusic.com/%s/%s/%s', class, id, tab)
	else
		return mw.ustring.format('http://www.allmusic.com/%s/%s', class, id)
	end
end

--[[ ===============================================================================
Funzione di interfaccia per ritornare solo l'url per Allmusic
	===============================================================================]]
function p.Allmusic_url(frame)
	local args = getArgs(frame)
	return allmusic_get_url(args.class or args[1], args.id or args[2] or args.ID, args.tab)
end

--[[ ===============================================================================
Dati i parametri class e id ritorna l'url di un artista od opera su Discogs
- class = uno delle chiavi di class_type, indica se si vuole un artista o un'opera
- id = l'id dell'artista o opera su Discogs

Se class o id non sono definiti tenta di recuperare l'informazione da wikidata 
supponendo che si voglia la pagina di allmusic relativa alla voce in cui ci si trova
	===============================================================================]]
local function discogs_get_url(class, id)
	local class_type = {
		['artist'] = 'P1953',
		['label'] = 'P1955',
		['master'] = 'P1954',
		['release'] = 'P2206',
	}
	class = class and string.lower(class)
	if is_defined(class) then
		if not is_defined(id) and class_type[class] then 
			id = mWikidata._getProperty({ class_type[class] })
		end
	else
		class = ''		--se "class" è nil e non è recuperabile da Wikidata la funzione format() darà errore
		for try_class, property in pairs(class_type) do
			local try_id = mWikidata._getProperty({ property })
			if try_id and try_id ~= '' then
				if not is_defined(id) then
					id = try_id
				end
				class = try_class
				break
			end
		end
	end
	if not id or id=='' then return '' end
	return mw.ustring.format('http://www.discogs.com/%s/%s', class, id)
end

--[[ ===============================================================================
Funzione di interfaccia per ritornare solo l'url per Discogs
	===============================================================================]]
function p.Discogs_url(frame)
	local args = getArgs(frame)
	return discogs_get_url(args.class or args[1], args.ID or args[2] or args.id)
end

--[[ ===============================================================================
Dati i parametri tipo e id ritorna l'url di un artista od opera su MusicBrainz
- tipo = uno delle chiavi di class_type, indica se si vuole un artista o un'opera
- id = l'id dell'artista o opera su MusicBrainz

Se tipo o id non sono definiti tenta di recuperare l'informazione da wikidata 
supponendo che si voglia la pagina di allmusic relativa alla voce in cui ci si trova
	===============================================================================]]
local function musicbrainz_get_url(tipo, id)
	local class_type = {
		['artist'] = 'P434',
		['album'] = 'P436',
	}
	local label = {
		['artist'] = 'artist',
		['album'] = 'release-group',
	}
	tipo = tipo and string.lower(tipo)
	if is_defined(tipo) then
		if not is_defined(id) and class_type[tipo] then 
			id = mWikidata._getProperty({ class_type[tipo] })
		end
	else
		class = ''		--se "class" è nil e non è recuperabile da Wikidata la funzione format() darà errore
		for try_tipo, property in pairs(class_type) do
			local try_id = mWikidata._getProperty({ property })
			if try_id and try_id ~= '' then
				if not is_defined(id) then
					id = try_id
				end
				tipo = try_tipo
				break
			end
		end
	end
	if not id or id=='' then return '' end
	return mw.ustring.format('http://www.musicbrainz.org/%s/%s', label[tipo], id)
end

--[[ ===============================================================================
Funzione di interfaccia per ritornare solo l'url per MusicBrainz
	===============================================================================]]
function p.MusicBrainz_url(frame)
	local args = getArgs(frame)
	return musicbrainz_get_url(args.tipo or args[1], args.ID or args[2] or args.id)
end

--[[ ===============================================================================
La funzione controllo_duplicati() ritorna un'eventuale categoria di errore per tracciare le voci le cui schede di Wikidata contengono ID multipli o duplicati
fra i quali nessuno è classificato come 'preferito'
	===============================================================================]]
local function controllo_duplicati_aux(properties)
	for i, property in ipairs(properties) do
		local id = mWikidata._getProperty({ property })
		if is_defined(id) then
			if string.find(id, ' e ') then return '[[Categoria:Voci musicali con ID multipli o duplicati]]'
			else return '' end
		end
	end
	return ''
end

function p.controllo_duplicati(frame)
	return controllo_duplicati_aux({ 'P1728', 'P1729', 'P1730', 'P1994' })
		.. controllo_duplicati_aux({ 'P1953', 'P1955', 'P1954', 'P2206' })
		.. controllo_duplicati_aux({ 'P434', 'P436' })
end

return p