Modulo:Cita siti musicali: differenze tra le versioni
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
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}}.
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