Module:RemoteData: Difference between revisions

From Buddha-Nature
((by SublimeText.Mediawiker))
((by SublimeText.Mediawiker))
Line 1: Line 1:
local p = {}
local p = {}


function p.get(frame)
function p.get(frame)


local args = frame.args
local args = frame.args
Line 24: Line 24:
return 'No data! ¯\\_(ツ)_/¯'
return 'No data! ¯\\_(ツ)_/¯'
end
end
end
end


function p.set(frame)
function p.set(frame)


local pargs = frame:getParent().args
    local pargs = frame:getParent().args
local props = pargs.props
local sep = pargs.sep
local source = pargs.source
 
local propString = ''
for property in string.gmatch(props, "([^;]+)") do
propString = propString .. '|?' .. property .. '#'
end
 
local valuesep = ''
if sep then
valuesep = '|valuesep=' .. sep .. '|sep=' .. sep
end
 
local remoteData = mw.smw.ask( '[[' .. mw.title.getCurrentTitle().subpageText .. ']]' .. propString .. valuesep .. '|mainlabel=-|source=' .. source )
 
if remoteData then
 
local dataStore = {}
 
for _, data in pairs( remoteData ) do


for property, value in pairs( data ) do
    local properties = ''
    for value in string.gmatch(pargs.props, "([^;]+)") do
        properties = properties .. "|?" .. value .. "#"
    end


            table.insert(dataStore, property .. '=' .. frame:preprocess( value ))
    local extQuery = mw.uri.encode( "[[" .. mw.title.getCurrentTitle().subpageText .. "]]" .. properties .. "|limit=10000|valuesep=;|sep=;" )
            if sep then
            table.insert(dataStore, '+sep=' .. sep)
            end


end
    -- local testQuery = "https://" .. pargs.source .. ".tsadra.org/api.php?action=ask&query=" .. extQuery .. "&format=json&api_version=3"
    -- if testQuery then
    --    return testQuery
    -- end


end
    local remoteContent, rcErrors = mw.ext.externalData.getExternalData("https://" .. pargs.source .. ".tsadra.org/api.php?action=ask&query=" .. extQuery .. "&format=json&api_version=3")
    local json = not rcErrors and remoteContent.__json or false


local dataStored = mw.smw.set( dataStore )
    if rcErrors then
        return rcErrors
    end
    -- EXAMPLE: https://research.tsadra.org/api.php?action=ask&query=%5B%5BRhoton%2C+J.%5D%5D%7C%3FFirstImage%7C%3FMainNamePhon%7Climit%3D10000&format=json&api_version=3


    if dataStored == true then
    local dataStore = {}
        return ''
    else
        return 'An error occurred during the storage process. Message reads ' .. dataStored.error
    end


else
    if #json then
        for _, result in ipairs(json.query.results) do
            for name, values in pairs (result) do
                for prop, value in pairs (values.printouts) do
                    local dataOutput = value
                    if type( value ) == 'table' then
                        dataOutput = mw.text.listToText( value, '; ')
                    end
                    table.insert(dataStore, prop .. '=' .. dataOutput)
                    if pargs.sep then
                        table.insert(dataStore, '+sep=' .. pargs.sep)
                    end
                end
            end
        end
    end


return 'no remoteData'
    local dataStored = mw.smw.set( dataStore )


end
    if dataStored == true then
        return ''
    else
        return 'An error occurred during the storage process. Message reads ' .. dataStored.error
    end


end
end


return p
return p

Revision as of 04:11, 25 July 2025

Documentation for this module may be created at Module:RemoteData/doc

local p = {}

function p.get(frame)

		local args = frame.args
		local pargs = frame:getParent().args
		local prop = ''
		if args.prop then
			prop = args.prop
		else
			prop = pargs[1]
		end
		local source = args.source

		local remoteData = mw.smw.ask( '[[' .. mw.title.getCurrentTitle().subpageText .. ']]|?' .. prop .. '#|mainlabel=-|source=' .. source )

		if remoteData then
			for _, data in pairs( remoteData ) do
				for property, value in pairs( data ) do
					return frame:preprocess( value )
				end
			end
		else
			return 'No data! ¯\\_(ツ)_/¯'
		end
end

function p.set(frame)

    local pargs = frame:getParent().args

    local properties = ''
    for value in string.gmatch(pargs.props, "([^;]+)") do
        properties = properties .. "|?" .. value .. "#"
    end

    local extQuery = mw.uri.encode( "[[" .. mw.title.getCurrentTitle().subpageText .. "]]" .. properties .. "|limit=10000|valuesep=;|sep=;" )

    -- local testQuery = "https://" .. pargs.source .. ".tsadra.org/api.php?action=ask&query=" .. extQuery .. "&format=json&api_version=3"
    -- if testQuery then
    --     return testQuery
    -- end

    local remoteContent, rcErrors = mw.ext.externalData.getExternalData("https://" .. pargs.source .. ".tsadra.org/api.php?action=ask&query=" .. extQuery .. "&format=json&api_version=3")
    local json = not rcErrors and remoteContent.__json or false

    if rcErrors then
        return rcErrors
    end
    -- EXAMPLE: https://research.tsadra.org/api.php?action=ask&query=%5B%5BRhoton%2C+J.%5D%5D%7C%3FFirstImage%7C%3FMainNamePhon%7Climit%3D10000&format=json&api_version=3

    local dataStore = {}

    if #json then
        for _, result in ipairs(json.query.results) do
            for name, values in pairs (result) do
                for prop, value in pairs (values.printouts) do
                    local dataOutput = value
                    if type( value ) == 'table' then
                        dataOutput = mw.text.listToText( value, '; ')
                    end
                    table.insert(dataStore, prop .. '=' .. dataOutput)
                    if pargs.sep then
                        table.insert(dataStore, '+sep=' .. pargs.sep)
                    end
                end
            end
        end
    end

    local dataStored = mw.smw.set( dataStore )

    if dataStored == true then
        return ''
    else
        return 'An error occurred during the storage process. Message reads ' .. dataStored.error
    end

end

return p