init
This commit is contained in:
@@ -0,0 +1,347 @@
|
||||
local utils = require 'mp.utils'
|
||||
local msg = require 'mp.msg'
|
||||
|
||||
local Source = {
|
||||
["b 站"] = "bilibili1",
|
||||
["腾讯"] = "qq",
|
||||
["爱奇艺"] = "qiyi",
|
||||
["优酷"] = "youku",
|
||||
}
|
||||
|
||||
local function load_extra_danmaku(url, episode, number, class, id, site, title, year)
|
||||
local play_url = nil
|
||||
if url:match("^.-%.html") then
|
||||
play_url = url:match("^(.-%.html).*")
|
||||
else
|
||||
play_url = url:gsub("%?bsource=360ogvys$","")
|
||||
end
|
||||
ENABLED = true
|
||||
DANMAKU.anime = title .. " (" .. year .. ")"
|
||||
DANMAKU.episode = "第" .. episode .. "话"
|
||||
DANMAKU.source = site
|
||||
DANMAKU.extra = {
|
||||
id = id,
|
||||
site = site,
|
||||
year = year,
|
||||
class = class,
|
||||
title = title,
|
||||
number = tonumber(number),
|
||||
episodenum = tonumber(episode),
|
||||
}
|
||||
write_history()
|
||||
add_danmaku_source(play_url, true)
|
||||
end
|
||||
|
||||
local function query_tmdb(title, class, menu)
|
||||
local encoded_title = url_encode(title)
|
||||
local url = string.format("https://api.themoviedb.org/3/search/%s?api_key=%s&query=%s&language=zh-CN",
|
||||
class, Base64.decode(options.tmdb_api_key), encoded_title)
|
||||
|
||||
local cmd = {
|
||||
"curl",
|
||||
"-s",
|
||||
"-H", "accept: application/json",
|
||||
url
|
||||
}
|
||||
|
||||
if options.proxy ~= "" then
|
||||
table.insert(cmd, '-x')
|
||||
table.insert(cmd, options.proxy)
|
||||
end
|
||||
|
||||
local res = mp.command_native({
|
||||
name = "subprocess",
|
||||
args = cmd,
|
||||
capture_stdout = true,
|
||||
capture_stderr = true,
|
||||
})
|
||||
|
||||
local data = utils.parse_json(res.stdout)
|
||||
if not res.status or res.status ~= 0 or not data.results or #data.results == 0 then
|
||||
local message = "获取 tmdb 中文数据失败"
|
||||
if uosc_available then
|
||||
update_menu_uosc(menu.type, menu.title, message, menu.footnote, menu.cmd, title)
|
||||
else
|
||||
show_message(message, 3)
|
||||
end
|
||||
msg.error("获取 tmdb 中文数据失败:" .. res.stdout)
|
||||
else
|
||||
if class == "tv" then
|
||||
return data.results[1].name
|
||||
else
|
||||
return data.results[1].title
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function get_number(cat, id, site)
|
||||
local url = string.format("https://api.web.360kan.com/v1/detail?cat=%s&id=%s&site=%s",
|
||||
cat, id, site)
|
||||
|
||||
local cmd = { "curl", "-s", url }
|
||||
local res = mp.command_native({
|
||||
name = "subprocess",
|
||||
args = cmd,
|
||||
capture_stdout = true,
|
||||
capture_stderr = true,
|
||||
})
|
||||
|
||||
if not res.status or res.status ~= 0 then
|
||||
msg.error("Failed to fetch data: " .. (res.stderr or "unknown error"))
|
||||
return nil
|
||||
end
|
||||
|
||||
local result = utils.parse_json(res.stdout)
|
||||
if result and result.data and result.data.allupinfo then
|
||||
return tonumber(result.data.allupinfo[site])
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function get_details(class, id, site, title, year, number, episodenum)
|
||||
local message = episodenum and "查询弹幕中..." or "加载数据中..."
|
||||
local menu_type = "menu_details"
|
||||
local menu_title = "剧集信息"
|
||||
local footnote = "使用 / 打开筛选"
|
||||
if uosc_available and not episodenum then
|
||||
update_menu_uosc(menu_type, menu_title, message, footnote)
|
||||
else
|
||||
show_message(message, 3)
|
||||
end
|
||||
|
||||
local cat = 0
|
||||
if class == "电影" then
|
||||
cat = 1
|
||||
elseif class == "电视剧" then
|
||||
cat = 2
|
||||
-- elseif class == "综艺" then
|
||||
-- cat = 3
|
||||
elseif class == "动漫" then
|
||||
cat = 4
|
||||
end
|
||||
|
||||
if not number and cat ~= 0 then
|
||||
number = get_number(cat, id, site)
|
||||
end
|
||||
if not number or cat == 0 then
|
||||
local message = "无结果"
|
||||
if uosc_available and not episodenum then
|
||||
update_menu_uosc(menu_type, menu_title, message, footnote)
|
||||
else
|
||||
show_message(message, 3)
|
||||
end
|
||||
msg.verbose("无结果")
|
||||
return
|
||||
end
|
||||
|
||||
local url = string.format("https://api.web.360kan.com/v1/detail?cat=%s&id=%s&start=1&end=%s&site=%s",
|
||||
cat, id, number, site)
|
||||
|
||||
local cmd = { "curl", "-s", url }
|
||||
local res = mp.command_native({
|
||||
name = "subprocess",
|
||||
args = cmd,
|
||||
capture_stdout = true,
|
||||
capture_stderr = true,
|
||||
})
|
||||
|
||||
if not res.status or res.status ~= 0 then
|
||||
local message = "无结果"
|
||||
if uosc_available and not episodenum then
|
||||
update_menu_uosc(menu_type, menu_title, message, footnote)
|
||||
else
|
||||
show_message(message, 3)
|
||||
end
|
||||
msg.verbose("无结果")
|
||||
return
|
||||
end
|
||||
|
||||
local result = utils.parse_json(res.stdout)
|
||||
local items = {}
|
||||
if result and result.data and result.data.allepidetail then
|
||||
local data = result.data.allepidetail
|
||||
local playurl, episode = nil, nil
|
||||
if episodenum then
|
||||
for _, item in ipairs(data[site]) do
|
||||
if tonumber(item.playlink_num) == tonumber(episodenum) then
|
||||
playurl = item.url
|
||||
episode = item.playlink_num
|
||||
break
|
||||
end
|
||||
end
|
||||
if playurl then
|
||||
load_extra_danmaku(playurl, episode, number, class, id, site, title, year)
|
||||
return
|
||||
end
|
||||
end
|
||||
for _, item in ipairs(data[site]) do
|
||||
table.insert(items, {
|
||||
title = "第" .. item.playlink_num .. "集",
|
||||
hint = item.playlink_num,
|
||||
value = {
|
||||
"script-message-to",
|
||||
mp.get_script_name(),
|
||||
"add-extra-event",
|
||||
item.url, item.playlink_num, number, class, id, site, title, year
|
||||
},
|
||||
})
|
||||
end
|
||||
end
|
||||
if #items > 0 then
|
||||
if uosc_available and not episodenum then
|
||||
update_menu_uosc(menu_type, menu_title, items, footnote)
|
||||
elseif not episodenum then
|
||||
show_message("", 0)
|
||||
mp.add_timeout(0.1, function()
|
||||
open_menu_select(items)
|
||||
end)
|
||||
end
|
||||
else
|
||||
local message = "无结果"
|
||||
if uosc_available and not episodenum then
|
||||
update_menu_uosc(menu_type, menu_title, message, footnote)
|
||||
else
|
||||
show_message(message, 3)
|
||||
end
|
||||
msg.verbose("无结果")
|
||||
end
|
||||
end
|
||||
|
||||
local function search_query(query, class, menu)
|
||||
local url = string.format("https://api.so.360kan.com/index?force_v=1&kw=%s", query)
|
||||
if class ~= nil then
|
||||
url = url .. "&type=" .. class
|
||||
end
|
||||
local cmd = { "curl", "-s", url }
|
||||
|
||||
local res = mp.command_native({
|
||||
name = "subprocess",
|
||||
args = cmd,
|
||||
capture_stdout = true,
|
||||
capture_stderr = true,
|
||||
})
|
||||
|
||||
if not res.status or res.status ~= 0 then
|
||||
local message = "无结果"
|
||||
if uosc_available then
|
||||
update_menu_uosc(menu.type, menu.title, message, menu.footnote, menu.cmd, query)
|
||||
else
|
||||
show_message(message, 3)
|
||||
end
|
||||
msg.verbose("无结果")
|
||||
return
|
||||
end
|
||||
|
||||
local result = utils.parse_json(res.stdout)
|
||||
local items = {}
|
||||
if result and result.data.longData and result.data.longData.rows then
|
||||
for _, item in ipairs(result.data.longData.rows) do
|
||||
if item.playlinks then
|
||||
for source_name, source_id in pairs(Source) do
|
||||
if item.playlinks[source_id] then
|
||||
table.insert(items, {
|
||||
title = item.titleTxt,
|
||||
hint = item.cat_name .. " | " .. item.year .. " | 来源:" .. source_name,
|
||||
value = {
|
||||
"script-message-to",
|
||||
mp.get_script_name(),
|
||||
"get-extra-event",
|
||||
item.cat_name, item.en_id, item.playlinks[source_id], source_id,
|
||||
item.titleTxt, item.year,
|
||||
},
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if #items > 0 then
|
||||
if uosc_available then
|
||||
update_menu_uosc(menu.type, menu.title, items, menu.footnote, menu.cmd, query)
|
||||
else
|
||||
show_message("", 0)
|
||||
mp.add_timeout(0.1, function()
|
||||
open_menu_select(items)
|
||||
end)
|
||||
end
|
||||
else
|
||||
local message = "无结果"
|
||||
if uosc_available then
|
||||
update_menu_uosc(menu.type, menu.title, message, menu.footnote, menu.cmd, query)
|
||||
else
|
||||
show_message(message, 3)
|
||||
end
|
||||
msg.verbose("无结果")
|
||||
end
|
||||
end
|
||||
|
||||
function query_extra(name, class)
|
||||
local name = name:gsub("%s*%(%d-%)%s*$", "")
|
||||
local title = nil
|
||||
local class = class and class:lower()
|
||||
local message = "加载数据中..."
|
||||
local menu = {
|
||||
type = "menu_anime",
|
||||
title = "在此处输入番剧名称",
|
||||
footnote = "使用enter或ctrl+enter进行搜索"
|
||||
}
|
||||
menu.cmd = { "script-message-to", mp.get_script_name(), "search-anime-event" }
|
||||
if uosc_available then
|
||||
update_menu_uosc(menu.type, menu.title, message, menu.footnote, menu.cmd, name)
|
||||
else
|
||||
show_message(message, 30)
|
||||
end
|
||||
|
||||
if is_chinese(name) then
|
||||
search_query(name, class, menu)
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
if options.tmdb_api_key == "" or #Base64.decode(options.tmdb_api_key) < 32 then
|
||||
local message = "请正确设置 tmdb_api_key 或尝试使用中文搜索"
|
||||
if uosc_available then
|
||||
update_menu_uosc(menu.type, menu.title, message, menu.footnote, menu.cmd, name)
|
||||
else
|
||||
show_message(message, 3)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if class == "dy" then
|
||||
title = query_tmdb(name, "movie", menu)
|
||||
else
|
||||
title = query_tmdb(name, "tv", menu)
|
||||
end
|
||||
|
||||
if title then
|
||||
search_query(title, class, menu)
|
||||
end
|
||||
end
|
||||
|
||||
mp.register_script_message("get-extra-event", function(cat, id, playlink, source_id, title, year)
|
||||
if uosc_available then
|
||||
mp.commandv("script-message-to", "uosc", "close-menu", "menu_anime")
|
||||
end
|
||||
if cat == "电影" then
|
||||
if playlink:match("^.-%.html") then
|
||||
playlink = playlink:match("^(.-%.html).*")
|
||||
else
|
||||
playlink = playlink:gsub("%?bsource=360ogvys$","")
|
||||
end
|
||||
DANMAKU.anime = title .. " (" .. year .. ")"
|
||||
DANMAKU.episode = "电影"
|
||||
DANMAKU.source = source_id
|
||||
write_history()
|
||||
add_danmaku_source(playlink, true)
|
||||
else
|
||||
get_details(cat, id, source_id, title, year)
|
||||
end
|
||||
end)
|
||||
|
||||
mp.register_script_message("add-extra-event", function(url, episode, number, class, id, site, title, year)
|
||||
if uosc_available then
|
||||
mp.commandv("script-message-to", "uosc", "close-menu", "menu_details")
|
||||
end
|
||||
load_extra_danmaku(url, episode, number, class, id, site, title, year)
|
||||
end)
|
||||
Reference in New Issue
Block a user