简单的RSS订阅获取框架
项目描述
简单的RSS订阅获取框架。
基于装饰器的订阅获取器。
每个函数都提供了RSS订阅的信息、订阅条目的信息和HTML正文。
简单的插件系统和实用的标准插件。
安装
支持的Python版本为Python3.4及以上。
pip install feedy
教程
1. 获取订阅条目的标题和链接URL
创建 main.py 如下
from feedy import Feedy
app = Feedy('feedy.dat')
@app.add('https://www.djangopackages.com/feeds/packages/latest/rss/')
def djangopackages(info, body):
print("- [{pkgname}]({link})".format(pkgname=info['article_title'], link=info['article_url']))
if __name__ == '__main__':
app.run()
并运行
$ python main.py - [django-dynamic-views](http://www.djangopackages.com/packages/p/django-dynamic-views/) - [django-simple-address](http://www.djangopackages.com/packages/p/django-simple-address/) - [django-db-sanitizer](http://www.djangopackages.com/packages/p/django-db-sanitizer/) :
然后请再次执行。
$ python main.py # No output
它只显示最新的订阅条目。
如果您想查看更多详细信息
$ feedy example.py feedy -t djangopackages --no-ignore-fetched -vvv [INFO] No updates in djangopackages. [DEBUG] A last_fetched_at is just updated.
2. 添加订阅模式
添加CNN新闻订阅,以收集每篇文章上的图片。
from feedy import Feedy
from bs4 import BeautifulSoup # You can select your favorite html parser.
app = Feedy(store='feedy.dat', ignore_fetched=True)
@app.add('http://rss.cnn.com/rss/edition.rss')
def cnn(info, body):
soup = BeautifulSoup(body, "html.parser")
for x in soup.find_all('img'):
print(x['src'])
@app.add('https://www.djangopackages.com/feeds/packages/latest/rss/')
def djangopackages(info, body):
"""Get the latest django library information."""
print("- [{pkgname}]({link})".format(pkgname=info['article_title'],
link=info['article_link']))
if __name__ == '__main__':
app.run()
并运行
$ python main.py - [django-dynamic-views](http://www.djangopackages.com/packages/p/django-dynamic-views/) - [django-simple-address](http://www.djangopackages.com/packages/p/django-simple-address/) - [django-db-sanitizer](http://www.djangopackages.com/packages/p/django-db-sanitizer/) : : http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_money.png http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_style.png http://edition.i.cdn.cnn.com/.a/1.269.4/assets/logo_cnn_nav_bottom.png : :
3. 命令行界面
Feedy提供命令行界面。这对于调试很有用
帮助信息
$ feedy --help Usage: feedy [OPTIONS] SRC OBJ Run your feedy's project flexibly. Options: -v, --verbose Set log level -t, --targets TEXT The target function names. -s, --store TEXT A filename for store the last fetched time each RSS feed. -m, --max-entries INTEGER The maximum length for fetching entries every RSS feed --ignore-fetched / --no-ignore-fetched The maximum length for fetching entries every RSS feed --help Show this message and exit.
如果您想获取特定条目进行调试,请执行以下命令
$ feedy main.py app --max-entries 2 --no-ignore-fetched - [django-dynamic-views](http://www.djangopackages.com/packages/p/django-dynamic-views/) - [django-simple-address](http://www.djangopackages.com/packages/p/django-simple-address/) http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_money.png http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_style.png
如果您只想运行cnn函数,请执行
$ feedy main.py app --max-entries 2 --no-ignore-fetched --target cnn http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_money.png http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_style.png
然后,请执行以下命令
4. 使用插件
您可以通过使用插件来轻松开发。例如,您可以从像Facebook和pocket这样的社交sns中获取共享计数。有两种应用插件的方法。
使用装饰器应用指定功能
from feedy_plugins import social_share_plugin
@app.add('http://rss.cnn.com/rss/edition.rss')
@social_share_plugin
def cnn_shared(info, body, social_count):
article = {
'title': info['article_title'],
'pocket': social_count['pocket_count'],
'facebook': social_count['facebook_count'],
}
print(article)
并运行
$ feedy main.py app -t cnn_shared -m 2 {'title': 'Searchers locate Flight 804, EgyptAir vice chairman says', 'pocket': 4, 'facebook': 25} {'title': 'Security fears over French airports', 'pocket': 2, 'facebook': 9}
使用 ``.install()`` 应用所有功能
from feedy import Feedy
from feedy_plugins import social_share_plugin
from bs4 import BeautifulSoup
app = Feedy(store='feedy.dat', ignore_fetched=True)
app.install(social_shared_plugin) # apply each patterns.
@app.add('http://rss.cnn.com/rss/edition.rss')
def cnn_shared(info, body, social_count):
article = {
'title': info['article_title'],
'pocket': social_count['pocket_count'],
'facebook': social_count['facebook_count'],
}
print(article)
@app.add('https://www.djangopackages.com/feeds/packages/latest/rss/')
def djangopackages(info, body, social_count):
print("- [{pkgname}]({link})".format(pkgname=info['article_title'],
link=info['article_link']))
print(social_count['pocket_count'])
if __name__ == '__main__':
app.run()
5. 使用feedy_utils
使用feedy_utils下载图片。
from feedy import Feedy
from feedy_utils import download_image
IMG_DIR = os.path.join(os.path.dirname('.'), 'img')
app = Feedy(store='feedy.dat', ignore_fetched=True)
@app.add('http://rss.cnn.com/rss/edition.rss')
def cnn(info, body):
download_image(body, info['site_url'],
filename="{title}-{i}".format(info['article_title']),
directory=IMG_DIR)
if __name__ == '__main__':
app.run()
创建插件
要编写新的插件,只需创建类似装饰器的函数
def add_information_plugin(callback):
@wraps(callback)
def wrapper(*args, **kwargs):
additional_info = "This is custom plugin."
kwargs['additional_info'] = additional_info
callback(*args, **kwargs)
return wrapper
祝您愉快地黑客攻击 :)
资源
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
feedy-0.0.4.tar.gz (10.8 kB 查看哈希值)
构建分发
feedy-0.0.4-py3-none-any.whl (12.5 kB 查看哈希值)
关闭
feedy-0.0.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 95be018c2ab3669a37205080f39e0bf99824ebecf2ae423f48297fd17b34684f |
|
MD5 | cf421bc4b50de87ec8c1c753e72f17ae |
|
BLAKE2b-256 | c43ddb004d086d4465e08d6a3796e693ec2e30cf071c939d616c2d5b58cfd698 |
关闭
feedy-0.0.4-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 896bbc5bb07f52619ad693d32d480a33741e6326b2683542eaf63639a0bd5b3b |
|
MD5 | 06d1535561fe45488a5b2a3e2a213c45 |
|
BLAKE2b-256 | f24ea41dc6912c280980360d5af69c707d82a2e0eaa737515ff716c7d08dc1e7 |