一个用于搜索电子书的 Telegram-bot
其实这篇文章应该很早之前就写的,但是我太懒了,一直拖到现在。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 | curl -fsSL https://get.docker.com -o get-docker.sh |
安装&配置 ES
docker安装完了之后就是要获取ES了:
1 | docker pull elasticsearch:6.7.0 |
创建ES的挂载目录以及配置文件:
1 | cd / |
config 里面分别放两个配置文件:
1 | cd config |
matser.yml
:
1 | cluster.name: elasticsearch-cluster |
slave.yml
:
1 | cluster.name: elasticsearch-cluster |
注意!因为这个docker打包了java所以会特别消耗内存。
调高JVM线程数限制数量 (否则会报错)
:
1 | nano /etc/sysctl.conf |
初始化容器
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,可以联系我。