Skip to content

qfishpear/fishrss

Repository files navigation

English Version of README: README-en.md

Gazelle r种增强脚本

本脚本集合主要目的是增强gazelle站里r种刷流的体验

目前支持海豚、red、ops、毒蛇

功能

有以下主要功能

  • 种子过滤。对irssi或者别的方式得到的种子进行个性化过滤,目前支持按体积/发行类别/格式来过滤,并支持根据拉黑列表过滤发布者,对bt客户端没有要求
  • 智能使用令牌。根据体积限制对符合要求的种子使用令牌。对bt客户端没有要求。由于违反规则RED/OPS不支持此功能
  • 自动拉黑。自动拉黑低分享率种子的发布者,仅支持deluge
  • deluge数据导出,方便分析刷流情况
  • deluge删除网站上被删种的种子(unregistered torrents)
  • 扫描文件夹辅种。对bt客户端没有要求。

安装依赖

本脚本仅支持python3,所以你首先需要安装一个python3的环境,这个怎么搞自行上网搜索,正确安装在之后你打开命令行输入

python3 --version

之后应该能看到python安装的版本信息

之后安装本程序依赖的包(win用户/root用户省略sudo):

sudo pip3 install bencode.py ipython requests datasize deluge-client

如果没有root权限,可以使用--user

pip3 install bencode.py ipython requests datasize deluge-client --user

或者使用virtualenv等手段(请自行上网查阅)

下载本脚本

in case你不知道怎么下载:

git clone https://github.com/qfishpear/fishrss.git
cd fishrss/

填写配置信息

首先你需要将config.py.example复制一份为config.py

cp config.py.example config.py

然后按照config.py里面的提示填写,并创建好所有已填写的文件/文件夹。

所有路径可以填写相对路径,但是如果要crontab等方式运行,填写绝对路径更为保险

填写路径的时候,如果是Windows,依然建议使用左斜杠/而非右斜杠\作为路径的分隔符,除非你知道自己在写什么。

我应该填写哪些信息

不同的脚本对于配置中需要的信息不一样,如果你不需要全套的脚本则不需要全部填写,以下信息是必须的(填为None也视为一种填写)

  • 如果要使用海豚,至少需要填写CONFIG["dic"]里的"api_cache_dir", "cookies""authkey", "torrent_pass"
  • 如果要使用red,至少需要填写CONFIG["red"]里的"api_cache_dir""authkey", "torrent_pass", 而"cookies""api_key"两个要填至少一个,如果不填写"cookies",请保持它被注释掉的状态
  • 如果要使用ops,至少需要填写CONFIG["ops"]里的"api_cache_dir""authkey", "torrent_pass", 而"cookies""api_key"两个要填至少一个,如果不填写"cookies",请保持它被注释掉的状态
  • 如果要使用毒蛇,至少需要填写CONFIG["snake"]里的"api_cache_dir""cookies""authkey", "torrent_pass"

除了种子过滤以外如果要使用其他脚本,强烈建议填写api_cache_dir并创建对应文件夹,否则多次运行会反反复复向网站发同样的请求导致运行特别慢。脚本运行后此文件夹下应当生成了若干个json文件,是保存的网站api的缓存。

各个脚本所需要的信息我会在对应项目下说明。

验证config

为了验证config填没填对,可以运行

python3 check_config.py

来检查,正确填写时,应当输出类似以下内容。当然,检查通过不代表config填写完全正确。

2021-04-30 22:17:21,335 - INFO - dic querying action=index
2021-04-30 22:17:22,118 - INFO - dic logged in successfully, username:fishpear uid: 1132
2021-04-30 22:17:22,119 - INFO - red querying action=index
2021-04-30 22:17:22,604 - INFO - red logged in successfully, username:fishpear uid: 50065
2021-04-30 22:17:22,606 - INFO - ops querying action=index
2021-04-30 22:17:22,888 - INFO - ops logged in successfully, username:fishpear uid: 21482
2021-04-30 22:17:22,889 - INFO - snake querying action=index
2021-04-30 22:17:23,210 - INFO - snake logged in successfully, username:fishpear uid: 10084
2021-04-30 22:17:23,228 - INFO - deluge is correctly configured

如何获取cookie, authkey, torrent_pass

请参考本repo内README.rss.md内的相关内容

如何获取api_key

