diff --git a/app/Class/Oauth.php b/app/Class/Oauth.php index 19e964d..9176295 100644 --- a/app/Class/Oauth.php +++ b/app/Class/Oauth.php @@ -27,7 +27,7 @@ class Oauth{ } } echo "-----缺少用户登录参数:token, user_id, passkey, site \n"; - echo "-----当前正在使用测试接口,功能会受到限制! \n\n"; + echo "-----当前正在使用测试接口,功能可能会受到限制! \n\n"; return false; } /** @@ -37,7 +37,12 @@ class Oauth{ global $configALL; // 爱语飞飞 $token = isset($configALL['iyuu.cn']) && $configALL['iyuu.cn'] ? $configALL['iyuu.cn'] : ''; - // 鉴权 + if (empty($token) || strlen($token)<46) { + echo "缺少辅种接口请求参数:爱语飞飞token \n"; + echo "请访问https://iyuu.cn 用微信扫码申请,并填入配置文件config.php内。\n\n"; + exit(1); + } + // 发布员鉴权 #$token = isset($configALL['secret']) && $configALL['secret'] ? $configALL['secret'] : $token; return $token; } diff --git a/app/Protocols/hdstreet.php b/app/Protocols/hdstreet.php new file mode 100644 index 0000000..3c7489d --- /dev/null +++ b/app/Protocols/hdstreet.php @@ -0,0 +1,206 @@ +<?php +/** + * hdstreet解码类 + */ +use phpspider\core\requests; +use phpspider\core\selector; + +class hdstreet implements decodeBase +{ + /** + * 站点标志 + * @var string + */ + const SITE = 'hdstreet'; + /** + * 域名 + * @var string + */ + const domain = 'hdstreet.club'; + const HOST = 'https://'.self::domain.'/'; + // 下载种子的请求类型 + const METHOD = 'GET'; + /** + * 种子存放路径 + * @var string + */ + const TORRENT_DIR = TORRENT_PATH . self::SITE . DS; + /** + * 种子下载前缀 + */ + const downloadPrefix = 'download.php?id='; + /** + * 种子详情页前缀 + */ + const detailsPrefix = 'details.php?id='; + // 网页编码 + const encoding = 'UTF-8'; + // 超时时间 + const CONNECTTIMEOUT = 30; + const TIMEOUT = 600; + /** + * cookie + */ + public static $cookies = ''; + /** + * 浏览器 User-Agent + */ + public static $userAgent = ''; + /** + * passkey + */ + public static $passkey = ''; + /** + * 获取的种子标志 + */ + public static $getTorrent = array('class="pro_free'); + /** + * H&R 标志 + */ + public static $HR = array('class="hitandrun"','alt="H&R"','title="H&R"'); + /** + * 解码后种子列表数组 + */ + public static $TorrentList = array(); + /** + * 初始化配置 + */ + public static function init(){ + global $configALL; + + $config = $configALL[self::SITE]; + self::$cookies = $config['cookie']; + self::$userAgent = isset($config['userAgent']) && $config['userAgent'] ? $config['userAgent'] : $configALL['default']['userAgent']; + self::$passkey = isset($config['passkey']) ? '&passkey='.$config['passkey'].'&https=1' : ''; + + requests::$input_encoding = self::encoding; //输入的网页编码 + requests::$output_encoding = self::encoding; //输出的网页编码 + requests::set_cookies(self::$cookies, self::domain); + requests::set_useragent([self::$userAgent]); + requests::set_timeout([self::CONNECTTIMEOUT,self::TIMEOUT]); + } + + /** + * 执行 + * + * @param string + * @return array + */ + public static function run() + { + self::init(); + Rpc::init(self::SITE, self::METHOD); + $html = self::get(); + #p($html);exit; + if ( $html === null ) { + exit(1); + } + $data = self::decode($html); + #p($data);exit; + Rpc::call($data); + exit(0); + } + + /** + * 请求页面 + * + * @param string $url + * @return array + */ + public static function get($url = 'torrents.php') + { + // 发起请求 + $html = requests::get(self::HOST.$url); + #p($html);exit; + $offset = strpos($html,'<img class="size" src="pic/trans.gif" alt="size" title="大小" /></a></td>'); + $offsetEnd = strpos($html,'target="_self" title="查看两倍上传量种子"><font class='); + $html = substr($html,$offset,$offsetEnd); + // 获取列表页数据 + $data = selector::select($html, "//table"); + if(!$data){ + echo "登录信息过期,请重新设置! \n"; + return null; + } + return $data; + } + + /** + * 解码 + * + * @param array $data + * @return array + */ + public static function decode($data = array()) + { + $downloadStrLen = strlen(self::downloadPrefix); // 前缀长度 + $downloadStrEnd = '"'; //种子地址结束标志 + $len = $downloadStrLen + 10; // 截取长度 + foreach ( $data as $k => $v ){ + $arr = array(); + // 种子基本信息处理 + // 偏移量 + $offset = strpos($v,self::downloadPrefix); + // 截取 + $urlTemp = substr($v,$offset,$len); + // 种子地址 + $arr['url'] = substr($urlTemp,0,strpos($urlTemp,$downloadStrEnd)); + // 种子id + $arr['id'] = substr($arr['url'],$downloadStrLen); + + // 获取主标题 + // 偏移量 + $h1_offset = strpos($v, '<a title="') + strlen('<a title="'); + $h1_temp = substr($v, $h1_offset); + $h1_len = strpos($h1_temp, '"'); + $arr['h1'] = substr($v, $h1_offset, $h1_len); + if (strpos($arr['h1'],'&#x') != false) { + $arr['h1'] = mb_convert_encoding($arr['h1'], 'UTF-8', 'HTML-ENTITIES'); + } + + // 获取副标题(倒序算法) + // 偏移量 + $h2StrStart = '<br/>'; + $h2StrEnd = '</td><td'; + $h2_endOffset = strpos($v,$h2StrEnd); + $temp = substr($v, 0, $h2_endOffset); + $h2_offset = strrpos($temp,$h2StrStart); + if ($h2_offset === false ) { + $arr['title'] = ''; + } else { + $h2_len = strlen($temp) - $h2_offset - strlen($h2StrStart); + //存在副标题 + $arr['title'] = substr($temp, $h2_offset + strlen($h2StrStart), $h2_len); + $arr['title'] = selector::remove($arr['title'], "//div"); + // 第二次过滤 + if ( strpos($arr['title'],'</td>') != false ) { + $arr['title'] = str_replace('</td><td',"",$arr['title']); + } + } + + // 组合返回数组 + self::$TorrentList[$k]['id'] = $arr['id']; + self::$TorrentList[$k]['h1'] = $arr['h1']; + self::$TorrentList[$k]['title'] = isset( $arr['title'] ) && $arr['title'] ? $arr['title'] : ''; + self::$TorrentList[$k]['details'] = self::HOST.self::detailsPrefix.$arr['id']; + self::$TorrentList[$k]['download'] = self::HOST.$arr['url']; + self::$TorrentList[$k]['filename'] = $arr['id'].'.torrent'; + + // 种子促销类型解码 + if(strpos($v,self::$getTorrent[0]) === false){ + // 不免费 + self::$TorrentList[$k]['type'] = 1; + }else{ + // 免费种子 + self::$TorrentList[$k]['type'] = 0; + } + // 存活时间 + // 大小 + // 种子数 + // 下载数 + // 完成数 + // 完成进度 + } + #p(self::$TorrentList); + return self::$TorrentList; + } +} diff --git a/app/Protocols/moecat.php b/app/Protocols/moecat.php index 1fc21de..4aee9b2 100644 --- a/app/Protocols/moecat.php +++ b/app/Protocols/moecat.php @@ -1,7 +1,7 @@ <?php /** * moecat.best解码类 - * + * */ use phpspider\core\requests; use phpspider\core\selector; @@ -189,7 +189,7 @@ class Moecat implements decodeBase } $titleSpan.='['.$vv.'] '; } - }else{ + }else{ $titleSpan.='['.$span.'] '; } } diff --git a/app/config/config.sample.php b/app/config/config.sample.php index 3fe3ada..4578aeb 100644 --- a/app/config/config.sample.php +++ b/app/config/config.sample.php @@ -349,6 +349,13 @@ return array( // 如果需要自动辅种,必须配置 'passkey' => '', ), + // hdstreet 序号:34 + 'hdstreet' => array( + // 如果需要用下载免费种脚本,须配置(只是自动辅种,可以不配置此项) + 'cookie' => '', + // 如果需要自动辅种,必须配置 + 'passkey' => '', + ), // 配置文件结束 ); \ No newline at end of file diff --git a/app/config/version.php b/app/config/version.php index dfa8c67..903caa7 100644 --- a/app/config/version.php +++ b/app/config/version.php @@ -1 +1 @@ -<?php return '20191221.1920'; +<?php return '20191224.1010'; diff --git a/app/hdstreet.php b/app/hdstreet.php new file mode 100644 index 0000000..68df938 --- /dev/null +++ b/app/hdstreet.php @@ -0,0 +1,3 @@ +<?php +require_once __DIR__ . '/init.php'; +hdstreet::run(); \ No newline at end of file diff --git a/iyuu.cn.php b/iyuu.cn.php index aa1d06c..d43e471 100644 --- a/iyuu.cn.php +++ b/iyuu.cn.php @@ -304,21 +304,25 @@ class iyuuAutoReseed // 可辅种站点信息列表 $sites = $resArray['sites']; #p($sites); + // 按客户端循环辅种 foreach (self::$links as $k => $v) { $reseed = $infohash_Dir = array(); if (empty($resArray['clients_'.$k])) { echo "clients_".$k."没有查询到可辅种数据 \n\n"; continue; } + // 当前客户端辅种数据 $reseed = $resArray['clients_'.$k]; // info_hash 对应的下载目录 $infohash_Dir = self::$links[$k]['hash']; foreach ($reseed as $info_hash => $vv) { + // 当前种子哈希对应的目录 $downloadDir = $infohash_Dir[$info_hash]; foreach ($vv['torrent'] as $id => $value) { $sitesID = $value['sid']; $url = $_url = ''; $download_page = ''; + // 页面规则 $download_page = str_replace('{}', $value['torrent_id'], $sites[$sitesID]['download_page']); $_url = 'https://' .$sites[$sitesID]['base_url']. '/' .$download_page; if (empty($configALL[$sites[$sitesID]['site']]['passkey'])) { @@ -340,24 +344,25 @@ class iyuuAutoReseed break; } // 检查不辅种的站点 - // 判断是否VIP/特殊权限? + // 判断是否VIP或特殊权限? $is_vip = isset($configALL[$sites[$sitesID]['site']]['is_vip']) && $configALL[$sites[$sitesID]['site']]['is_vip'] ? 1 : 0; if ( (in_array($sites[$sitesID]['site'], self::$noReseed)==false) || $is_vip ) { // 可以辅种 if ( isset($infohash_Dir[$value['info_hash']]) ) { // 与客户端现有种子重复 echo '-------与客户端现有种子重复:'.$_url."\n\n"; + continue; }else{ // 判断上次是否成功添加? if ( is_file(self::$cacheHash . $value['info_hash'].'.txt') ) { echo '-------当前种子上次辅种已成功添加,已跳过!'.$_url."\n\n"; continue; } - // 把拼接的种子URL,推送给下载器 - $ret = false; + $ret = false; + // 成功返回:true $ret = self::add($k, $url, $downloadDir); - // 写日志 + // 添加成功的种子,以infohash为文件名,写入缓存 if ($ret) { // 文件句柄 $resource = fopen(self::$cacheHash . $value['info_hash'].'.txt', "wb"); @@ -382,6 +387,9 @@ class iyuuAutoReseed } } } + /** + * 正常做种的种子在各下载器的互相转移 + */ public static function move($torrent=array(), $type = 'qBittorrent'){ switch($type){ case 'transmission': diff --git a/readme.md b/readme.md index afdee17..77c5a46 100644 --- a/readme.md +++ b/readme.md @@ -16,10 +16,14 @@ IYUU自动辅种工具(英文名:iyuuAutoReseed),是一款PHP语言编 1. transmission 2. qBittorrent +## 支持自动辅种的站点 +学校、杜比、家园、天空、朋友、馒头、萌猫、我堡、猫站、铂金家、烧包、北洋、TCCF、南洋、TTG、映客、城市、52pt、brobits、备胎、SSD、CHD、ptmsg、leaguehd、聆音、瓷器、hdarea、eastgame(TLF)、1ptba、hdtime、hd4fans、opencd、hdbug、hdstreet。 + ## 运行环境 所有具备PHP运行环境的所有平台! 例如:Linux、Windows、MacOS - 1. Windows下安装php环境:https://www.php.net/downloads,官方下载的记得开启crul、fileinfo、mbstring,这3个扩展。 + 1. Windows下安装php环境:https://www.php.net/downloads + 官方下载的记得开启crul、fileinfo、mbstring,这3个扩展。 ## 下载源码 - 码云仓库:https://gitee.com/ledc/IYUUAutoReseed diff --git a/wiki/更新历史.md b/wiki/更新历史.md index 1fff2d7..b46b29c 100644 --- a/wiki/更新历史.md +++ b/wiki/更新历史.md @@ -1,3 +1,8 @@ +### 2019年12月24日 +新增hdstreet + +------ + ### 2019年12月23日 鉴权模式上线试运行 @@ -6,7 +11,6 @@ ### 2019年12月21日 新增兽站、opencd、hdbug; -自动辅种33个站:学校、杜比、家园、天空、朋友、馒头、萌猫、我堡、猫站、铂金家、烧包、北洋、TCCF、南洋、TTG、映客、城市、52pt、brobits、备胎、SSD、CHD、ptmsg、leaguehd、聆音、瓷器、hdarea、eastgame、1ptba、hdtime、hd4fans、opencd、hdbug。 ------