模块:FeaturedPage:修订间差异

来自「荏苒之境」
无编辑摘要
无编辑摘要
标签手工回退
(未显示同一用户的8个中间版本)
第1行: 第1行:
local translation = require("Module:Template translation")
local translation = require("Module:Template translation")
local utils_str = require("Module:Utils/String")


local featured_page = {}
local featured_page = {}
第46行: 第47行:


featured_page.show = function(frame)
featured_page.show = function(frame)
local language = translation.getLanguage()
local language = translation.getFrameLanguage(frame)
while true do
while true do
local title_match =
local title_match =
第62行: 第63行:
if title == nil then
if title == nil then
return "[[File:占位图片.png|200px|right]]找不到合适的文章。"
return frame.args.no_article_text
end
end
local extract, real_title = get_page_summary(title)
local extract, real_title = get_page_summary(title)
if extract ~= "" then
if extract ~= nil and extract ~= "" then
extract = string.gsub(extract, real_title, "[["..real_title.."]]", 1)
extract = utils_str.replace(extract, real_title, "[["..real_title.."]]", 1)
local pageimage = get_page_image(title) or "占位图片.png"
local pageimage = get_page_image(title)
return "[[File:"..pageimage.."|200px|right]]"..extract.."[["..real_title.."|"..frame.args.link_text.."]]"
if pageimage then
extract = "[[File:"..pageimage.."|200px|right]]"..extract
end
return extract.."[["..real_title.."|"..frame.args.link_text.."]]"
end
end
end
end

2025年8月20日 (三) 20:14的版本

此模块的文档可以在模块:FeaturedPage/doc创建

local translation = require("Module:Template translation")
local utils_str = require("Module:Utils/String")

local featured_page = {}

local API_EXTRACT_TEMPALTE = "http://localhost/api.php?action=query&prop=extracts&exintro&redirects=1&format=json&titles="
local API_IMAGES_TEMPLATE = "http://localhost/api.php?action=query&prop=pageimages&pithumbsize=512&redirects=1&format=json&titles="

local function get_random_title(namespace, title_match)
    while true do
        local title_text = mw.site.randomPages(1, namespace, title_match)[1]
        if title_text == nil then
        	return
        end
        title_text = title_match == nil
            and string.match(title_text, "([^/]+)") or title_text
        return title_text
    end
end

local function get_page_summary(title)
	local d, e = mw.ext.externaldata.getExternalData {
    	url = API_EXTRACT_TEMPALTE..title,
    	format = "json"
	}
	if e then
		error("发起请求失败")
	end
	local page = d[1]["__json"]["query"]["pages"][1]
	return page["extract"], page["title"]
end

local function get_page_image(title)
	local d, e = mw.ext.externaldata.getExternalData {
    	url = API_IMAGES_TEMPLATE..title,
    	format = "json"
	}
	if e then
		error("发起请求失败")
	end
	return d[1]["__json"]["query"]["pages"][1]["pageimage"]
end

featured_page.get_random_title = get_random_title
featured_page.get_page_summary = get_page_summary
featured_page.get_page_image = get_page_image

featured_page.show = function(frame)
	local language = translation.getFrameLanguage(frame)
	while true do
		local title_match =
			(language ~= nil and language ~= "zh-cn")
			and "%/"..language or nil
		local title
		
		for i = 1, 10 do
			title = get_random_title(0, title_match)
				or get_random_title(0)
			if string.find(title, "首页") ~= 1 then
				break
			end
		end
		
		if title == nil then
			return frame.args.no_article_text
		end
			
		local extract, real_title = get_page_summary(title)
		if extract ~= nil and extract ~= "" then
			extract = utils_str.replace(extract, real_title, "[["..real_title.."]]", 1)
			local pageimage = get_page_image(title)
			if pageimage then
				extract = "[[File:"..pageimage.."|200px|right]]"..extract
			end
			return extract.."[["..real_title.."|"..frame.args.link_text.."]]"
		end
	end
end

return featured_page