不想看考虑过程的能够跳到 “布置” 或者直接去看我写完的项目 Telegram-Channel-Mirror~
傻翠翠长篇输出的主要地方便是自己的博客啦。经过了一次又一次的功能迭代、代码优化以及 debug 之后,这个博客自己用起来也是越来越顺手了。
可是问题是,自己在摸鱼的过程中往往有些想要共享的文章、视频乃至段子之类的短文字、链接等等,总不能想到什么就都发博客吧——这让表达欲无处安放的翠翠犯了难。
其实关于国内,这个需求最好的去处是微博。可是因为实在对微博对一系列行为不很满意,而又怕自己的一些 暴论 一不小心触碰雷区,最终挑选了 Telegram 频道 (镜像站)作为主要的短文字输出地点。
随之而来的问题便是——Telegram 频道被墙了哇喂,怎么让不常挂梯子的小伙伴也能阅读到自己频道的信息呢?于是便心心念念地揣摩着,怎么能把 Telegram 频道 “引过来”。
初探究
对这件工作的最早探究是在疫情的时分,在疫情伊始自己便开端注意到 @ncov2019 的信息,既精确又及时,极大缓解了那段时间自己的吃瓜焦虑。
而随后,自己也发现了网友所建立的 镜像站,让自己意识到,把数据抓过来在墙内广播这件事是【有戏的】。
简略来说,这样的镜像更像一个爬虫,定期爬取 Telegram Channel 中的数据,并以前端的方式呈现出来,画成图的话,大约是这样。
随后自己便去研讨了一下这个镜像站的 前端 和 后端 代码。但可惜的是很快自己便遇到了问题。
首要因为前后端语言不一致,前端用 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 能够完成各种美妙的功能。
更奇特的是,免费用户 每天 只需区区 10 万次 的调用额度 —— 哇,太少了,底子花不完诶!不必你布置还用谁呢?不愧是 Cloudflare,有钱便是任性 orz
假如说初探究的思路更像是个爬虫,定时爬取频道信息并呈现,那么现在的思路更像是搬运工,直接将 Telegram 频道的预览地址 eg: t.me/s/idealclov… 全体搬了过来,需要什么?我帮你取!当咱们去拜访镜像站的时分,由 Cloudflare 直接做信息的搬运工。
可是这个过程中遇到的问题是,关于一个网站来说,咱们往往需要请求其 html、css、js、json 及各种静态文件。当咱们请求主文件往后,会根据其所附的文件,再请求其他文件 —— 尽管主文件被搬过来了,但假如上面其他文件的地址仍是原封不动的,相同什么用也没有。
因而咱们所需要做的不单单是【转发】,还有【修正】。
通过正则表达式的批量匹配与替换,咱们便能够将本来指向其他域名的文件重新指回咱们的 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.dev
。yousetdomain
便是你要设置的二级子域名,WorkerName
能够自定义,默许是随机生成的。
当然,也能够给自己的域名增加一条 CNAME 到 WorkerName.yousetdomain.workers.dev
,这样运用自己的域名就能够拜访到 Worker 了。
设置好二级子域名之后挑选 free 套餐计划,然后进入到 Worker 管理界面,创建一个新的 Worker。
之后咱们仿制我项目中的 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