不想看考虑过程的能够跳到 “布置” 或者直接去看我写完的项目 Telegram-Channel-Mirror~

傻翠翠长篇输出的主要地方便是自己的博客啦。经过了一次又一次的功能迭代、代码优化以及 debug 之后,这个博客自己用起来也是越来越顺手了。

可是问题是,自己在摸鱼的过程中往往有些想要共享的文章、视频乃至段子之类的短文字、链接等等,总不能想到什么就都发博客吧——这让表达欲无处安放的翠翠犯了难。

其实关于国内,这个需求最好的去处是微博。可是因为实在对微博对一系列行为不很满意,而又怕自己的一些 暴论 一不小心触碰雷区,最终挑选了 Telegram 频道 (镜像站)作为主要的短文字输出地点。

随之而来的问题便是——Telegram 频道被墙了哇喂,怎么让不常挂梯子的小伙伴也能阅读到自己频道的信息呢?于是便心心念念地揣摩着,怎么能把 Telegram 频道 “引过来”。

初探究

对这件工作的最早探究是在疫情的时分,在疫情伊始自己便开端注意到 @ncov2019 的信息,既精确又及时,极大缓解了那段时间自己的吃瓜焦虑。

而随后,自己也发现了网友所建立的 镜像站,让自己意识到,把数据抓过来在墙内广播这件事是【有戏的】。

简略来说,这样的镜像更像一个爬虫,定期爬取 Telegram Channel 中的数据,并以前端的方式呈现出来,画成图的话,大约是这样。

利用 Cloudflare Workers 为 Telegram 频道搭建镜像

随后自己便去研讨了一下这个镜像站的 前端 和 后端 代码。但可惜的是很快自己便遇到了问题。

首要因为前后端语言不一致,前端用 Vue 后端用 Python,使得布置起来很费事。于是自己首要想到的思路是将两头直接捏合起来做一个 docker 镜像。

但另一个问题是:自己有 docker 的机子在国内,而国外机因为性能原因没有装 docker,这就使得 docker 还需要调配代理食用 —— 想了想当初自己配 rsshub 和 ttrss 的时分,现在想想也是挺噩梦的一件事。

其次,前端的一些代码是写死的,很难做成装备项(例如,随频道改动标题等等),因而即便做出来也难以做到很强的泛用性。因而这个方案最终也就作算了。

再探究

这件事本不了了之了,但随着看到木子的 这篇博客,其间提出了用 Cloudflare Workers 直接把 Telegram 频道预览网站镜像过来的可能性,然后让这件事有了新的期望。

而正巧前段时间刚刚因为自己的另一个项目 GitHub-Star-Counter 和 Spencer Woo 的 Substats,简略用上了 Cloudflare Workers,脑补了一下觉得这事有戏,于是便更详尽地研讨了一下。

用 Cloudflare Workers 做镜像的思路则来自于 ChrAlpha 的 这篇文章(啊,我的友链都是些什么怪物们 orz 傻翠给咱们丢人了 QAQ)。

Cloudflare Workers 是 Cloudflare 所推出的 Serverless 服务,大约能够理解为跑在能够任何地方的小函数与中间件,借助 JS 能够完成各种美妙的功能。

利用 Cloudflare Workers 为 Telegram 频道搭建镜像

更奇特的是,免费用户 每天 只需区区 10 万次 的调用额度 —— 哇,太少了,底子花不完诶!不必你布置还用谁呢?不愧是 Cloudflare,有钱便是任性 orz

假如说初探究的思路更像是个爬虫,定时爬取频道信息并呈现,那么现在的思路更像是搬运工,直接将 Telegram 频道的预览地址 eg: t.me/s/idealclov… 全体搬了过来,需要什么?我帮你取!当咱们去拜访镜像站的时分,由 Cloudflare 直接做信息的搬运工。

利用 Cloudflare Workers 为 Telegram 频道搭建镜像

可是这个过程中遇到的问题是,关于一个网站来说,咱们往往需要请求其 html、css、js、json 及各种静态文件。当咱们请求主文件往后,会根据其所附的文件,再请求其他文件 —— 尽管主文件被搬过来了,但假如上面其他文件的地址仍是原封不动的,相同什么用也没有。

利用 Cloudflare Workers 为 Telegram 频道搭建镜像

因而咱们所需要做的不单单是【转发】,还有【修正】。

