118 lines
3.4 KiB
Lua
118 lines
3.4 KiB
Lua
local msg = require('mp.msg')
|
|
local utils = require("mp.utils")
|
|
|
|
local function resolve_bahamut_sn(input_string)
|
|
local start_index = 0
|
|
local end_index = 0
|
|
local count = 0
|
|
for i = 1, #input_string do
|
|
if input_string:sub(i, i) == ":" then
|
|
count = count + 1
|
|
if count == 2 then
|
|
start_index = i
|
|
elseif count == 3 then
|
|
end_index = i
|
|
break
|
|
end
|
|
end
|
|
end
|
|
if start_index > 0 and end_index > 0 then
|
|
return input_string:sub(start_index + 1, end_index - 1)
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
|
|
local function get_type_from_position(position)
|
|
if position == 0 then
|
|
return 1
|
|
end
|
|
if position == 1 then
|
|
return 4
|
|
end
|
|
return 5
|
|
end
|
|
|
|
-- 为 bahamut 网站的视频播放加载弹幕
|
|
function load_danmaku_for_bahamut(path, callback)
|
|
callback = callback or function() end
|
|
local path = path:gsub('%%(%x%x)', hex_to_char)
|
|
local sn = resolve_bahamut_sn(path)
|
|
if sn == nil then
|
|
callback(false)
|
|
return
|
|
end
|
|
local url = "https://ani.gamer.com.tw/ajax/danmuGet.php"
|
|
local temp_file = "bahamut-" .. PID .. ".json"
|
|
local danmaku_json = utils.join_path(DANMAKU_PATH, temp_file)
|
|
local arg = {
|
|
"curl",
|
|
"-X",
|
|
"POST",
|
|
"-d",
|
|
"sn=" .. sn,
|
|
"-L",
|
|
"-s",
|
|
"--user-agent",
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36",
|
|
"--header",
|
|
"Origin: https://ani.gamer.com.tw",
|
|
"--header",
|
|
"Content-Type: application/x-www-form-urlencoded;charset=utf-8",
|
|
"--header",
|
|
"Accept: application/json",
|
|
"--header",
|
|
"Authority: ani.gamer.com.tw",
|
|
"--output",
|
|
danmaku_json,
|
|
url,
|
|
}
|
|
|
|
if options.proxy ~= "" then
|
|
table.insert(arg, '-x')
|
|
table.insert(arg, options.proxy)
|
|
end
|
|
|
|
if options.cookie_file and options.cookie_file ~= "" then
|
|
table.insert(arg, '-b')
|
|
table.insert(arg, mp.command_native({"expand-path", options.cookie_file}))
|
|
end
|
|
|
|
call_cmd_async(arg, function(error)
|
|
if error then
|
|
show_message("HTTP 请求失败,打开控制台查看详情", 5)
|
|
msg.error(error)
|
|
callback(false)
|
|
return
|
|
end
|
|
if not file_exists(danmaku_json) then
|
|
callback(false)
|
|
return
|
|
end
|
|
|
|
local comments_json = read_file(danmaku_json)
|
|
os.remove(danmaku_json)
|
|
local comments = utils.parse_json(comments_json)
|
|
if not comments then
|
|
callback(false)
|
|
return
|
|
end
|
|
|
|
local output_table = {}
|
|
for _, comment in ipairs(comments) do
|
|
local color = hex_to_int_color(comment["color"])
|
|
local mode = get_type_from_position(comment["position"])
|
|
local time = tonumber(comment["time"]) / 10
|
|
local c_param = string.format("%s,%s,%s,25,,,", time, color, mode)
|
|
table.insert(output_table, {
|
|
c = c_param,
|
|
m = comment["text"]
|
|
})
|
|
end
|
|
|
|
local final_json_str = utils.format_json(output_table)
|
|
save_danmaku_json("https://ani.gamer.com.tw/animeVideo.php?sn=" .. sn, final_json_str)
|
|
load_danmaku(true)
|
|
callback(true)
|
|
end)
|
|
end |