red:打开你的个人设置,然后看下图: 4.png ops:同样打开个人设置,然后照葫芦画瓢

怎么编辑配置文件

对于完全不知道python的小白,你需要一个正常的文本编辑器,这里推荐sublime:

https://www.sublimetext.com/

用sublime打开配置文件config.py,正常来说会识别这是一个python文件,如果没有,请点击右下角

1.JPG

并手动选择python

2.JPG

这样sublime就会对代码进行语法高亮,对于你填的格式错误会给予提示

在sublime里把某个选项填为None之后应该是这样显示的,不需要加引号:

3.JPG

怎么对一段代码添加注释/去除注释

python里,注释的意思是在一行代码前面添加井号#

在sublime里,如果要注释掉一段代码,或者取消一整段代码的注释,请选中这一段代码并按快捷键ctrl+/,其中/是问号那个键

种子过滤与智能令牌filter.py

简单来说本脚本的功能是监控source_dir内的种子,将满足设定条件的种子转存到dest_dir中,并根据种子体积限制智能使用令牌。

警告

  • 种子过滤会增加延迟,一些情况下会影响刷流,使用前请考虑清楚。
  • 本脚本自动使用token的逻辑不会检查你是否还有token,当你网站token已用光之后,r种依然会继续,此时你将会进入不用令牌r种的状态,请做好心理准备。

填写配置信息

  • CONFIG["filter"]下的所有信息:"source_dir", "dest_dir", "default_behavior"
  • 对于海豚/red/ops/毒蛇,分别填写对应CONFIG["dic"/"red"/"ops"/"snake"]的以下内容:
  • "filter_config"下的所有信息:"name", "banlist", "whitelist", "media", "format", "sizelim"
  • "token_thresh"(仅dic可以填写)

运行

方式1:监控文件夹

python3 filter.py

即可,这个脚本会持续监控指定文件夹,然后将满足过滤条件的种子保存到另一个指定文件夹下。监控文件夹下的种子被检查后会被删除。

为了缓解黑屏焦虑症,这个脚本每分钟会输出一行"tick"

当你修改config.py之后,要重新运行,请按ctrl-c掐掉原来运行的filter.py,再重新运行。

例子:用监控文件夹时 config.py, autodl, deluge分别填写的监控目录: 1.JPG 2.JPG 3.JPG

方法2:参数调用

栗子:

python3 filter.py --file ./1.torrent
python3 filter.py --url https://redacted.ch/torrents.php?action=download\&id=xxxx\&authkey=xxxx\&torrent_pass=xxx

注意,这样调用会跳过登陆的检查,所以建议先跑一下check_config.py确认配置信息没填错

如果要使用irssi: 修改preference->action,像这样:

1.JPG

上面填python可执行文件的路径,下面填(如果路径有空格或者一些奇怪字符的话必须像这样加上引号,没有的话不加也行)

"/absolute/path/to/filter.py" --file "$(TorrentPathName)"

另外,填这样也是可以的,但会略慢于上面的:

"/absolute/path/to/filter.py" --url $(TorrentUrl)

如果要用irssi这样使用本脚本,配置文件内所有路径必须是绝对路径。

参数解释

  • --url URL 从URL添加种子,使用此功能则只运行一次,不再监控文件夹
  • --file FILE 从文件FILE添加种子,使用此功能则只运行一次,不再监控文件夹
  • --skip-api 不请求api,注意,如果使用此功能则filter_config中涉及必须api获取的信息(format, media)必须全部是None,否则任何种子都无法通过过滤
  • --no-tick 不再每分钟输出一行tick
  • --deluge 直接推送种子到deluge客户端,而不存储到dest_dir
  • --force-accept 强制接受,忽略filter_config内填的任何内容

部分log节选

隐私已去除

