高效获取信息之骚操作见闻
高效获取信息之高级篇.
来自:Pixiv (画师 MORNCOLOUR)
Warning
–长文警告:5010字–
目录
-
服务介绍
-
订阅网盘(存储基于Google Drive G SUite)文件更新
-
订阅所有的邮箱(邮件)
-
自定制RSS源
开始准备
教程使用到的服务:
-
-
自动化服务
-
Google APP Srcipt
-
Google sheets
-
Google Drive
-
Feed43
-
Github Issues
-
RSSHub
-
服务介绍
自动化服务?
1)automation.针对业务流程使用数字业务自动化平台,以此来提高生产率,提高业务响应能力并简化工作流程。形式上又分为自动化流、即时流(手动触发)、计划流、UI流、业务流程流。这里我们使用的是自动化服务的自动化流,简单来说,一旦A满足某个条件时,就会触发事件,将处理的数据在B自动执行,不仅于此可以继续向后传递(C、D、E……)。这里的A、B通常指某种应用(某个具体文件)。
2)IBM、微软等公司都推出了自己自动化服务平台。通过对比使用发现微软的Power Automate触发频率更快一些,但是对于多平台的应用支持不太好,局限了。
最终选择了https://automate.io这个自动化服务(5分钟触发一次,稍慢。多应用支持),看来介绍里说很快会支持多个主流数据库、亚马逊多项云服务、以及更多的第三方应用。
Google APP Srcipt?
简称GS。一种google云平台下的类似于javasript的脚本语言。可自行google或参考之前的blog。
Google sheets?
谷歌表格。形式与通常的excel表格无异,不同的是GS提供了直接获取sheets数据的方法。
Google Drive?
谷歌硬盘,简称GD。区别于谷歌云盘,不属于存储实例。面向个人和企业用户,提供API支持。使用GD来作为搭建网盘的存储空间可查看之前的教程。
Feed43?
本质上是可视化网络爬虫。用于生成无RSS网站的订阅源(对于一些反爬虫严格的网站,则无效),过程被称为“烧制RSS”。
Github Issues?
对于github项目提交建议、问题、bug的讨论区。本文中属于其他用途。
RSSHub?
帮助你快速发现和订阅当前网站的 RSS 和 RSSHub。
订阅网盘文件更新
实现思路:【自动化服务→Github Issues→RSSHub→一键RSS】
描述:网盘的搭建过程不再提及。网盘系统部署在个人服务器上,网盘的个人存储空间来自服务器磁盘,网盘的共享目录来自谷歌硬盘GD(rclone挂载)。但操作网盘共享目录下的文件时,GD下的文件同时作用。
①创建新的github代码仓库
-name随便,选择public【否则无法订阅】-
②创建automate服务
-在automate面板创建bot-
-左侧(触发条件)在应用中找到Google Drive(首次使用需要登录授权),条件选择“更新文件时”,路径不填写【匹配所有文件夹】-
*下面的一堆Output Fields为GD提供的输出参数。
-右侧(触发执行)找到应用Github(首次登录授权),选择执行结果“创建Issues”,Title和Body分别对应新Issue的标题和内容。点击+可以输出文件参数-
可以填写为如图的内容格式。
*required项为必填,其他可选。
-完成后保存,给出一个测试页面-
③模拟文件修改
-网盘共享目录下创建一个测试文件-
④查看Github Issues
-如图是automate自动创建的issues-
-查看issue具体内容,格式与填写的参数格式一致-
⑤订阅Issues
-复制插件提供的Issue路径-
-将地址填入阅读器,同时最后加上“/open”-
那么这里阅读器就只会订阅状态是open的issues,分类管理。下面的流程就不用再说了吧。
这里巧妙利用Github Issues来记录GD文件操作,订阅issues=订阅GD文件更新。
当然这里还有其他思路,如:【自动化服务→Google sheets→GS→构造rss格式】。俩者对比的话,后者虽然多了些步骤、还要写代码,但是提供了安全保障(只有知道GS的执行地址的人才能订阅,基本上等同于只有自己订阅);而前者虽然是对外公开的,但是效率会高一点,而且我的GD文件目录对应的是网盘的共享目录,即出于让使用网盘的人都可以订阅到文件的更新的考虑。前者的思路更合适。
订阅所有的邮箱邮件
思路:【自动化服务→Google sheets→GS→构造rss格式】
描述:邮箱属于很私人的内容,使用此思路更合适(上面提过了)。假设现在我有Gmail,QQ邮箱,163邮箱这三个邮箱,如何实现订阅所有邮件。
automate这里提供了Gmail支持和一般邮箱的支持,通过尝试订阅QQ邮箱发现信件的内容部分有乱码,这里的话可以在GS这边对信息解码。那么!
这里直接偷懒,将其他邮箱的邮件全部自动转发到Gmail,转发功能一般在邮箱的设置里面。简单设置一下,这里不演示了。
①创建Google sheet文件
-在GD中创建sheet,命名为mail;第一栏输入:发件人、主题、时间、内容-
②创建automate服务
-左侧Gmail,路径INBOX(Gmail的#路径地址,必须);右侧Sheets选择创建的sheet文件,默认工作表是“工作表1”(如果没修改)-
*发件人、主题、时间、内容(首栏内容)分别填入对应参数,如图。
保存,测试:用别的邮箱发一个邮件到当前Gmail,查看sheets文件发现新增了一行数据。
③创建GS项目
-右键sheets表:获取链接;修改权限为知道链接的任何人。存一下这个链接,等会儿用-
var title; var sender; var sendtime; var content; var fileurl='[替换为sheets获取的链接]'; function getLastRowIndex(){ var ss = SpreadsheetApp.openByUrl(fileurl); var ws = ss.getActiveSheet(); console.log(ws.getDataRange().getNumRows()); return ws.getDataRange().getNumRows(); } function doGet() { var ss = SpreadsheetApp.openByUrl(fileurl); SpreadsheetApp.setActiveSpreadsheet(ss); SpreadsheetApp.setActiveSheet(ss.getSheets()[0]); title = ss.getSheets()[0].getRange("A2:A"+getLastRowIndex()).getValues(); sender= ss.getSheets()[0].getRange("B2:B"+getLastRowIndex()).getValues(); sendtime=ss.getSheets()[0].getRange("C2:C"+getLastRowIndex()).getValues(); content=ss.getSheets()[0].getRange("D2:D"+getLastRowIndex()).getValues(); var template = HtmlService.createTemplateFromFile('email'); var rss = template.evaluate(); return ContentService.createTextOutput(rss.getContent()).setMimeType(ContentService.MimeType.XML); }
-新建GS项目(自行google或查看以前的blog),代码没什么好说的-
-新建模板文件:email.html (对应gs代码)-
<rss version="2.0" xmlns:rss="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"> <channel> <title>sheet-Gmail </title> <description>gmail转sheet转gs转rss</description> <link href="https://mail.google.com/mail/u/0/#inbox"/> <? for(var i=0;i<title.length;i++){ ?> <item> <title><?= sender[i][0] ?> : <?= title[i][0] ?></title> <link href="https://mail.google.com/mail/u/0/#inbox"/> <h1> </h1> <author>发信时间:<?= sendtime[i][0] ?></author> <description>正文:<?= content[i][0] ?></description> </item> <? } ?> </channel> </rss>
-模板的代码-
-保存并执行,获得执行地址-
-直接浏览器访问,看一下格式没有问题-
复制此时的浏览器地址栏地址!
④订阅构造的RSS地址
这里要特别注意一下,GS的执行地址即https://script.google.com/………/exec会重定向一次,此时再复制浏览器地址才是真实地址。exec地址不会更新订阅内容!
将真实地址填入阅读器即可。
-订阅Gmail效果图-
自定制RSS源
在掌握了以上的订阅思路后,其他的也就可以举一反三了。那么,还有什么我们没有解决的呐。整理一下:
已实现的订阅:订阅自己拥有权限的应用内容(上面俩种)、订阅自己没有权限但网站提供RSS源的内容、订阅网站没有直接提供RSS源但第三方提供路由支持(RSSHub)的内容。
未实现的订阅:订阅即没有提供RSS源又没有路由支持的内容。
那么这里就用到Feed43来自定制RSS源(烧制)来解决此类情况!
举个栗子吼吼:(自制)订阅腾讯视频最新更新的电视剧
玩过爬虫的自然没有什么难度,先上结果图:
-结果图-
①获取目标地址
-来到腾讯视频的电视剧片库,选择:最新-
*复制此时浏览器地址栏的地址
②创建Feed
登录Feed43官网,创建新的feed。
-Step1 加载页面html:填写刚才复制的地址-
-Step2 筛选信息:{*}表示匹配任何字符,{%}表示提取为参数-
**先在全局匹配中限定范围,后在局部中重复匹配,提取参数。参数按书写的顺序分别为{%1}、{%2}、{%3}、{%4}
**特别地,原代码中的“换行”需要{*}来匹配,否则代码前后无法衔接!
图中显示匹配到20条数据,其实不止20个,这里是因为非会员最多只能匹配20个。(不过基本够用了)
检查下面输出的4项参数是否有问题,没有则继续向下。
-Step3 填写输出格式:上面标题和描述随意,链接不要改-
**下面的参数需要对应:
标题:{%2}——{%3} 输出“在一起——更新至13集”
链接:{%4} 输出“https://v.qq.com/…….”(方便阅读时跳转原地址查看)
内容:<img src=”{%1}”> 还原html代码,这样阅读时会封面显示图片
<a href=”{%4}”> 参数%4上面已经有了,这里可以不填写
-生成预览和feed链接(可以修改)-
③订阅feed地址
阅读器填入https://fgeed43.com/[ID].xml即可,略
后记
关于邮箱的订阅,有人说可以部署在服务器上,还简单点。诚然如此,那么我其他的订阅也可以搞到服务器上,脱离各项服务商的限制和高额收费。
其实不然,现在假设我要订阅100个源,每隔1分钟同步一次(及时性、方便),那么大致推算我的千元级服务器根本承受不了。
事实上,很多收费的阅读器付费方案也做不到1分钟同步一次,我尝试过500块的收费方案不尽如人意,最后还是退款了。
我现在的原则就是能不用服务器就不用,能不花钱就不花,不仅是在RSS上。
本来是想放一份阅读器订阅导出的,考虑到每个人的喜好不尽相同,不放了。
最后,感谢你的耐心阅读。