Modulo:Cita siti musicali
Aspetto
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Cita siti musicali/man (modifica · cronologia)
Sandbox: Modulo:Cita siti musicali/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Cita siti musicali/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Cita siti musicali/man (modifica · cronologia)
Sandbox: Modulo:Cita siti musicali/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Cita siti musicali/test (modifica · cronologia · Esegui)
Modulo a supporto dei template {{Allmusic}}, {{Discogs}}, {{MusicBrainz}}, {{SecondHandSongs}} e {{Metal Archives}}.
require('strict')
local getArgs = require('Modulo:Arguments').getArgs
local mWikidata = require('Modulo:Wikidata')
local mCitazione = require('Modulo:Citazione')
local p = {}
--[[ ===============================================================================
Funzione di utilità che restituisce class e id se non specificati:
* se class è specificato e id è nullo: ottiene id dalla proprietà Wikidata relativa a quel class.
* se class è nullo verifica una serie di proprietà Wikidata e restituisce
il valore (e il class corrispondente) della prima proprietà presente.
===============================================================================]]
local function getClassAndId(class, id, class_type)
if class then
class = string.lower(class)
if not id and class_type[class] then
id = mWikidata._getProperty({ class_type[class], n = 1 })
end
else
for try_class, property in pairs(class_type) do
local try_id = mWikidata._getProperty({ property, n = 1 })
if try_id then
id = try_id
class = try_class
break
end
end
end
return class, id
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)
===============================================================================]]
function p.Allmusic_url(frame)
local class_type = {
artist = 'P1728',
album = 'P1729',
song = 'P1730',
composition = 'P1994'
}
local args = getArgs(frame)
local class, id = getClassAndId(args.class or args[1], args.id or args[2] or args.ID, class_type)
return (class and id) and
mw.ustring.format('http://www.allmusic.com/%s/%s%s', class, id, args.tab and ('/' .. args.tab) or '') or nil
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
===============================================================================]]
function p.Discogs_url(frame)
local class_type = {
artist = 'P1953',
label = 'P1955',
master = 'P1954',
release = 'P2206'
}
local args = getArgs(frame)
local class, id = getClassAndId(args.class or args[1], args.ID or args[2] or args.id, class_type)
return (class and id) and mw.ustring.format('https://www.discogs.com/it/%s/%s', class, id) or nil
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
===============================================================================]]
function p.MusicBrainz_url(frame)
local class_type = {
artist = 'P434',
work = 'P435',
album = 'P436',
label = 'P966'
}
local label = {
artist = 'artist',
album = 'release-group',
label = 'label',
work = 'work'
}
local args = getArgs(frame)
local tipo, id = getClassAndId(args.tipo or args[1], args.ID or args[2] or args.id, class_type)
return (label[tipo] and id) and mw.ustring.format('http://musicbrainz.org/%s/%s', label[tipo], id) or nil
end
--[[ ===============================================================================
Dati i parametri class e id ritorna l'url di un artista od opera su SecondHandSongs
- 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
===============================================================================]]
function p.SecondHandSongs_url(frame)
local class_type = {
work = 'P2908',
artist = 'P2909'
}
local args = getArgs(frame)
local class, id = getClassAndId(args.class or args[1], args.id or args[2], class_type)
return (class and id) and mw.ustring.format('http://secondhandsongs.com/%s/%s', class, id) or nil
end
--[[ ===============================================================================
Dati i parametri class e id ritorna l'url di un artista od opera su Metal Archives
- class = uno delle chiavi di class_type, indica se si vuole un artista, un gruppo o un'opera
- id = l'id dell'artista o opera su Metal Archives
===============================================================================]]
function p.MetalArchives_url(frame)
local class_type = {
artist = 'P1989',
band = 'P1952',
release = 'P2721'
}
local args = getArgs(frame)
local class, id = getClassAndId(args.class or args[1], args.id or args[2], class_type)
return (class and id) and mw.ustring.format('http://www.metal-archives.com/%s.php?id=%s', class, id) or nil
end
--[[ ===============================================================================
Ritorna un'eventuale categoria di errore per tracciare le voci i cui elementi Wikidata contengono
per una certa proprietà più dichiarazioni fra le quali nessuna è classificata come 'preferito'
===============================================================================]]
function p.controllo_duplicati(frame)
-- nome della categoria
local errorCategory = '[[Categoria:Voci musicali con ID multipli o duplicati]]'
-- proprietà da controllare
local properties = {
-- MusicBrainz artista, canzone, album, label
'P434', 'P435', 'P436', 'P966',
-- AllMusic artista, album, canzone e composizione
'P1728', 'P1729', 'P1730', 'P1994',
-- Discogs artista, master, etichetta, release
'P1953', 'P1954', 'P1955', 'P2206',
-- SecondHandSongs canzone e artista
'P2908', 'P2909',
-- MetalArchives opera, gruppo e artista
'P1989', 'P1952', 'P2721'
}
local ret = ''
for _, propertyId in ipairs(properties) do
if mWikidata._N({ propertyId }) > 1 then
ret = errorCategory
break
end
end
return ret
end
return p