P2P分享by SeLang

目标是网页右键收藏,一键打包种子,一键分享,浏览器直接查看,在线编辑发布网站。 QQ群号:455809302,点击链接加入群【油猴脚本私人定制】:https://jq.qq.com/?_wv=1027&k=45p9bea。

// ==UserScript==
// @name         P2P分享by SeLang
// @namespace    http://cmsv1.findmd5.com/
// @version      0.4
// @description  目标是网页右键收藏,一键打包种子,一键分享,浏览器直接查看,在线编辑发布网站。 QQ群号:455809302,点击链接加入群【油猴脚本私人定制】:https://jq.qq.com/?_wv=1027&k=45p9bea。
// @author       selang
// @include       /https?\:\/\/help\.baidu\.com/
// @require       https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js
// @require       https://cdn.jsdelivr.net/webtorrent/latest/webtorrent.min.js
// @require       https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js
// @require       https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js
// @require       https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.min.js
// @connect      *
// @grant        GM_download
// @grant        GM_openInTab
// @grant        GM_getTab
// @grant        GM_getTabs
// @grant        GM_saveTab
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_listValues
// @grant        GM_addValueChangeListener
// @grant        GM_xmlhttpRequest
// ==/UserScript==

var imgType = ['.jpg', '.gif', '.jpeg', '.png'];
const forceSuffix = '.selang';

var blobCache = {};

(function () {
    'use strict';
    priorityLog('欢迎进群:455809302交流。一起玩。\r\n如果不是老司机,只要有创意也欢迎加入。点击链接加入群【油猴脚本私人级别定制】:https://jq.qq.com/?_wv=1027&k=460soLy');
    priorityLog('约定内容后缀名名为.selang');
    priorityLog('种子分享网站:(https://btorrent.xyz/),建立一个文本文档以.selang结尾;文档里每一行放入一个图片的链接地址,再在网站上分享。拷贝种子或者磁力链接地址到对应页面,点击获取,一会应该就能获取到种子里的图片了');
    priorityLog('例子:建立一个文本文档以.selang结尾;文档里每一行放入一个图片的链接地址,再在网站上分享。拷贝种子或者磁力链接地址到(http://help.baidu.com),点击获取,一会应该就能获取到种子里的图片了');
    injectTorrentInputComponent();
})();

function torrentParse(torrentVal) {
    if (WebTorrent.WEBRTC_SUPPORT) {
        var client = new WebTorrent();
        var torrentId = torrentVal;
        client.add(torrentId, function (torrent) {
            var length = torrent.files.length;
            log('共有文件:' + length);
            forEach(torrent.files, function (file) {
                var path = file.path;
                if (forceSuffix === getSuffix(path)) {
                    file.getBuffer(function (err, buffer) {
                        if (err) throw err;
                        var text = buffer.toString();
                        text = text.replace(/(\r|\n)+/, '\r');
                        var txtArray = text.split(/\r/);
                        forEach(txtArray, function (txt) {
                            var type = getSuffix(txt);
                            if (imgType.indexOf(type) != -1) {
                                log('|' + txt + '|');
                                obtainBlob(txt, function (response) {
                                    var responseHeaders = parseHeaders(response.responseHeaders);
                                    var contentType = responseHeaders['Content-Type'];
                                    if (!contentType) {
                                        contentType = "image/png";
                                    }
                                    var blob = new Blob([response.response], {type: contentType});
                                    var objectURL = URL.createObjectURL(blob);
                                    $('#mainContainer').append('<img label="sl" src=' + objectURL + ' alt=""/>');
                                    blobCache[objectURL] = blob;
                                });
                                //$('#mainContainer').append('<img src=' + txt + ' alt=""/>');
                            }
                        });
                    });
                }
            });
        });
    } else {
        priorityLog('不支持!')
    }
}

//解析返回头
function parseHeaders(headStr) {
    var o = {};
    var myregexp = /^([^:]+):(.*)$/img;
    var match = /^([^:]+):(.*)$/img.exec(headStr);
    while (match != null) {
        o[match[1].trim()] = match[2].trim();
        match = myregexp.exec(headStr);
    }
    return o;
}

function injectTorrentInputComponent() {
    clearHeadAndBody();
    $('body').append('<input id="torrentVal" type="text" value="" placeholder="请输入特制的种子地址"/>' +
        '<input id="torrentBtn" type="button" value="获取"/>' +
        '<input id="packageBtn" type="button" value="打包下载当前页图片"/>');
    bindBtn($('#torrentBtn'), function (e) {
        var torrentVal = $('#torrentVal').val();
        torrentParse(torrentVal);
    });
    bindBtn($('#packageBtn'), function (e) {
        var zip = new JSZip();
        var imgList = $('img[label="sl"]');
        var length = imgList.length;
        $.each(imgList, function (index, value) {
            zip.file("readme.txt", "感谢使用selang提供的插件。欢迎进群:455809302交流。一起玩。\r\n如果不是老司机,只要有创意也欢迎加入。点击链接加入群【油猴脚本私人级别定制】:https://jq.qq.com/?_wv=1027&k=460soLy\n");
            var img = zip.folder("images");
            var src = $(value).attr('src');
            img.file(index + ".jpeg", blobCache[src], {base64: false});
            length--;
        });
        var id = setInterval(function () {
            if (length == 0) {
                clearInterval(id);
                zip.generateAsync({type: "blob"})
                    .then(function (content) {
                        saveAs(content, "PackageSL.zip");
                    });
            }
        }, 100);
    });
    $('body').append('<div id="mainContainer"></div>');
}

function bindBtn(o, callback) {
    $(o).bind('click', callback);
}

function clearHeadAndBody() {
    $('body').html('');
    $('head').html('');
}

//循环
function forEach(arr, callback) {
    for (var j = 0, len = arr.length; j < len; j++) {
        callback(arr[j]);
    }
}

//取后缀名
function getSuffix(path) {
    var point = path.lastIndexOf(".");

    var type = path.substr(point);
    if (type) {
        return type.toLowerCase();
    }
}

//获取参数
function getUrlParam(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return decodeURI(r[2]);
    return null;
}

//日志
function log(c) {
    if (false) {
        console.log(c);
    }
}

function priorityLog(c) {
    console.log(c);
}

//注入JS:jquery
function injectJs(e) {
    if (e.jQuery) {
        log('jquery available');
    } else {
        var ele = e.document.createElement('script');
        ele.src = "https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js";
        e.document.body.appendChild(ele);
        var id = e.setInterval(function () {
            if (e.jQuery) {
                e.clearInterval(id);
            }
        }, 100);
    }
}

//等待JQuery加载完毕
function dependenceJQuery(e, callback) {
    var id = e.setInterval(function () {
        if (e.jQuery) {
            e.clearInterval(id);
            callback;
        }
    }, 100);
}

//获取网页
function obtainBlob(url, callback) {
    GM_xmlhttpRequest({
        method: 'GET',
        headers: {
            "Accept": "application/*"
        },
        url: url,
        responseType: 'blob',
        onload: function (response) {
            callback(response);
        }
    });
}

function obtainHtml_POST(url, info, qNum, callback) {
    var str = JSON.stringify({
        key: tulingKey, //更换自己的图灵机器人key
        info: info,
        userid: qNum,

    });
    log(str);
    GM_xmlhttpRequest({
        method: 'POST',
        headers: {
            "Accept": "application/*"
        },
        data: str,
        url: url,
        onload: function (response) {
            callback(response.responseText);
        }
    });
}