个人脚本 - Nyaa.si : Base32 to Hex

Rhilip 2018-01-23 AM 2020℃ 0条

此脚本已不可用,Nyaa已经默认提供40位hex格式magent链接,相关转换思想实践仍可以使用,故保留。

关于HEX编码和Base32编码的讨论可见:https://ted423.bitcron.com/post/document/magnet

自从Nyaa.se关站后,复活的Nyaa.si对于以前的种子只保留了magnet链接(爬虫和数据库谁去下种子文件嘛,对吧)

然而由于BT网络的特点(保种性差),只有magnet链接的资源很难从peer结点中获取meta信息。对此,国内只有通过某些离线网盘的缓存备份的方式来恢复。

然而在直接复制的时候却发现了百度盘提示:暂时无法找到相关种子的信息。。。
cann't found torrent.jpg

对于新种资源还能理解(毕竟假离线),但是老种的甚至所有资源都应该不至于吧。所以看了下之前别人的提示,原来Nyaa.si提供的magnet链接是Base32格式的,而百度云使用的是Hex格式的。
那就简单了嘛。。写个脚本自动转成对应格式的就行了,果然能认出新的链接了。
can do it.jpg

补充,改成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="));
    });
})();

非特殊说明,本博所有文章均为博主原创。

评论啦~