2021-04-12 18:28:37,392 - INFO - api and filter of RED are set
2021-04-12 18:28:37,392 - INFO - api and filter of DIC are set
......
2021-04-12 19:04:14,717 - INFO - new torrent from red: xxxxxxxxxxxxxxxxx
2021-04-12 19:04:14,718 - INFO - red querying action=torrent&id=xxxxxxxxxxxxxxxxx
2021-04-12 19:04:15,465 - INFO - redfilter: checking
2021-04-12 19:04:15,465 - INFO - uploader: xxxxxxxxxxxxxxxxx media: CD format: FLAC releasetype: 9 size: 114.9MB
2021-04-12 19:04:15,465 - INFO - reject: banned user
2021-04-12 19:04:22,676 - INFO - tick
2021-04-12 19:04:52,522 - INFO - new torrent from red: xxxxxxxxxxxxxxxxx
2021-04-12 19:04:52,523 - INFO - red querying action=torrent&id=xxxxxxxxxxxxxxxxx
2021-04-12 19:04:53,428 - INFO - redfilter: checking
2021-04-12 19:04:53,428 - INFO - uploader: xxxxxxxxxxxxxxxxx media: CD format: FLAC releasetype: 1 FLAC size: 224.7MB
2021-04-12 19:04:53,429 - INFO - accept
2021-04-12 19:05:23,673 - INFO - tick
2021-04-12 19:06:23,760 - INFO - tick
2021-04-12 19:07:23,858 - INFO - tick
2021-04-12 19:08:23,944 - INFO - tick
2021-04-12 19:09:24,031 - INFO - tick

自动拉黑autoban.py

本脚本会读取deluge里种子的信息,将满足设定条件的发种人添加到CONFIG["red"/"ops"/"dic"/"snake"]["filter_config"]["banlist"]文件内

此脚本和filter.py分别独立运行,二者只通过banlist文件进行交互。

拉黑规则

以下为config["red"/"ops"/"dic"]["autoban"]下的内容:

  • 只统计种子完成度大于autoban["ignore"]["min_progress"],且距离发种时间少于autoban["ignore"]["max_time_added"]的种子
  • 对于autoban["ratio"]下的任意一个条目:如果某发种人发种数量不少于"count"且总ratio低于"ratiolim",则ban掉此发种人

填写配置信息

  • 要对red/ops/dic进行自动拉黑,则CONFIG["red"/"ops"/"dic"/"snake"]["filter_config"]["banlist"]必须已经填写
  • CONFIG["deluge"]下的所有信息:"ip", "port", "username", "password"。其中ip和port应当和connection manager下的信息一致。username和password是deluge登陆webui所输的账号和密码,如果你登录的时候不需要输,可能可以随便填(关于这一点我也不是很确定)。
    5.JPG
  • config["red"/"ops"/"dic"/"snake"]["autoban"]下的所有信息

运行

第一次运行请加个参数--init

python3 autoban.py --init

之后每次运行只需要运行

python3 autoban.py

这个只会运行一次,要持续拉黑请自己设定定时运行,如crontab/watch/Windows定时任务等,以watch为例:

样例:每2分钟运行一次

watch -n 120 python3 autoban.py

注意,autoban.py运行时会去请求已配置信息的网站获取种子信息,受限于api频率限制第一次运行可能会比较慢

参数解释

  • --init:如果添加,那么默认情况下如果一个发种人最近1小时没有发种且没有未完成种子,则无视他。添加之后则会对有满足"ignore"过滤条件种子的全部发种人进行自动拉黑。默认情况下的目的是为了防止一些发种人因为max_time_added带来的滑动窗口而被ban掉。
  • --site:可设置为red/ops/dic,只运行指定站点的拉黑逻辑。
  • --stats:输出统计信息,如果你对ban人的情况有疑问的话可以看一看,部分log节选(隐私已隐藏):
2021-04-17 09:56:00,777 - INFO - uploader: xxxxxxxxx #torrents: 3 ratio: 1.030 0.678GB/0.658GB
2021-04-17 09:56:00,777 - INFO - uploader: xxxxxxxxx #torrents: 1 ratio: 0.506 0.218GB/0.430GB
2021-04-17 09:56:00,777 - INFO - uploader: xxxxxxxxx #torrents: 13 ratio: 0.842 0.658GB/0.781GB
2021-04-17 09:56:00,778 - INFO - uploader: xxxxxxxxx #torrents: 67 ratio: 0.924 7.557GB/8.180GB

部分log节选

隐私已去除

2021-04-14 11:10:17,372 - INFO - autoban: deluge is connected: True
2021-04-14 11:10:19,876 - INFO - new user banned: ********* #torrents: 1 ratio: 0.000 0.000GB/0.141GB
2021-04-14 11:10:19,876 - INFO - related torrents: megane panda (眼鏡熊猫) - Natsu No Machi EP (夏の街EP) (2015) [WEB] [FLAC] ratio: 0.000 0.0MB/144.7MB
2021-04-14 11:10:19,877 - INFO - 39 user banned in total

