更新 userscript.js 以适配新的 identifier 格式

This commit is contained in:
yzqzss 2023-07-06 16:08:45 +08:00
parent 8484bd65a5
commit 4a221c1fcc
2 changed files with 48 additions and 13 deletions

View File

@ -1,10 +1,3 @@
# biliarchiver
## 基于 bilix 的 BiliBili 存档工具
~~ IA iteam identifier 格式兼容 tubeup ~~。
现在不兼容了Tubeup 不适合存 B 站视频,它的 identifier 设计不科学,大规模存档必定会撞车。
目前,我可能随时 commit 乱飞且动不动就 git push -f 这个仓库。(为了在我的 vps 和本地之间同步代码)
userscript.js 还没适配新换的 identifier 格式。

View File

@ -7,7 +7,7 @@
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function() {
(function () {
'use strict';
// 从 URL 获取当前视频的 BV 号
@ -21,13 +21,55 @@
return null;
}
function humanReadableUpperPartMap(string, backward) {
// 找到字符串中所有的 ASCII 大写字母,并返回一个能表示他们绝对位置的字符串。
// 其中每个非相邻的大写字母之间用数字表示相隔的字符数。
//
// params: backward - 可以表示是正着看还是倒着看。
//
// NOTE: 在我们的用例中,我们 backward = true ,这样产生的 upperPart 就不太像 BV 号或者类似的编号,以免 upperPart 污染全文搜索。
//
// 例如:
// backward = false
// BV1HP411D7Rj -> BV1HP3D1R (长得像 bvid
// backward = true
// BV1HP411D7Rj -> 1R1D3PH1VB
if (backward) {
string = string.split('').reverse().join('');
}
console.log(string);
let result = '';
let steps = 0;
let char_ = '';
for (let i = 0; i < string.length; i++) {
char_ = string[i];
console.log('char_:', char_);
if (char_ >= 'A' && char_ <= 'Z') {
if (steps === 0) {
result += char_;
} else {
// steps to string
result += steps.toString() + char_;
}
steps = 0;
} else {
steps++;
}
}
return result;
}
// 查 archive.org
function queryInternetArchive(bvNumber) {
var iaUrl = "https://archive.org/services/check_identifier.php?output=json&identifier=BiliBili-" + bvNumber + "_p1";
var iaUrl = "https://archive.org/services/check_identifier.php?output=json&identifier=BiliBili-" + bvNumber + "_p1" + "-" + humanReadableUpperPartMap(bvNumber, true);
console.log(iaUrl);
GM_xmlhttpRequest({
method: "GET",
url: iaUrl,
onload: function(response) {
onload: function (response) {
var data = JSON.parse(response.responseText);
if (data.code === "available") {
showPopup("此视频没有存档过", "red");
@ -65,7 +107,7 @@
copyButton.textContent = "Copy BV";
copyButton.style.marginTop = "10px";
copyButton.style.display = "block";
copyButton.addEventListener("click", function() {
copyButton.addEventListener("click", function () {
copyBV();
});
@ -96,10 +138,10 @@
var bvNumber = getBVNumber();
if (bvNumber) {
navigator.clipboard.writeText(bvNumber)
.then(function() {
.then(function () {
alert("BV号已复制到剪贴板: " + bvNumber);
})
.catch(function(error) {
.catch(function (error) {
console.error("无法复制BV号:", error);
});
}