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
categoria per tracciare schede con id duplicati
mNessun oggetto della modifica
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 83: Riga 84:
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 129: Riga 131:
end
end
else
else
class = '' --se "class" è nil e non è recuperabile da Wikidata la funzione format() darà errore
for try_tipo, property in pairs(class_type) do
for try_tipo, property in pairs(class_type) do
local try_id = mWikidata._getProperty({ property })
local try_id = mWikidata._getProperty({ property })

Versione delle 13:18, 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
		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
	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