您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically fills a Gazelle form, to be used with torrent files that have a very specific filename structure
- // ==UserScript==
- // @name Gazelle Autofiller
- // @description Automatically fills a Gazelle form, to be used with torrent files that have a very specific filename structure
- // @namespace shurelia
- // @include http*://passtheheadphones.me/upload.php*
- // @include http*://apollo.rip/upload.php*
- // @include http*://notwhat.cd/upload.php*
- // @include http*://hydra.zone/upload.php*
- // @version 0.2.3
- // @require https://greasyfork.org/scripts/13016-bencode-encoder-decoder/code/Bencode%20encoderdecoder.js?version=79776
- // @require https://greasyfork.org/scripts/13017-rusha/code/Rusha.js?version=79803
- // ==/UserScript==
- if (!Array.prototype.last){
- Array.prototype.last = function(){
- return this[this.length - 1];
- };
- };
- String.prototype.trimChar = function(chr) {
- var str = this;
- while(str.charAt(0) == chr) {
- str = str.substring(1);
- }
- while(str.charAt(str.length-1) == chr) {
- str = str.substring(0, str.length-1);
- }
- return str;
- };
- var Torrent = function(binaryString)
- {
- var self = this,
- uniqueStringChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
- mimeType = "application/x-bittorrent",
- data = bencode.decode(binaryString),
- originalAnnounceUrl = "announce" in data ? data.announce : "",
- calculateHash = function() {
- return new Rusha().digestFromBuffer(bencode.encode(data.info)).toUpperCase();
- },
- originalHash = calculateHash(),
- hash = originalHash;
- self.getBinary = function() {
- return bencode.encode(data);
- };
- self.getName = function() {
- return decodeURIComponent(escape(data.info.name));
- };
- self.setAnnounceUrl = function(value) {
- data.announce = value;
- return this;
- };
- self.getAnnounceUrl = function() {
- return data.announce;
- };
- self.getOriginalAnnounceUrl = function() {
- return originalAnnounceUrl;
- };
- self.getHash = function() {
- return hash;
- };
- self.getOriginalHash = function() {
- return originalHash;
- };
- var randomString = function (length) {
- var text = "";
- for (var i = 0; i < length; i++) {
- text += uniqueStringChars.charAt(Math.floor(Math.random() * uniqueStringChars.length));
- }
- return text;
- };
- self.changeHash = function() {
- data.info.private = 1;
- data.info.unique = randomString(30);
- hash = calculateHash();
- return hash;
- };
- self.getDownloadLink = function(text) {
- var a = document.createElement("a");
- a.setAttribute("href", "javascript:void(0);");
- a.textContent = text ? text : hash;
- a.style.cursor = "pointer";
- a.onclick = self.downloadTorrent;
- return a;
- };
- self.downloadTorrent = function(){
- var uri = "data:application/x-bittorrent;base64," + btoa(bencode.encode(data));
- var link = document.createElement("a");
- link.href = uri;
- link.style = "visibility:hidden";
- link.download = self.getName() + ".torrent";
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- return false;
- };
- self.countFiles = function(){
- return data.info.files ? data.info.files.length : 0;
- };
- self.getFiles = function() {
- return data.info.files ? data.info.files : [];
- };
- self.getTrackerId = function() {
- return originalAnnounceUrl.split('://')[1].split('/')[0].split(':')[0].replace(/^tracker\./, "").replace(/^please\./, "");
- };
- self.getTotalSize = function() {
- var files = data.info.files;
- var size = 0;
- if (files && files instanceof Array) {
- for (var i = 0, file; file = files[i]; i++) {
- if (file.length) {
- size += file.length;
- }
- }
- }
- return size;
- };
- self.getBlob = function() {
- var i, l, array,
- binary = self.getBinary();
- l = binary.length;
- array = new Uint8Array(l);
- for (i = 0; i < l; i++){
- array[i] = binary.charCodeAt(i);
- }
- return new Blob([array], {type: mimeType});
- }
- };
- (function()
- {
- var self = this;
- var fileInput = document.getElementById("file");
- if (!fileInput) {
- console.log("File input not found.");
- return;
- }
- self.input = fileInput;
- self.form = self.input.closest("form");
- self.host = document.location.href.split('://')[1].split('/')[0].split(':')[0].replace(/^(www|tls|ssl)\./, "");
- self.formats = {
- flac: 'FLAC',
- mp3: 'MP3',
- ogg: 'Ogg Vorbis',
- m4a: 'AAC'
- };
- fileInput.addEventListener("change", function(ev) {
- if (ev.target.files[0].name.toLowerCase().indexOf(".torrent") === -1) {
- return;
- }
- var reader = new FileReader();
- reader.onload = function(e) {
- self.addTorrent(e.target.result, ev.target.files[0].name);
- };
- reader.readAsBinaryString(ev.target.files[0]);
- });
- self.addTorrent = function(binaryString, filename)
- {
- try {
- self.analyze(new Torrent(binaryString), filename);
- } catch (e) {
- console.log(e);
- }
- };
- self.analyze = function(torrent, filename) {
- console.log(filename)
- var i, l, ext, format, media, bitrate, year, artist, album,
- torrentName = torrent.getName(),
- files = torrent.getFiles();
- var seg = filename.replace(/\).*?\.torrent/gi, "");
- seg = filename.split(/\s\(|\s-\s/g);
- artist = seg[0];
- bitrate = "Lossless";
- format = seg[seg.length-2];
- media = seg[seg.length-3];
- year = seg[seg.length-4];
- console.log(year);
- album = ""
- for (var i = 1; i<seg.length-4; i++) {
- if (i > 1) { album += " - "; }
- album += seg[i];
- }
- if (format === 'FLAC') {
- document.getElementById('upload_logs').className = "";
- }
- self.generateReleaseDesc(torrent);
- if (artist) {
- self.setArtist(artist);
- }
- if (album) {
- self.setAlbum(album);
- }
- if (format) {
- self.setFormat(format);
- }
- if (media) {
- self.setMedia(media);
- }
- if (bitrate) {
- self.setBitrate(bitrate);
- }
- if (year) {
- self.setYear(year);
- }
- };
- self.setArtist = function (artist) {
- document.getElementById('artist').value = artist;
- };
- self.setAlbum = function (album) {
- document.getElementById('title').value = album;
- };
- self.setYear = function (year) {
- document.getElementById('year').value = year;
- };
- self.setFormat = function (format) {
- document.getElementById('format').value = format;
- };
- self.setMedia = function (media) {
- document.getElementById('media').value = media;
- };
- self.setBitrate = function (bitrate) {
- document.getElementById('bitrate').value = bitrate;
- };
- self.generateReleaseDesc = function (torrent) {
- var tracks = [], files = torrent.getFiles();
- for (var i = 0, l = files.length; i < l; i++) {
- ext = files[i].path[0].split('.').last().toLowerCase();
- if (!self.formats.hasOwnProperty(ext)) continue;
- tracks.push('[#]' + files[i].path[0].replace(/^[\d\(\)\[\]]+\.?\s*\-?/, '').replace(/\.([a-zA-Z0-9]+)$/, '').trim());
- }
- document.getElementById('album_desc').value = "[size=2][b]Tracklist:[/b][/size]\n" + tracks.join("\n");
- };
- })();