deluge数据导出gen_stats.py

当你配置好自动拉黑里所说的中deluge的信息和网站api后,直接运行

python3 gen_stats.py > stats.txt

你就会在文本文件stats.txt中得到一个数据表格,里面不仅包含deluge的信息,还有种子从网站api内获取的信息

这个表格是用tab分割的,所以你只要把文件内容全选复制到excel里即可进行你需要的数据分析

注意,gen_stats.py运行时会去请求已配置信息的网站获取种子信息,受限于api频率限制第一次运行可能会比较慢

deluge删除网站上被删种的种子remove_unregistered.py

警告

此脚本会删除deluge内的种子和文件,请确认功能后使用!

功能

删除所有deluge里还未下完的、且"Tracker Status"中含有"Unregistered torrent"字样的种子,以及文件

注意,如果red/dic/ops/毒蛇之外的种子里的tracker回复了这条信息一样会被删除。

运行

当配置好自动拉黑中所说的和deluge相关的部分后,直接运行

python3 remove_unregistered.py

这个只会运行一次,要持续删种请自己设定定时运行

部分log节选:

2021-04-14 11:02:13,526 - INFO - remove_unregistered: deluge is connected: True
2021-04-14 11:02:13,582 - INFO - removing torrent "Atomic Kitten - Feels So Good (2002) [7243 5433722 2]" reason: "xxxxxxxx.xxxx: Error: Unregistered torrent"
2021-04-14 11:02:13,974 - INFO - removing torrent "VA-Clap-(COUD_11)-12INCH_VINYL-FLAC-199X-YARD" reason: "flacsfor.me: Error: Unregistered torrent"
2021-04-14 11:02:14,533 - INFO - removing torrent "Headnodic - Tuesday (2002) - WEB FLAC" reason: "flacsfor.me: Error: Unregistered torrent"

扫描文件夹辅种reseed.py

本脚本会扫描给定文件夹下的所有子文件夹,在指定站点里搜索所有这些文件夹可以辅种的种子。

本脚本也可以扫描给定文件夹内的所有种子,并寻找指定站点内对应的可以辅种的种子。

注意:由于自动化的搜索方式不能面面俱到,不代表所有搜到的种子都可以正确辅种,也不代表所有没搜到的文件夹无法辅种。少数搜索到的种子可能出现文件名重命名以及其他不可预知的问题,辅种时请在添加前关闭自动开始下载。

填写配置信息

除了必填信息以外不需要填写额外的信息。

运行

运行到一半时退出,下次重新执行的时候会跳过上次扫描过的文件夹,如果不想跳过想重新扫描,请删除--result-dir所指定的文件夹下的scan_history.txt文件。

请注意路径名里带空格或者其他奇怪字符的时候要进行转义,推荐使用tab输入这些长目录。

方法1:扫描所有子文件夹

假如你的音乐文件存在文件夹~/downloads下,你要为海豚辅种,辅种的所有结果存在文件夹~/results下,则运行

python3 reseed.py --site dic --dir ~/downloads --result-dir ~/results

即可。注意--result-dir所带的文件夹必须已经创建好。

方法2:扫描单个文件夹

你也可以用--single-dir为单个文件夹辅种

样例:假如你有一个下好了的种子存在~/downloads/Masashi Sada (さだまさし) - さだ丼~新自分風土記III~ (2021) [24-96]/ 里,则运行:

python3 reseed.py --site dic --single-dir ~/downloads/Masashi\ Sada\ \(さだまさし\)\ -\ さだ丼~新自分風土記III~\ \(2021\)\ \[24-96\]/ --result-dir ~/results

方法3:扫描种子文件夹

--torrent-dir为文件夹内所有种子文件搜索站点内可辅种的种子

样例:假如有若干种子存在~/torrents里,则运行

python3 reseed.py --site dic --torrent-dir ~/torrents --result-dir ~/results

方法4:扫描单个种子

--single-torrent为单个种子文件搜索站点内可辅种的种子

样例:假如有一个种子~/torrents/The Call - Collected - 2019 (CD - FLAC - Lossless).torrent,则运行

