此脚本已不可用,Nyaa已经默认提供40位hex格式magent链接,相关转换思想实践仍可以使用,故保留。
关于HEX编码和Base32编码的讨论可见:https://ted423.bitcron.com/post/document/magnet
自从Nyaa.se关站后,复活的Nyaa.si对于以前的种子只保留了magnet链接(爬虫和数据库谁去下种子文件嘛,对吧)
然而由于BT网络的特点(保种性差),只有magnet链接的资源很难从peer结点中获取meta信息。对此,国内只有通过某些离线网盘的缓存备份的方式来恢复。
然而在直接复制的时候却发现了百度盘提示:暂时无法找到相关种子的信息。。。
对于新种资源还能理解(毕竟假离线),但是老种的甚至所有资源都应该不至于吧。所以看了下之前别人的提示,原来Nyaa.si提供的magnet链接是Base32格式的,而百度云使用的是Hex格式的。
那就简单了嘛。。写个脚本自动转成对应格式的就行了,果然能认出新的链接了。
补充,改成Hex格式的,对于某些bt软件获取meta信息更为有利(个人体感)
脚本代码如下,你也可以选择到 GreasyFork 中安装使用。
// ==UserScript==
// @name Nyaa.si : Base32 to Hex
// @namespace https://blog.rhilip.info/
// @version 0.1
// @description 将Nyaa.si默认的magnet格式由Base32改成Hex,方便百度云离线或其他BT软件下载
// @author Rhilip
// @match http*://*.nyaa.si/*
// @grant none
// ==/UserScript==
var hD = '0123456789ABCDEF';
function dec2hex(d) {
var h = hD.substr(d & 15, 1);
while (d > 15) {
d >>= 4;
h = hD.substr(d & 15, 1) + h;
}
return h;
}
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=";
function base32_decode(input) {
var buffer = 0;
var bitsLeft = 0;
var output = [];
var i = 0;
var count = 0;
while (i < input.length) {
var val = keyStr.indexOf(input.charAt(i++));
if (val >= 0 && val < 32) {
buffer <<= 5;
buffer |= val;
bitsLeft += 5;
if (bitsLeft >= 8) {
output[count++] = (buffer >> (bitsLeft - 8)) & 0xFF;
bitsLeft -= 8;
}
}
}
return {
output: output,
bitsLeft: bitsLeft
};
}
function Convert(input) {
var cleaned = "";
var myRegExp = /[A-Z0-7]/;
for (i = 0; i < input.length; i++) {
var ch = input.charAt(i);
if (ch == '0') {
ch = 'O';
} else if (ch == '1') {
ch = 'L';
} else if (ch == '8') {
ch = 'B';
} else if (myRegExp.test(ch) === false) {
continue;
}
cleaned += ch;
}
var result = base32_decode(cleaned);
var output = result.output;
var bitsLeft = result.bitsLeft;
var separator = "";
var hexText = "";
for (i = 0; i < output.length; i++) {
hexText = hexText + separator + (output[i] < 16 ? "0" : "") + dec2hex(output[i]);
}
return hexText;
}
(function() {
'use strict';
$(".fa-magnet").each(function(){
var tag_a = $(this).parent();
var raw_magnet_link = tag_a.attr("href");
var raw_base32 = raw_magnet_link.match(/btih:(.+?)&dn=/)[1];
tag_a.attr("href",raw_magnet_link.replace(/btih:(.+?)&dn=/,"btih:" + Convert(raw_base32) + "&dn="));
});
})();
https://ted423.github.io/Document/Network/magnet/
换到Hexo了