Skip to content

sylvainrocheleau/torabot

 
 

Repository files navigation

Torabot

logo

Torabot是一个二次元(已经混入了一些三次元的异端 bgm38)事件的(邮件)通知工具(框架). 目前实现了8个模块(mod):

  1. Pixiv榜单订阅, 画师订阅. 邮件里附带缩略图.
  2. Bilibili新番订阅.
  3. 虎穴同人本上架/预售通知. 可以用来抢本子.
  4. 人人影视RSS订阅(作为撰写模块的tutorial).
  5. yande.re订阅(二次元高清图站).
  6. danbooru订阅(海量二次元图站).
  7. e-hentai订阅(绅士图站).
  8. RSS/Atom订阅(可以用来订阅ktxp的种子, Github的通知等等).

Torabot旨在提供一个可扩展的通知更新框架(虽然最初目的并不是这个...), 可以用于服务终端用户, 或为其它内容聚合服务提供一个独立的通知更新接口(计划中).

本项目目前仍处于原型设计阶段, 其接口在正式版1.0.0发布之前可能会有较大改动.

Install

首先你需要一台linux机器. OSX没试过, 理论上是可以的. Windows的话, 呵呵...

Python

因为scrapy和fabric不支持Python3, 本站需要两个Python环境: Python 3.3.4+(前端和后台任务), Python 2.7.6(scrapy, fabric). 如果你不需要远程部署, 请忽略fabric. 建议使用pyenvvirtualenvwrapper管理多个Python环境. 本站默认的Python3 virtualenv为torabot, Python2 virtualenv为www27.

在源码根目录下(后文若不特别说明, 脚本执行路径均在源码根目录下):

pyenv shell 2.7.6
workon www27
pip install -r dependencies-27.txt
pyenv shell 3.3.4
workon torabot
pip install -r dependencies.txt
pip install -e .

最后一句用于注册模块的entry points.

Scrapy

pyenv shell 2.7.6
workon www27
scrapyd &
./deployspy

注意每次修改模块的spy目录之后都需要重新deployspy.

PostgreSQL

数据库采用PostgreSQL 9.3.4(没测试过其它版本). 设置好PostgreSQL用户之后:

createdb torabot-dev
psql torabot-dev < torabot/db/schema.sql

torabot/db/schema.sql已经是最新的, 不需要打torabot/db/migrate目录下的补丁.

Redis

Redis 2.8.8(其它版本没试过). 用于进程间通信, 缓存和运行时信息存储.

Run

首先你需要在根目录下添加toraconf.py, 用于保存私有配置, 例如:

from torabot.conf import *


TORABOT_REPORT_EMAIL = 'torabot+report@aip.io'
TORABOT_EMAIL_USERNAME = 'torabot@aip.io'
TORABOT_EMAIL_PASSWORD = 'guess it'
TORABOT_ADMIN_IDS = [1]
TORABOT_MOD_PIXIV_SPY_PHPSESSID = 'get it from pixiv cookies'
TORABOT_DOMAIN = 'torabot.aip.io'  # use localhost:5000 or keep empty here

除了上述配置, 可以参考torabot/conf.py覆盖其中的默认配置. 其中用于发送通知的邮箱必须是google的.

Test

pyenv shell 2.7.6
workon www27
scrapyd &
pyenv shell 3.3.4
workon torabot
nosetests

Local

pyenv shell 2.7.6
workon www27
scrapyd &
pyenv shell 3.3.4
workon torabot
celery worker -A torabot &
celery beat -A torabot &
python run.py

如果你需要多线程, 最后一句可以换成:

gunicorn -b 0.0.0.0:5000 -k gunicorn_worker.Worker gunicorn_app:app

Remote

参考根据自己的需要修改fabfile.py, 然后使用fab gunicorn部署.

Mod

(本节内容有待完善)

Torabot的最主要目的是提供一个可扩展的通知更新框架. "可扩展"包括:

  1. 来源可扩展. 即支持订阅不同的站点.
  2. 渲染方式可扩展. 即可以将站点的搜索结果和通知内容在不同的媒体上表现出来(目前实现了web和email, 后续可能加入移动平台客户端).
  3. 通知方式可扩展. 这一点和2是相关的, 目前实现了邮件通知.

模块(mod)定义了1和2, 其接口参见torabot/mods/base.py. 其中1对应的接口包括spychanges. 前者定义了如何抓取一个查询(字符串)对应的界面结构(返回torabot.ut.bunch.Bunch, 即一个经过包装的dict), 默认采用scrapy抓取; 后者定义了如何比较两个spy返回的页面结构, 并返回表示更新的结构(也是Bunch的序列). 2对应一系列的format_xxx接口, 这些接口均包含一个view(字符串)参数, 用于表示渲染目标("web"或"email").

Torabot本身并不限制上述所有Bunch的结构, 你可以往其中加入任何东西, 但是每个mod需要负责各自的Bunch的构造和解析. Torabot也不限制页面的抓取方法, 虽然默认采用scrapy, 但是对于简单的抓取, 你也可以直接用requests等库. 但是请注意, 某些站点的页面并不规范, 解析时可能会有性能问题和内存泄漏(lxml), 建议将抓取逻辑放在独立进程里, 或者采用scrapy.

推荐的写法参见torabot/mods/yyets.

创建mod的一般步骤为:

  1. mkdir torabot/mods/foo
  2. pushd torabot/mods/foo & scrapy startproject foo & mv foo spy & popd
  3. 参考torabot/mods/yyets做相应修改.
  4. 编辑setup.py加入对应的entry point.
  5. deployspy.

License

MIT

About

Torabot是一个互联网(二次元)事件的通知工具(框架)

Resources

License

Stars

Watchers

Forks

Packages

No packages published