一个用于搜索电子书的 Telegram-bot

标签: 计算机 软件 Free i-book.in 电子书 | 发表时间:2019-12-22 22:33 | 作者:
出处:https://tstrs.me/

其实这篇文章应该很早之前就写的,但是我太懒了,一直拖到现在。TG-bot还是蛮好玩的,可以做到很多意想不到的功能。因为i-Book.in页面的后端是algolia的,他们对于免费用户最大的数据存储量只有1W条。而经过多次扩容,我目前的数据量已经有超过了很多了,但是我还是没有将它整改,因为Flask实在是太难了。而多出的数据没有索引的话我自己要找也很麻烦,所以我搭建了一个TG-bot,后端使用Elasticsearch储存数据,这样哪怕数百万条的数据,也能轻松应对,前端使用的是Telegram的API。

如果有兴趣可以 点击这里到TG群组里骚扰这个bot哦。

注:需要翻墙才可以使用Telegram

以下部分是这个bot的一些介绍。

使用方法

这个bot就只有一个命令,就是 /so,这个命令可以同时搜索书名和作者,根据你输入的内容,返回最接近的结果,建议输入完整的书名/作者以获取最精确的结果。当然,如果搜索的是数据库没有的书也会返回一些关键词接近的结果。

找不到想要的书这很正常,毕竟只是一个的样本量很小的数据库,要知道现在每年新增的出版物有几十万册之多,目前的总量连每年新增的十分之一都没有。我也没打算据此 盈利,只是对数据的整理以及提炼感兴趣。最近在爬取一些图书的信息,打算做一些数据的升华比如数据库里谁的书最多,那个国家的书最多,什么类型的书最多这样。

整个运行步骤简单来说就是:bot先接收私聊发来的信息返回给后端脚本,后端根据信息的内容去检索ES,再根据ES的返回数据解析出来的信息发送回接收到消息的频道。具体的细节不是很想写了,因为没有数据库,也没法复刻这个bot,所以我只打算写一些核心内容。

构建

安装 docker

因为ES我用的还不是很熟练,所以我直接使用的是docker版本,不用捣鼓java和断其八糟的配置项,直接pull就可以用了。

1     
2
curl -fsSL https://get.docker.com -o get-docker.sh     
sudo sh get-docker.sh

安装&配置 ES

docker安装完了之后就是要获取ES了:

1     
docker pull elasticsearch:6.7.0     

创建ES的挂载目录以及配置文件:

1     
2
3
4
5
6
7
8
cd  /     
mkdir-p mnt/elasticsearch
cd mnt/elasticsearch
mkdir config
mkdir master
mkdir slave
chmod 777 master
chmod 777 slave

config 里面分别放两个配置文件:

1     
2
3
cd config     
touch master.yml
touch slave.yml

matser.yml

1     
2
3
4
5
6
7
8
9
10
11
cluster.name: elasticsearch-cluster     
node.name: master
network.bind_host: 0.0.0.0
network.publish_host: `your ip`
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: [" `your ip`:9300"," `your ip`:9301"]

slave.yml

1     
2
3
4
5
6
7
8
9
10
11
cluster.name: elasticsearch-cluster     
node.name: slave
network.bind_host: 0.0.0.0
network.publish_host: `your ip`
http.port: 9202
transport.tcp.port: 9302
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: false
node.data: true
discovery.zen.ping.unicast.hosts: ["`your ip`:9300","`your ip`:9301"]

注意!因为这个docker打包了java所以会特别消耗内存。

调高JVM线程数限制数量 (否则会报错)

1     
2
3
4
5
nano /etc/sysctl.conf     
#添加这个
vm.max_map_count=262144
#保存后执行这个命令
sysctl -p

初始化容器

master

1     
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /mnt/elasticsearch/config/master.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mnt/elasticsearch/master:/usr/share/elasticsearch/data --name es-master elasticsearch:6.7.0     

slave

1     
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /mnt/elasticsearch/config/slave.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mnt/elasticsearch/slave:/usr/share/elasticsearch/data --name es-slave elasticsearch:6.7.0     

后记

只有当数据量大了,数据才能玩出花,所以我最近收集的图书信息都不是根据我现有的数据抓取,而是看到一个就全站爬取,这样以后如果我有了电子书文件,直接匹配数据就可以输出了,不需要焦头烂额的找数据了。下一步打算将去除ipfs连接的图书信息在github开源 (我记得好像已经有现成的了,但我就喜欢造轮子!)

最近刚刚看完了猫腻的 间客,里面有一句话出现了很多遍:“社会阶层不平等的根源就是信息的不平等” 我很是赞同。我们没有办法将信息平等到每个人都一样多,但如果有能力获取到更多的信息,为什么不去做呢?我认为每个人都有这个能力,只是因为懒惰,因为怕麻烦,因为觉得很难,因为觉得很费时间所以放弃。看书是一件很费时间和精力的事情 (一定有人会反驳我的,说什么几天看完几百万字的书,不好意思,那些就是电子毒品,看完没有任何营养。),认认真真看书是能够将心神代入到书中的人物的,能够体会到作者透过文字传递出来的情感与感悟,也能够学到很多新的知识。这知识不一定是语数英,也许是某道菜的做法,也许是某个很冷门的小技巧,但只要掌握了,就是属于你的独一无二的知识。

