一般而言过滤RSS订阅内容都是RSS客户端阅读器的工作,但是有些比较特殊的客户端并不支持过滤——比如PT站常用的下载工具uTorrent等,而网站提供的RSS过滤参数可能无法满足我们的个性化需求,所以有时我们需要一些在线工具对RSS订阅源进行一次过滤,然后使用客户端订阅过滤后的结果。
事实上对于这种需求已经有很多现成的在线工具,比如siftrss,但是公开的服务又存在隐私问题,所以自建RSS过滤服务成了最好的选择。
本文介绍了一款在线过滤RSS订阅内容的PHP程序rss-filter-php,可以方便地部署在VPS或者虚拟主机上。
部署程序
毕竟是PHP,程序的部署相对简单,只需要下载程序对应的zip文件并上传到配置好的站点目录下即可,站点需启用PHP支持,并安装php_curl扩展。
为了提高安全性,所以一个必要的操作就是禁止访问配置文件所在的目录。对于Apache,Cpanel虚拟主机等等其他兼容多级.htaccess
文件的站点程序,不需要进行任何配置,上传的文件中已经包含了所需的配置。
对于Nginx用户,则需要在站点对应的配置文件中添加如下内容:
location ^~ /config {
deny all;
}
location ^~ /class {
deny all;
}
配置完成之后访问指定url即可获取过滤后的订阅源,url格式为:
http://example.com/index.php?config=<配置文件名>
配置文件详解
配置文件需要放在config/
目录下,以.xml
为结尾。
配置文件中出现的匹配式是符合PCRE标准的正则表达式,利用PHP中的preg_match
函数匹配。
配置文件的基本格式如下:
<config>
<title>CnBeta过滤源</title>
<ruleSet>
<source>https://www.cnbeta.com/backend.php</source>
<timeout>10</timeout>
<userAgent>Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36</userAgent>
<titleDuplicateRemove>false</titleDuplicateRemove>
<linkDuplicateRemove>false</linkDuplicateRemove>
<rules>
<titleMatch>/Apple/si</titleMatch>
<titleMatchNot>/iPad/si</titleMatchNot>
<before>2018-12-31 23:59:59 +1200</before>
<after>2020-12-31 23:59:59 +1200</after>
<olderThan>30m</olderThan>
<newerThan>1d</newerThan>
</rules>
</ruleSet>
</config>
虽然从各个配置名应该能看出一二,不过还是简单的介绍一下。
- title
- 最终输出的订阅源标题名
- 仅能出现一次
- ruleSet
- 可以出现多次,匹配不同ruleSet的条目将会混合输出
- source
- 包含一个指向原始源的URL地址
- 在一个ruleSet中可以出现多次
- timeout
- 读取原始源的超时时间
- titleDuplicateRemove
- 是否合并相同标题的条目
- 默认设置为false
- linkDuplicateRemove
- 是否合并指向相同链接的条目
- 默认设置为false
- titleMatch
- 匹配标题中出现指定内容的条目
- 多个匹配之间是
OR
的关系,出现任何一个都会被匹配
- titleMatchMust
- 与titleMatch类似,但是与其他匹配之间是
AND
的关系,必须全都符合才能匹配
- 与titleMatch类似,但是与其他匹配之间是
- titleMatchNot
- 丢弃标题中出现指定内容的条目
- 只要符合任何一条titleMatchNot,就会立即丢弃条目
- before
- 匹配指定时间之前的内容
- 指定时间需要能够被
strtotime()
函数解析
- after
- 匹配指定时间之后的内容
- 指定时间需要能够被
strtotime()
函数解析
- olderThan
- 类似before,但是格式改为相对时间,如7d代表7天
- s代表秒
- m代表分
- h代表小时
- d代表天
- 类似before,但是格式改为相对时间,如7d代表7天
- newerThan
- 类似after,其余同上。
防止被人社工或穷举入口目录
配置文件中本身没有对客户端进行鉴权的配置项,而且客户端功能上很可能也不支持验证。
一个可行的替代方案是重命名配置文件,添加一段随机生成的字符串来防止社工或穷举。
比如对于上文的配置文件cnbeta.xml
可以改名为H2dKFVUciwJz8sm4IPYMl9R-cnbeta.xml
,这样对应的url就变成了:
http://example.com/index.php?config=H2dKFVUciwJz8sm4IPYMl9R-cnbeta
楼主残忍的关闭了评论