利用 Cloudflare Workers 为 Telegram 频道搭建镜像

通过正则表达式的批量匹配与替换,咱们便能够将本来指向其他域名的文件重新指回咱们的 Cloudflare Worker 上,并通过映射让其指向正确的网址。

然而因为前人的代码或多或少有些问题。于是在进行了这样的思路收拾与 “文献综述”(写论文写魔怔了 2333)后,也算是站在伟人的肩上迈出了自己的一小步。

伟人肩上的一小步

因而在前人的基础上,自己捋顺了全体思路,做了如下的总结与尝试。

  • 首要对主 URL 进行映射,将 / 对应到 t.me/s/频道称号
  • 其次将主 URL 中所引证的其他文件进行正则匹配与替换
    • telegram.org 域名下的引证更改为自己域名 /static 下的对应引证
    • 将原有的 Download Telegram 链接内容直接替换为自己频道的原本链接
    • 将出现最多的个人头像直接替换为墙内 CDN 的对应链接
  • 将引证资源进行映射,将 /static 对应到 telegram.org,完成对其他文件对解析

而关于图片、视频等资源,因为 CloudFlare Workers 的资源约束,自己试验往后发现即便进行代理,图片也往往加载不出来或加载速度堪忧,视频就更不必想了。

不显示就不显示吧,谁让你不挂梯子呢(

而最终,自己也将这个思路所形成的代码浓缩进了 Telegram-Channel-Mirror 项目中,更精确地说是 这个文件 中,与咱们共享,期望能帮到需要的人。

布置

这儿我懒,很多图和文字就直接用木子的 这篇博客 的啦 XD

首要是要去 CloudFlare 上注册一个账号… 这步就不教了嗷

登录到面板,点击左上角的 Menu —-> Workers 进入到 Workers 页面。新注册的用户会提示设置一个 workers.dev 顶级域名下的二级子域名,这个子域名设置好之后是 ** 不可更改的 **

之后你新创建的 Worker 就会使以这个域名而二级子域名开端的,类似于 WorkerName.yousetdomain.workers.devyousetdomain 便是你要设置的二级子域名,WorkerName 能够自定义,默许是随机生成的。

当然,也能够给自己的域名增加一条 CNAME 到 WorkerName.yousetdomain.workers.dev ,这样运用自己的域名就能够拜访到 Worker 了。

设置好二级子域名之后挑选 free 套餐计划,然后进入到 Worker 管理界面,创建一个新的 Worker。

利用 Cloudflare Workers 为 Telegram 频道搭建镜像

之后咱们仿制我项目中的 index.js 中的代码到 Script 输入框,并更改头几行的装备:

channel_name: 频道称号

host_name: Worker 的域名,供替换运用

icon_url: 因为不反代图片,故需另附头像链接

修正好代码之后点击左下角的 Save and Deploy 然后 Preview 看看页面是否显示正常,假如显示正常就完全 OK 啦~

写在最终

唉,或许过段时间,cloudflare workers 也会被拒之于门外吧 —— 毕竟在国内也不是没有替代品。serverless 服务现在也是各大云所赤手可热的焦点项目。还有阿里云、腾讯云等等云在等着咱们。

可是,有时分真的要佩服互联网元老们所怀揣对那份自由、共享的精力,以及他们的技能能力与高瞻远瞩的视界所带来的互联网底层规矩。

尽管时至今日,不管任何国家、区域仍是组织愈发开端自我关闭,乃至交流的社区也开端充斥着各种小团体小圈子,但只需互联网还存在着,还联通着,只需咱们想彼此交流,就必然有方法能绕过彼此间的封锁,与大洋彼岸互相交流。这一点,无论如何都不会回去了。

或许,尽管困难且步步退让,但互联网终究仍是些许改动了世界呢。

拓展链接

  • idealclover/Telegram-Channel-Mirror: 利用 CloudFlare Worker 建立 telegram 频道镜像站,使得国内能够拜访
  • thegreatjavascript/2019-nCoV-News: 2019-nCoV 疫情实时播报|墙内传播版(请广泛传播)
  • QuantumGhost/ncov-channel-crawler
  • 运用 CloudFlare Workers 建立 telegram 频道镜像站 | 木子
  • Cloudflare Worder 免费建立镜像站 | ChrAlpha 的梦想乡
  • Substats:快速统计你在各个平台的重视者! – Spencer’s Blog

theme: channing-cyan