高效获取信息之骚操作见闻

高效获取信息之高级篇.

来自: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上。

 

本来是想放一份阅读器订阅导出的,考虑到每个人的喜好不尽相同,不放了。

最后,感谢你的耐心阅读。

 

 

 

 

 

 

 

 

 

发表回复