Moduuli:Imdb
Ulkoasu
[ muokkaa ] Tämä moduuli vertailee sitä onko Wikidatasta löytyvä IMDB-arvo sama kuin parametrina saatu IMDB-arvo.
Moduulia käytetään seuraavissa mallineissa: Tätä moduulia käyttävien mallineiden seurantaluokat |
local p = {}
-- Parametrit
-- * imdb_1 = Wikipediassa käytetty imdb-arvo
-- * imdb_2 = Wikidatassa käytetty imdb-arvo
-- * teksti joka palautetaan jos arvot ovat samoja (vakiona 1)
-- * teksti joka palautetaan jos arvot eroavat (vakiona 0)
-- Mikäli imdb_1 tai imdb_2 ovat tyhjiä niin funktio palauttaa tyhjän tekstijonon.
function p.testImdbWikidataValue(frame)
local new_args = p._getParameters( frame.args, { 'imdb_1', 'imdb_2', 'ret_1_str', 'ret_2_str'} );
local imdb_1 = new_args['imdb_1'] or '';
local imdb_2 = new_args['imdb_2'] or '';
local ret_1_str = new_args['ret_1_str'] or '1';
local ret_2_str = new_args['ret_2_str'] or '0';
local imdb_1_len=mw.ustring.len(imdb_1);
local imdb_2_len=mw.ustring.len(imdb_2);
-- Tyhjän parametrin sisällön pituus näyttää olevan 1-merkkiä
if (imdb_1_len < 2 or imdb_2_len < 2 ) then
return ""
end
local imdb_1_prefix=mw.ustring.sub( imdb_1, 0, 2 )
local imdb_2_prefix=mw.ustring.sub( imdb_2, 0, 2 )
-- Poistetaan vertailusta etuliitteet.
-- tämä voi aiheuttaa tt123 == nm123 virheen,
-- mutta se on niin harvinainen ettei se tarkistuksessa haittaa
if (imdb_1_len>3 and (imdb_1_prefix == 'tt' or imdb_1_prefix == 'nm')) then
imdb_1=mw.ustring.sub(imdb_1, 3, (imdb_1_len))
end
if (imdb_2_len>3 and (imdb_2_prefix == 'tt' or imdb_2_prefix == 'nm') ) then
imdb_2=mw.ustring.sub(imdb_2, 3, (imdb_2_len))
end
imdb_1=tonumber(imdb_1)
imdb_2=tonumber(imdb_2)
if (imdb_1==imdb_2) then
return ret_1_str
else
return ret_2_str
end
end
-- Hakee Wikidatasta IMDb arvon (P345)
function p.getImdb(frame)
local entity = mw.wikibase.getEntityObject()
if type(entity) == 'nil' then
return "Unknown entity"
elseif type(entity.claims) == 'nil' then
return "Claims not found"
elseif type(entity.claims.P345) == 'nil' then
return "Nil value for P345"
elseif type(entity.claims.P345[1]) == 'nil' then
return "Nil value for P345[1]"
end
return entity.claims.P345[1].mainsnak.datavalue.value
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function p._getParameters( frame_args, arg_list )
local new_args = {};
local index = 1;
local value;
for i,arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index];
index = index + 1;
end
new_args[arg] = value;
end
return new_args;
end
-- Tulostaa muuttujan sisällön muotoilemattomana json:na.
function p.dump(o)
if type(o) == 'table' then
local s = '{ '
for k,v in pairs(o) do
if type(k) ~= 'number' then k = '"'..k..'"' end
if type(v) == 'nil' then k = '"'..tostring(k)..'"' end
s = s .. '['..k..'] = ' .. p.dump(v) .. ','
end
return s .. '}'
else
return tostring(o)
end
end
return p