Module:Bilibili
来自OTTOWiki
更多操作
local p = {}
function p.getTitle(frame)
local bvid = frame.args[1]
if not bvid or bvid == '' then
return "无效BV号"
end
-- 调用B站API获取视频信息
local url = "https://api.bilibili.com/x/web-interface/view?bvid=" .. bvid
local response = mw.ext.externalData.getWebData{
url = url,
format = "json"
}
if not response then
return "获取信息失败"
end
if response.code == 0 and response.title then
return response.title -- 返回视频标题
else
return "视频不存在或获取失败"
end
end
function p.getPic(frame)
local bvid = frame.args[1]
if not bvid or bvid == '' then
return "无效BV号"
end
local url = "https://api.bilibili.com/x/web-interface/view?bvid=" .. bvid
local response = mw.ext.externalData.getWebData{
url = url,
format = "json"
}
if not response then
return "获取信息失败"
end
if response.code == 0 and response.pic then
return response.pic
else
return "视频不存在或获取失败"
end
end
function p.getOwner(frame)
local bvid = frame.args[1]
if not bvid or bvid == "" then
return "无效BV号"
end
local url = "https://api.bilibili.com/x/web-interface/view?bvid=" .. bvid
local resp = mw.ext.externalData.getWebData{
url = url,
format = "json"
}
mw.logObject(resp, "bilibili_resp")
if type(resp) ~= "table" then
return "获取信息失败:非JSON或解析失败"
end
if resp.code ~= 0 then
local msg = (type(resp.message) == "string" and resp.message ~= "") and resp.message or "未知错误"
return "接口返回错误:code=" .. tostring(resp.code) .. " msg=" .. msg
end
local data = resp.data
if type(data) ~= "table" then
return "获取信息失败:响应缺少data字段"
end
local owner = data.owner
if type(owner) ~= "table" then
return "获取信息失败:响应缺少owner字段"
end
local name = owner.name
if type(name) ~= "string" or name == "" then
return "获取信息失败:响应缺少owner.name"
end
return name
end
function p.getView(frame)
local bvid = frame.args[1]
if not bvid or bvid == '' then
return "无效BV号"
end
local url = "https://api.bilibili.com/x/web-interface/view?bvid=" .. bvid
local response = mw.ext.externalData.getWebData{
url = url,
format = "json"
}
if not response then
return "获取信息失败"
end
if response.code == 0 and response.data.stat.view then
return response.data.stat.view
else
return "视频不存在或获取失败"
end
end
return p