DoubanMovieTool 一个关于电影的bot

先贴上链接吧:https://github.com/frostnotfall/DoubanMovieTool

恩,这是一个关于电影的bot。基于豆瓣的数据实现。

过年一堆琐碎闲事,愣是拖到了今天才再次更一下博客。

最初的版本功能只有一个,根据电影的影评生成词云图片;半年后在此基础上添加了一些其他的功能,使之成为了一个便捷的电影工具。

基于Python实现,提供目前有“正在上映”、“即将上映”、“新片榜”‘“快捷搜索”等功能,还有一个基于旧接口实现的搜索(不太准,以后可能遗弃),通过CustomKeyboardButton、InlineKeyboardButton,InlineQuery,Instant View 方式呈现输出。

逻辑代码基本通过爬虫实现获取数据,少数数据通过接口获取。比较头疼的是这个框架并没有详尽的的文档,只有最简单的功能示例。碰到问题磕磕碰碰,最终还是完成了。

比较遗憾的是工具本身基于聊天平台,该聊天工具的数据呈现方式只有单一的text,image,vedio等,并不支持两种以上的复合呈现(尽管如此,还是比微信要好用多了)。所以尽可能通过CustomKeyboardButton、InlineKeyboardButton,InlineQuery呈现输出,避免交互方式单调,尽管如此,还是有些掣肘。

比如,api 提供图片+文字的数据发送方式,并且文字支持markdown或html解析,但是只支持最基本的粗体、斜体、url插入等方式,甚至不支持字号的设置。

目前已添加了 Instant View,电影详情以及影人详情经由 Instant View 输出,规避了之前的问题,数据呈现方式比原先好了不少。

开始的几个版本中,电影、演员的搜索方式通过返回文本+字符串截取的方式来实现,想来想去还是不太方便了,于是开始加入“快捷搜索”功能,(效果图见下方)通过InlineQuery返回结果,所见所得(之前的搜索功能依然保留,后期可能会弃之不用了)。

其他效果图就不贴了。

目前还想加入一项 top250 的功能,但是以当前使用的交互方式并不合适,所以可能会添加 Instant View 来改善一下数据的呈现方式。除此之外,目前想不到其它可添加的功能了。

2.17更新:关于 top250 的功能,目前考虑的方式是使用内联键盘更新按钮的方式。目前待定吧。

2.25更新:已添加。 采用列表分页, 通过内联键盘更新。

关于性能优化:

目前按照 python-telegram-bot开发者的建议,使用了 run_async、 wekhook 和ujson 库,但问题并不在这里,而是网络延迟,目前服务器到豆瓣的 ping 值 有250+ms,单纯请求一次http就要花费1.5s的时间,与 telegram 服务器之间的延迟也有130ms左右,真正留给程序的时间并不多,虽然对获取评论这种需要多次url请求的地方做了异步,(开始是使用多线程,但考虑到单核CPU多线程的创建、切换、销毁的开销……so),但对单个的请求使用异步并不能带来速度的提升。

所以如何缩短这部分的时间一直在考虑中:

  • 加缓存或许是个不错的方案,但使用的人少,命中率也低。
  • 加CDN也行,但也只降低了程序到telegram服务器的延迟。与豆瓣服务器的延迟没有改观。毕竟域名不是自己的。
  • 走国内代理,但免费代理很少有国际线路优化的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注