Moduuli:Imdb

Wikipediasta
Siirry navigaatioon Siirry hakuun

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