biliarchiver/userscript.js

120 lines
3.4 KiB
JavaScript
Raw Normal View History

// ==UserScript==
// @name Bilibili Archive Checker
// @version 1.0
// @description 多 p 视频只检查 p1 是否存在。
// @author yzqzss
// @match https://www.bilibili.com/video/*
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function() {
'use strict';
// 从 URL 获取当前视频的 BV 号
function getBVNumber() {
var url = window.location.href;
var bvRegex = /\/video\/(BV\w+)/;
var matches = url.match(bvRegex);
if (matches && matches.length > 1) {
return matches[1];
}
return null;
}
// 查 archive.org
function queryInternetArchive(bvNumber) {
var iaUrl = "https://archive.org/services/check_identifier.php?output=json&identifier=BiliBili-" + bvNumber + "_p1";
GM_xmlhttpRequest({
method: "GET",
url: iaUrl,
onload: function(response) {
var data = JSON.parse(response.responseText);
if (data.code === "available") {
showPopup("此视频没有存档过", "red");
} else {
showPopup("本视频已存档", "green");
}
}
});
}
// 创建悬浮窗
function createPopup() {
var popup = document.createElement("div");
popup.id = "archive-popup";
popup.style.position = "fixed";
popup.style.top = "50%";
popup.style.right = "10px";
popup.style.transform = "translateY(-50%)";
popup.style.padding = "10px";
popup.style.backgroundColor = "#f0f0f0";
popup.style.border = "1px solid #ccc";
popup.style.borderRadius = "4px";
popup.style.zIndex = "9999";
popup.style.opacity = "0.9";
var text = document.createElement("span");
text.style.marginRight = "10px";
text.style.color = "#333";
text.textContent = "Item Status: ";
var status = document.createElement("span");
status.id = "item-status";
var copyButton = document.createElement("button");
copyButton.textContent = "Copy BV";
copyButton.style.marginTop = "10px";
copyButton.style.display = "block";
copyButton.addEventListener("click", function() {
copyBV();
});
popup.appendChild(text);
popup.appendChild(status);
popup.appendChild(copyButton);
document.body.appendChild(popup);
}
// 显示悬浮窗
function showPopup(message, color) {
var popup = document.getElementById("archive-popup");
if (!popup) {
createPopup();
}
var status = document.getElementById("item-status");
if (status) {
status.textContent = message;
}
popup = document.getElementById("archive-popup");
popup.style.backgroundColor = color;
}
// 复制 BV 号
function copyBV() {
var bvNumber = getBVNumber();
if (bvNumber) {
navigator.clipboard.writeText(bvNumber)
.then(function() {
alert("BV号已复制到剪贴板: " + bvNumber);
})
.catch(function(error) {
console.error("无法复制BV号:", error);
});
}
}
function main() {
var bvNumber = getBVNumber();
if (bvNumber) {
queryInternetArchive(bvNumber);
}
}
main();
})();