python3 reseed.py --site dic --single-torrent ~/torrents/The\ Call\ -\ Collected\ -\ 2019\ \(CD\ -\ FLAC\ -\ Lossless\).torrent --result-dir ~/results

辅种结果

--result-dir所指定的文件夹下会生成:

  • torrent/,一个文件夹,里面存了所有下载的.torrent文件,所有.torrent文件的文件名为 "辅种文件夹名.torrent"。注:利用这个命名方式可以方便辅那种只改了文件夹名的种子。
  • result_mapping.txt,辅种结果,每行为一个tab(制表符)隔开的文件夹名和种子的torrentid,如果没扫到的话torrentid会填为-1。
  • result_url.txt,每行一个可以辅种的种子的下载链接
  • result_url_undownloaded.txt,由于流控,部分情况下下载.torrent文件会失败,这些失败了的种子的下载链接会放在这个文件里。
  • scan_history.txt,曾经扫描过的文件夹,一行一个,你如果运行了一半意外退出了的话,重新运行会跳过这里面记录的扫描过的文件夹

参数解释

  • --dir 批量辅种所在音乐文件所在的总文件夹
  • --single-dir 扫描单个种子辅种时的音乐文件所在文件夹
  • --torrent-dir 批量扫描种子文件辅种时所有.torrent文件所在文件夹
  • --single-torrent 扫描单个种子文件辅种的种子路径
  • --site 对于海豚/RED/OPS/毒蛇分别填dic/red/ops/snake(小写)
  • --result-dir 存储扫描出的辅种信息的文件夹
  • --api-frequency api调用频率限制。如果你还有其他使用api的脚本在持续运行,为了不超过api频率限制你可以手动指定api调用频率。单位:次每10秒。
  • --no-download 只保存辅种信息,不下载.torrent文件

部分log节选

fishpear@sea:~/rss$ python3 reseed.py --site dic --dir ~/downloads --result-dir ~/results
2021-04-25 16:22:16,799 - INFO - file automatically created: /home7/fishpear/results/scan_history.txt
2021-04-25 16:22:16,799 - INFO - file automatically created: /home7/fishpear/results/result_url.txt
2021-04-25 16:22:16,799 - INFO - file automatically created: /home7/fishpear/results/result_mapping.txt
2021-04-25 16:22:16,800 - INFO - directory automatically created: /home7/fishpear/results/torrents/
2021-04-25 16:22:16,800 - INFO - file automatically created: /home7/fishpear/results/result_url_undownloaded.txt
2021-04-25 16:22:16,800 - INFO - dic querying action=index
2021-04-25 16:22:17,588 - INFO - dic logged in successfully, username:fishpear uid: 1132
2021-04-25 16:22:17,632 - INFO - 1797/1797 unscanned folders found in /home7/fishpear/downloads, start scanning for cross-seeding dic
2021-04-25 16:22:17,632 - INFO - 1/1797 /home7/fishpear/downloads/Eliane Radigue - Backward
2021-04-25 16:22:17,632 - INFO - dic querying filelist=3+Songs+Of+Milarepa+1+2+Remastered+2021+flac&action=browse
2021-04-25 16:22:18,329 - INFO - not found
...
2021-04-25 16:22:19,711 - INFO - 4/1797 /home7/fishpear/downloads/55 Schubert and Boccherini String Quintets
2021-04-25 16:22:19,711 - INFO - dic querying filelist=03+Quintet+in+C+Major+for+Two+Violins+Viola+and+Two+Cellos+D+956+III+Scherzo+Presto+Trio+Andante+sostenuto+flac&action=browse
2021-04-25 16:22:20,406 - INFO - found, torrentid=49506
2021-04-25 16:22:21,517 - INFO - saving to /home7/fishpear/results/torrents/55 Schubert and Boccherini String Quintets.torrent
...

向我报bug、提需求

欢迎向我报bug:

  • 请提供log文件(默认为filter.log)和相关截图以便分析问题所在

欢迎向我提需求:

  • 所有涉及到筛选的逻辑(选种,ban人,使用令牌)我写的比较简略,如果有其他需求可以告诉我,不过选种部分的筛选逻辑其实许多完全可以在irssi里筛过了,所以irssi能完成的筛选逻辑就不要提需求了
  • 数据导出更多字段,有什么字段你觉得有必要导出的可以告诉我

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published