indes / flowerss-bot

A telegram bot for rss reader. 一个支持应用内阅读的 Telegram RSS Bot。
https://flowerss-bot.now.sh/
MIT License
1.83k stars 238 forks source link

建议:增加调用cookies的功能 #10

Closed 2moe closed 4 years ago

2moe commented 5 years ago

某些博客和论坛对于访客的权限做出了限制,未注册用户可能无法访问某些板块。 如下图的错误日志所示, 草图 _39_.png 机器人在抓取页面时,碰到了身份验证问题,即无权访问某些特定内容。 还有些站长用Robot.txt禁止爬虫机器人爬取,这个只要改一下机器人的useragent就解决了。 问题最大的是前者,要想要让机器人抓取页面就必须获取身份验证信息,所以我就想到了调用cookies。 我觉得调用cookies,可以分成两个主体,分别是管理员和普通用户。 管理员方面: 调用cookies最简单的方法就是直接调用服务器本机指定路径的文件,但是考虑到一些docker主机(例如:Arukas),调用起来好像有些困难。 我觉得可以考虑增加网盘https直链(注:直接下载链接,非分享链接)的调用方式,机器人把文件存储到服务器并调用完成后,云盘的文件就可以删掉了,这样也降低了cookies被窃取的可能性。 其实,我觉得上面的那种调用方式也可以取消掉,直接用telegram发送文件给机器人,从体验上来说才是最好的。

用户方面: 由于这是一个面向大众的rss bot,所以需要考虑到普通用户的使用问题。 能否让人们通过telegram发送cookies.sqlite文件,机器人就能接收并调用呢? 首先,发送

/cookies

用户手动选择cookies文件并通过telegram发送 最后,机器人调用。

另外,考虑到并非所有人都会发送,或者是不想发送,因为会涉及安全和隐私问题。 所以有必要增加一个功能:普通用户通过telegram发送指定命令,管理员就能看到。 例如

/send 普通用户的留言(包含订阅网址)

下载 _5_.jpg 又切回到管理员方面:

我觉得面向管理员可以增加泛用型cookies,注:这是我自己创造的一个术语,我下面解释一下。 管理员拥有某种权限,可以让机器人通过自己的cookies抓取到页面,并向所有订阅该rss的用户推送。 而普通用户的cookies只能给自己的帐号推送,如果普通用户的cookies也变成了泛用型的话,绝对会引发争议的。

我从第三人称的角度来举个例子详细说明一下吧!

admin拥有T论坛的漫画资源板块的访问权限,guest访客(包含bot)是没有该板块的访问权限的,因此无法抓取到页面内容。

这时候,admin通过telegram向bot发送了泛用型的命令,

/general

接着发送了cookies文件。 最后,bot通过该cookies成功抓取到了漫画资源板块内容,并向所有订阅T论坛Rss的用户推送该内容。 普通用户(化名“萌酱”)也拥有T论坛的高级会员,她能够访问该论坛的日记区板块。 但是“萌酱”发送cookies文件后,机器人抓取的rss内容,只有她自己才能看到。

当“萌酱”和admin同时拥有T论坛的访问权限时,我觉得应该优先使用“萌酱”自己的cookies,其它网站仍然使用admin发送的泛用性cookies,这样才是对使用者最大的尊重。 简单来说,就是普通用户自己的cookies的优先级高于泛用型。

最后,你还记得我前面挖的坑吗? 普通用户可以通过发送指定命令,例如/send 给管理员留言。 那么问题来了,为什么要给管理员留言呢? 下载 _6_.jpg 当管理员看到留言处的订阅地址后,有空的话就会手动注册该论坛或博客的帐号,进而获得了普通会员的权限。 接下来就到了泛用型cookies登场的时候啦!♬(ノ゜∇゜)ノ♩ 注:要获得高级会员也不是不行,不过应该没有哪个管理员会这么闲。

你也许会问,手动注册不嫌麻烦吗? 我的回答是:“不,如果需要机器人自动注册的话,一是要解决邮件验证问题,二是要绕过该网站的机器人验证制度(例如google reCaptcha),这样会让机器人的开发的难度呈几何级递增。” 下载 _7_.jpg 我们前面提到了用户可以给管理员留言,可那是单向传递的,如何做到双向,让管理员可以在telegram通过此bot推送一些消息给关注这个bot的普通用户呢? 我的想法就是把推送通知的bot和这个RSS bot融合在一起。

你也许会想那也太麻烦了吧? 有没有办法不用开发通知机器人就能实现信息双向传递甚至是多向传递呢? 当然是有办法的,可以建一个telegram群,或者是一个论坛,在description中说明让用户进去讨论就可以了。 不过要是消息过于繁杂的话,也有可能会降低效率。 上面那些想法,我写了一个多小时,总觉得好难啊! 下载 _8_.jpg

2moe commented 5 years ago

我还没有学过go语言呢! @indes 能帮忙实现一下么?