| 第1行: |
第1行: |
| − | p = {} | + | local p = {} |
| | | | |
| | function p.exists(query) | | function p.exists(query) |
| | return mw.smw.ask(query.."|limit=1") | | return mw.smw.ask(query.."|limit=1") |
| | + | end |
| | + | |
| | + | function p.query_pages(query) |
| | + | local res = mw.smw.getQueryResult(query) |
| | + | local ret = {} |
| | + | for j, r in ipairs(res.results) do |
| | + | table.insert(ret, r.fulltext) |
| | + | end |
| | + | return ret |
| | + | end |
| | + | |
| | + | function p.query_page_properties(query, properties) |
| | + | local real_query = query |
| | + | for i, p in ipairs(properties) do |
| | + | real_query = real_query .. "|?" .. p |
| | + | end |
| | + | local res = mw.smw.getQueryResult(real_query) |
| | + | local ret = {} |
| | + | for i, r in ipairs(res.results) do |
| | + | local ans = {} |
| | + | local title = r.fulltext |
| | + | for j, prop in ipairs(properties) do |
| | + | local p_values = {} |
| | + | if r.printouts[prop] then |
| | + | for k, t in ipairs(r.printouts[prop]) do |
| | + | table.insert(p_values, t.fulltext or t) |
| | + | end |
| | + | end |
| | + | ans[prop] = p_values |
| | + | end |
| | + | table.insert(ret, {title=title, properties=ans}) |
| | + | end |
| | + | return ret |
| | + | end |
| | + | |
| | + | local QueryBuilder = {content = ""} |
| | + | |
| | + | function QueryBuilder:new() |
| | + | local n = {} |
| | + | setmetatable(n, QueryBuilder) |
| | + | self.__index = self |
| | + | return n |
| | + | end |
| | + | function QueryBuilder:cat(v) |
| | + | local n = self:new() |
| | + | n.content = self.content .. v |
| | + | return n |
| | + | end |
| | + | function QueryBuilder:bracket(t) |
| | + | return self:cat('[['..t..']] ') |
| | + | end |
| | + | function QueryBuilder:or_() |
| | + | return self:cat(' OR ') |
| | + | end |
| | + | function QueryBuilder:done() |
| | + | return self.content |
| | + | end |
| | + | function QueryBuilder:page(name) |
| | + | return self:bracket(name) |
| | + | end |
| | + | function QueryBuilder:category(name) |
| | + | return self:bracket("Category:"..name) |
| | + | end |
| | + | function QueryBuilder:exists(prop) |
| | + | return self:bracket(prop..'::+') |
| | + | end |
| | + | function QueryBuilder:property(prop, value) |
| | + | return self:bracket(prop..'::'..value) |
| | + | end |
| | + | function QueryBuilder:get_pages() |
| | + | return p.query_pages(self:done()) |
| | + | end |
| | + | function QueryBuilder:get_properties(properties) |
| | + | return p.query_properties(self:done(), properties) |
| | + | end |
| | + | |
| | + | p.QueryBuilder = QueryBuilder |
| | + | |
| | + | function p.query() |
| | + | return QueryBuilder:new() |
| | end | | end |
| | | | |
| | return p | | return p |