可能需要使用Telegram提高了有些人使用这个bot的难度,但是我认为门槛是有必要的,如果你使用这个bot没有找到心仪的书,请不要私聊我让我添加,我不会添加的,我不喜欢一个个手动添加,那样很傻,除非我又找到了一批数据。但…如果有数百G的数据躺在我面前,我还是很馋的。

最后要是有会前端的大佬愿意接盘重构 i-book.in,可以联系我。

相关 [搜索 电子书 telegram] 推荐:

一个用于搜索电子书的 Telegram-bot

- - TSTR
其实这篇文章应该很早之前就写的,但是我太懒了,一直拖到现在. TG-bot还是蛮好玩的,可以做到很多意想不到的功能. 因为i-Book.in页面的后端是algolia的,他们对于免费用户最大的数据存储量只有1W条. 而经过多次扩容,我目前的数据量已经有超过了很多了,但是我还是没有将它整改,因为Flask实在是太难了.

用事實查核中心的 RSS feed 加上 IFTTT 自動通知到 Line/Telegram/... 內

- - Gea-Suan Lin's BLOG
事實查核中心的澄清內容其實很有趣,可以看到有哪些假消息在流傳,所以想找找看有沒有比較簡單的方法可以設通知.... 事實查核中心的官網用的是 netiCRM 這個平台 (看起來底層是 Drupal),而在 HTML 頁面的開頭可以看到 RSS 1.0 的 xmlns 宣告:. 本來想說直接用 feed 接到 IFTTT 就好了,不過 HTML 頁面上沒有放 feed entry 讓閱讀器可以直接找到 feed 本身,也就是像這樣的標籤資訊:.

[来自异次元] 百度官方SEO搜索引擎优化指南 v2.0 电子书下载 (最佳SEO基础入门书籍)

- Guan - 异次元软件世界
        相信任何网站的站长或者接触过互联网营销的朋友都知道 SEO (搜索引擎优化,全称为 Search engine optimization) 的威力吧. 如果让自己的网页或要推广的内容在搜索引擎上获得一个较高的自然排名,那无疑会带来大批免费的浏览者,从而获得可观的收益.         百度互联网创业俱乐部发布了《百度SEO搜索引擎优化指南V2.0》电子书, 除了一些SEO基础知识介绍之外,还涉及到网站运营、数据分析、提高转化率、对作弊的解释和处理等多方面的介绍.

电子书:The Art Of Community

- LiJunLe - Wow! Ubuntu
The Art Of Community 是由 Ubuntu Community Manager Jono Bacon 编写的一本关于如何构建开源社区的书籍. Jono Bacon 于 2006 年加入 Canonical,管理着世界范围内的 Ubuntu 开发者、贡献者及用户社区,有着丰富的开源社区运维经验.

EPUB3,电子书新格式

- 定风波 - 爱范儿 · Beats of Bits
EPUB 是数字出版业的工业标准之一,重要性不言而喻. 2011 年,5 月 23 日 International Digital Publishing Forum(以下简称 IDPF)正式确定 EPUB3 标准. 与上一代 EPUB2 标准相比,EPUB3 带来很多非常重要的变化,这些变化会对数字出版业有怎样的影响.

免费电子书列表

- willian - Starming星光社最新更新
在StackOverflow上,有人要打算收集个免费电子书的列表,结果很快就有人分享了一个列表. 原帖的地址在http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books(注意:有些连接可能会被墙掉).

电子书五宗罪

- Marc - 译言-每日精品译文推荐
来源5 Reasons Why E-Books Aren’t There Yet. 对电子书你别无选择:它不只是一时风潮. 除非发生像日本剑道复兴那样引人注目的事件,否则它注定将成为纸质书籍21世纪的接班人. 有一些纸质书籍文化是电子书目前尚且无法(或者说至少很难)取代的. Amazon sparked the e-reader revolution with the first Kindle a mere three-and-a-half years ago, and it now already sells more e-books than all print books combined.

免费电子书列表

- raphael - 酷壳 - CoolShell.cn
在StackOverflow上,有人要打算收集个免费电子书的列表,结果很快就有人分享了一个列表. 原帖的地址在http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books (注意:有些连接可能会被墙掉).

重新思考电子书

- Alex - 爱范儿 · Beats of Bits
Hart,“古登堡计划”发起人,2011 年 9 月 6 日去世,享年 64 岁. 从 1971 年 Hart 制作第一本电子书,启动“古登堡计划”开始到 2011 年,Kindle、Nook 流行,正好经过 40 年. 如今电子书阅读器、电子书变得越来越流行,在北京的地铁上,你会经常看见低头拿着 Kindle、Nook、iPad、汉王的人们.

电子书有重量

- 李龑 - Solidot
加州伯克利分校的计算机科学家John Kubiatowicz教授说,每当有一本电子书下载进电子书阅读器,它的重量会略有增加. 当然,与实体书相比增加的重量是微不足道——如果4GB版Kindle的空间全部被电子书塞满,那么它的重量将会增加0.000000000000000001g,相当于一个小病毒,而3500本实体书的重量约等于2吨.