Modulo:DTSem: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
External formatter uri
mNessun oggetto della modifica
(External formatter uri)
 
(92 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
-- <nowiki>
--------------------------------------------------------------------------------
-- This module handles generic semantic functions to support modules
-- Comments are compatible with LDoc https://github.com/lunarmodules/ldoc
--
-- @module p
-- @author Luca Mauri [[Utente:Lucamauri]]
-- @keyword: wikitrek
-- Keyword: wikitrek
-- Keyword: wikitrek
--------------------------------------------------------------------------------
local p = {}
local p = {}


Riga 52: Riga 61:
return string.char(10) .. AllLabels
return string.char(10) .. AllLabels
end
end
--------------------------------------------------------------------------------
-- Take parameters out of the frame and pass them to p._buildUniversalIncipit().
-- Return the result.
--
-- @param {Frame} Info from MW session
-- @return {string} The full incipit wikitext
--------------------------------------------------------------------------------
function p.URIFromatterFromDT(frame)
local Item
local Type
Item = mw.wikibase.getEntity()
if not Item then
Item = mw.wikibase.getEntity(frame.args['Item'])
end
if not Item then
Item = mw.wikibase.getEntity('Q1')
end
if (not Item['claims']) or (not Item['claims']['P5']) then
return "ERROR"
else
Type = Item['claims']['P5'][1].mainsnak.datavalue.value
return "[[External formatter uri::" .. Type .. "|''" .. Type .. "'']]"
end
end
--------------------------------------------------------------------------------
-- Generic value parser from arbitrary Item and Property
-- Return the result.
--
-- @param {Item} The Entity
-- @param {Property} String containing the property identifier and number
-- @return {string} Value of the mainsnak
--------------------------------------------------------------------------------
function p.GenericFromDT(Item, Property)
if (not Item['claims']) or (not Item['claims'][Property]) then
return "ERROR"
else
return Item['claims'][Property][1].mainsnak.datavalue.value
end
end
--- Function to calculate the number of seasons of a series
--- Function to calculate the number of seasons of a series
--  
--  
Riga 58: Riga 111:
function p.SeasonsQty(ShortName)
function p.SeasonsQty(ShortName)
local QueryResult
local QueryResult
local Max
local Max = 0
local PrefixText
local PrefixText
Riga 72: Riga 125:
-- See https://github.com/SemanticMediaWiki/SemanticScribunto/blob/master/docs/mw.smw.ask.md#result
-- See https://github.com/SemanticMediaWiki/SemanticScribunto/blob/master/docs/mw.smw.ask.md#result
-- for return value example
-- for return value example
Max = QueryResult[1]["Stagione"]
     if QueryResult == nil or Max < 0 then
     if QueryResult == nil or Max < 0 then
         return 0
         return 0
     else
     else
    Max = QueryResult[1]["Stagione"]
     return Max
     return Max
     end
     end
Riga 81: Riga 134:
--- Function to extract recurring characters and list them
--- Function to extract recurring characters and list them
--  
--  
-- @param ShortName The short name of the series as in P24
-- @param frame Context from MediaWiki
-- @return Integer Number of seasons
-- @return String Bullet list of characters and episodes
function p.RecurringListFromCategory(frame)
function p.RecurringListFromCategory(frame)
local Results = {}
local Results = {}
Riga 88: Riga 141:
local CategoryText
local CategoryText
local Pages
local Pages
local PagesList = {}
local Series
local Series
local SeriesShort
local SeriesShort
Riga 101: Riga 155:
Series = mw.wikibase.getLabel(Item.claims['P16'][1].mainsnak.datavalue.value.id)
Series = mw.wikibase.getLabel(Item.claims['P16'][1].mainsnak.datavalue.value.id)
if ShortName == "Serie Classica" or ShortName == "Serie Animata" then
if SeriesShort == "Serie Classica" or SeriesShort == "Serie Animata" then
CategoryText = '[[Category:Personaggi della ' .. SeriesShort .. "]]"
CategoryText = '[[Category:Personaggi della ' .. SeriesShort .. "]]"
else
else
Riga 113: Riga 167:
if Pages == nil then
if Pages == nil then
         return "''Nessun risultato''"
         return "''Nessun risultato''"
     end
     else
    for _, Page in ipairs(Pages.results) do
    table.insert(PagesList, Page.fulltext)
    end
    return p.RecurringList(PagesList, Series)   
end
--return table.concat(Results, string.char(10))
end
--- Function to extract recurring characters from all pages and list them
--
-- @param frame Context from MediaWiki
-- @return String Bullet list of characters and episodes
function p.RecurringListFull(frame)
local Results = {}
local Item
local InstanceText
local Pages
local Series
local SeriesShort
local Characters = {}
local PagesList = {}
if not Item then
Item = mw.wikibase.getEntity(frame.args['Item'])
end
if not Item then
Item = mw.wikibase.getEntity('Q1')
end
SeriesShort = mw.wikibase.getEntity(Item.claims['P16'][1].mainsnak.datavalue.value.id).claims['P24'][1].mainsnak.datavalue.value
Series = mw.wikibase.getLabel(Item.claims['P16'][1].mainsnak.datavalue.value.id)
if SeriesShort == "Serie Classica" or SeriesShort == "Serie Originale" or SeriesShort == "Serie Animata" then
InstanceText = '[[Istanza::Episodio della ' .. SeriesShort .. "]]"
else
InstanceText = '[[Istanza::Episodio di ' .. SeriesShort .. "]]"
end
--[==[
Pages = mw.smw.ask(InstanceText .. "|?Personaggio|order=asc|sort=Numero di produzione")
if Pages == nil then
        return "''Nessun risultato'' (<code>" .. mw.text.nowiki(InstanceText) .. "</code>, )"
    else
    --local myResult = ""
        for num, row in pairs(Pages) do
            --myResult = myResult .. '* This is result #' .. num .. '\n'
            mw.smw.set("Test=" .. num)
            for property, data in pairs( row ) do
            if property == "Personaggio"  then
            if type(data) == 'table' then
            for _, Character in pairs(data) do
            if Characters[Character] == nil then
            --table.insert(Characters, Character)
            end
            end
            else
            -- This should never happens
            table.insert(Characters, "NEXT ONE ->")
            if Characters[data] == nil then
            table.insert(Characters, data)
            end
            end
            end
            end
        end
end
]==]
NewPages = mw.smw.getQueryResult(InstanceText .. "|?Personaggio|limit=500|order=asc|sort=Numero di produzione")
for _, Episode in ipairs(NewPages.results) do
for _, Character in ipairs(Episode.printouts.Personaggio) do
local CharText = Character.fulltext
if not Characters[CharText] then
table.insert(Characters, CharText)
Characters[CharText] = true
end
end
end


table.sort(Characters)
if type(Characters) == 'table' and Characters ~= nil then
for _, Page in ipairs(Characters) do
    table.insert(PagesList, Page)
    end
return p.RecurringList(PagesList, Series, 3)
--return #Characters .. " - " .. #Characters .. " - " .. table.concat(PagesList, ", ")
else
return "No table"
end
--return table.concat(Results, string.char(10))
end
--- Helper to extract recurring characters and list them
--
-- @param Pages Table containing characters' pages names
-- @param Series String with name of the Series
-- @param[opt=1] MinOccurr Integer with minimum value of occurencies
-- @return String Bullet list of characters and episodes
function p.RecurringList(Pages, Series, MinOccurr)
local Results = {}
if not MinOccurr or MinOccurr < 1 then
MinOccurr = 1
end
     if type(Pages) == "table" then
     if type(Pages) == "table" then
     for _, Page in ipairs(Pages.results) do
     --for _, Page in ipairs(Pages.results) do
    for _, Page in ipairs(Pages) do
     local Count
     local Count
     local Episodes = {}
     local Episodes = {}
Riga 122: Riga 284:
         -- Page.fulltext represents Page name
         -- Page.fulltext represents Page name
        
        
         Count = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|format=count')
         --Count = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|format=count')
         Episodes = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|sort=Numero di produzione|order=asc')
         --Episodes = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|sort=Numero di produzione|order=asc')
         if Count > 0 then
        Episodes = mw.smw.ask('[[Serie::' .. Series .. ']][[Personaggio::' .. Page .. ']]|limit=100|sort=Numero di produzione|order=asc')
       
         if (Episodes ~= nil) and (#Episodes > MinOccurr - 1) then
         --[=[
         --[=[
         Episodes = mw.smw.getQueryResult('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|sort=Numero di produzione|order=asc')
         Episodes = mw.smw.getQueryResult('[[Serie::' .. Series .. ']][[Personaggio::' .. Page.fulltext .. ']]|sort=Numero di produzione|order=asc')
Riga 132: Riga 296:
         end
         end
         ]=]
         ]=]
        if #Episodes > 0 then
        end
        
        
         for num, row in pairs(Episodes) do
         for num, Episode in pairs(Episodes) do
         --myResult = myResult .. '* This is result #' .. num .. '\n'
         --myResult = myResult .. '* This is result #' .. num .. '\n'
             for property, data in pairs( row ) do
             for _, Data in pairs(Episode) do
             if type( data ) == 'table' then
             if type(Data) == 'table' then
             table.insert(List, table.concat(data))
             table.insert(List, table.concat(Data))
             else
             else
             table.insert(List, data)
             table.insert(List, Data)
             end
             end
        
        
             end
             end
         end
         end
         table.insert(Results, "* '''[[" .. Page.fulltext .. "]]''' (" .. Count .. "): " .. table.concat(List, ", ").. " - " .. #Episodes)
         table.insert(Results, "* '''[[" .. Page .. "]]''' (" .. #Episodes .. "): " .. table.concat(List, ", "))
        else
        -- Episode is NULL or number of episodes is LESS the set value
        --table.insert(Results, "* NULL or ZERO Episodes - " .. mw.text.nowiki('[[Serie::' .. Series .. ']][[Personaggio::' .. Page .. ']]|sort=Numero di produzione|order=asc'))
         end
         end
     end
     end
Riga 153: Riga 318:
     end
     end
--return mw.text.nowiki(CategoryText) .. #Pages
return table.concat(Results, string.char(10))
return table.concat(Results, string.char(10))
end
end
Riga 169: Riga 333:
--local queryResult = mw.smw.ask( frame.args )
--local queryResult = mw.smw.ask( frame.args )
local queryResult = mw.smw.ask("[[Serie::Star Trek: Strange New Worlds]][[Personaggio::T'Pring]]|sort=Numero di produzione|order=asc")
--local queryResult = mw.smw.ask("[[Serie::Star Trek: Strange New Worlds]][[Personaggio::T'Pring]]|sort=Numero di produzione|order=asc")
local queryResult = mw.smw.ask("[[Istanza::Episodio di Picard]]|?Personaggio|order=asc|sort=Numero di produzione")
      
      
     if queryResult == nil then
     if queryResult == nil then

Menu di navigazione