自动化辅种工作原理、设计原型及Reseed数据表结构

自动化辅种工具暂定名字:IYUU自动辅种工具,兼容支持TJUPT站大神的Reseed辅种方式,支持transmission、qBittorrent,支持多盘位、多目录。
IYUU自动辅种交流群二维码.png

工作原理

IYUU自动辅种工具客户端脚本每12个小时,扫描transmission、qBittorrent里面正在做种的种子,经过计算、去重等,提取info_hash种子特征,请求IYUU自动辅种工具服务器API接口,根据API接口返回的辅种链接,添加辅种任务,自动辅种各个站点。


优势

  • 全程自动化,无需人工干预!
  • 支持多盘位多目录辅种!
  • 依靠特征库,辅种精确度100%
  • 支持微信通知,消息即时达!
  • 兼容支持TJUPT站大神的Reseed辅种方式

架构

服务器端API部署到腾讯云,只负责API接口,下发RSS订阅任务!(重庆4区:1核 1G 5Mbps)
RSS订阅脚本部署在2台N1上,长期挂机!负责订阅各站新种!(放在2个不同的家庭网络 下行500M/上行50M)
分布式爬虫部署在群晖上!(初始化各站数据库)


IYUU自动辅种工具服务器端

API接口:

  1. 接收客户端脚本的辅种请求,返回各站点可辅种的种子链接;(推荐24小时/次)
  2. 接收RSS采集脚本新种子入库请求,返回入库信息;
  3. 接收客户端微信通知的订阅请求(可订阅各个站点的新种通知等,限量内侧或权贵开放);
  4. 处理WEBUI的请求,前后端分离
  5. 兼容支持TJUPT站大神的Reseed辅种方式

定时器

  1. 处理Redis队列,执行数据库操作;
  2. 统计接口调用情况
  3. 处理客户端的站点订阅信息
  4. 智能分配采集任务

原则:服务器上坚决不保存各站点的种子文件,只保存数据表各字段的特征码!!!!!
详情查阅数据字典!


IYUU自动辅种工具数据采集

RSS订阅脚本

  • 推荐在常开机的下载机、树莓派、N1这种低功耗廉价终端上部署;
  • 订阅新种信息,计算info_hash、pieces_hash等种子特征信息后,提交到API接口更新;
  • 接收服务器分配的新站的RSS订阅请求,自动更新配置(可开关);

爬虫脚本

  • 主要是建立初始数据库,每个站点只运行一次;
  • 爬取目标站所有种子,计算info_hash、pieces_hash等种子特征信息后,提交到API接口添加;

爬虫脚本风险:可能触发种子下载频率限制,造成封号(如管理同意或直接给数据最好)

关键的Hash算法:

关键算法.png


IYUU自动辅种工具客户端

【完全开源,接受安全性监督】
辅种脚本
通过计划任务或常驻内存,按指定频率检测transmission、qBittorrent等的做种情况,提取info_hash并提交到API接口,根据API接口返回的辅种链接,自动添加辅种任务,自动辅种各个站点。
辅种算法
返回辅种数据列表,精确度如下:
picecs_hash匹配出来的是种子文件都相同,精确度100%;(直接转载)
files_name_hash匹配出来的是所有文件相同的种子,精确度95%;(重新制种)
files_hash匹配出来的是子文件夹文件相同的种子,精确度70%;(更改了根目录名称)
info_hash只是特殊情况下参考,暂时没用到。

【普通用户,只需要部署辅种脚本即可,没有任何风险】

RSS订阅脚本

  • 订阅新种信息

爬虫脚本

  • 模拟登录目标站,爬取最新免费种子,添加下载任务;

IYUU自动辅种工具数据表结构【2019年11月28日】

-- phpMyAdmin SQL Dump
-- version 4.0.10.20
-- https://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2019-11-28 19:13:18
-- 服务器版本: 5.5.62
-- PHP 版本: 5.5.38

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- 数据库: `reseed`
--

