跳转到主要内容

简单的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 查看哈希值)

上传时间 Python 3

支持