-- --------------------------------------------------------

--
-- 表的结构 `error_torrents`
--

CREATE TABLE IF NOT EXISTS `error_torrents` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `sid` int(11) unsigned NOT NULL COMMENT '站点id',
  `torrent_id` int(11) unsigned NOT NULL COMMENT '第三方种子id',
  `reason` varchar(100) NOT NULL COMMENT '错误原因',
  `added_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- 表的结构 `historys`
--

CREATE TABLE IF NOT EXISTS `historys` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(11) unsigned NOT NULL COMMENT '用户ID',
  `added_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `hash` varchar(50) NOT NULL COMMENT '信息的唯一hash',
  `result` text NOT NULL COMMENT '提交的信息',
  `ip` varchar(40) NOT NULL COMMENT 'ip地址',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- 表的结构 `sites`
--

CREATE TABLE IF NOT EXISTS `sites` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '站点id',
  `site` varchar(30) NOT NULL COMMENT '站点名',
  `base_url` varchar(50) NOT NULL,
  `download_page` varchar(50) NOT NULL DEFAULT 'download.php?id={}',
  `rss_page` varchar(255) NOT NULL DEFAULT 'torrentrss.php?rows=50&passkey={}&linktype=dl',
  `torrents_page` varchar(50) NOT NULL DEFAULT 'torrents.php?incldead=0&page={}',
  `enabled` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `passkey` varchar(50) DEFAULT NULL,
  `cookies` mediumtext,
  `user_agent` varchar(255) DEFAULT NULL,
  `skip_page` int(11) unsigned NOT NULL DEFAULT '0',
  `is_show` tinyint(1) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `site` (`site`),
  UNIQUE KEY `passkey` (`passkey`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- 表的结构 `torrents`
--

CREATE TABLE IF NOT EXISTS `torrents` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(300) NOT NULL COMMENT '种子name',
  `files` longtext COMMENT '种子files',
  `length` bigint(20) unsigned NOT NULL COMMENT '种子length',
  `files_hash` varchar(50) NOT NULL COMMENT 'files的sha1',
  `pieces_hash` varchar(50) NOT NULL COMMENT '唯一种子pieces的hash',
  `added_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `pieces_hash` (`pieces_hash`),
  KEY `name` (`name`),
  KEY `files_hash` (`files_hash`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- 表的结构 `torrent_records`
--

CREATE TABLE IF NOT EXISTS `torrent_records` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `sid` int(11) unsigned NOT NULL COMMENT '对应sites表站点id',
  `tid` int(11) unsigned NOT NULL COMMENT '对应torrents表id',
  `search_id` int(11) unsigned NOT NULL COMMENT '对应torrent_search表id',
  `torrent_id` int(11) unsigned NOT NULL COMMENT '第三方种子id',
  `info_hash` varchar(50) NOT NULL COMMENT '第三方唯一种子info_hash',
  `added_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `info_hash` (`info_hash`),
  KEY `search_id` (`search_id`),
  KEY `tid` (`tid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- 表的结构 `torrent_search`
--

CREATE TABLE IF NOT EXISTS `torrent_search` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `h1` varchar(300) NOT NULL COMMENT '主标题',
  `title` varchar(300) DEFAULT NULL COMMENT '副标题',
  PRIMARY KEY (`id`),
  KEY `title` (`title`),
  KEY `h1` (`h1`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='种子搜索信息表' AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- 表的结构 `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL COMMENT '用户名',
  `passhash` varchar(100) NOT NULL COMMENT '用户名+密码hash',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `sid` int(11) unsigned NOT NULL COMMENT '站点id',
  `openid` varchar(50) DEFAULT NULL COMMENT '第三方用户唯一标识',
  `token` varchar(60) DEFAULT NULL,
  `activated` int(11) NOT NULL COMMENT '最后登录时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

服务器端种子匹配关键算法

服务端种子匹配算法关键部分.png

最后修改:2019 年 12 月 22 日 02 : 50 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论