{ "info": { "author": "Masashi Shibata ", "author_email": "contact@c-bata.link", "bugtrack_url": null, "classifiers": [ "Development Status :: 1 - Planning", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3 :: Only" ], "description": "=====\nFeedy\n=====\n\nSimple RSS Feed Fetching Framework.\n\n* Decorator based feed fetcher.\n* Each function are given the RSS Feed's info, Feed Entry 's info and html body.\n* Simple plugin system and useful standard plugins.\n\n\nInstallation\n============\n\nSupported python version is Python3.4 later.\n\n::\n\n pip install feedy\n\n\nTutorials\n=========\n\n1. Getting feed entry's title and link URL\n------------------------------------------\n\nCreating ``main.py`` like:\n\n.. code-block:: python\n\n from feedy import Feedy\n\n app = Feedy('feedy.dat')\n\n @app.add('https://www.djangopackages.com/feeds/packages/latest/rss/')\n def djangopackages(info, body):\n print(\"- [{pkgname}]({link})\".format(pkgname=info['article_title'], link=info['article_url']))\n\n if __name__ == '__main__':\n app.run()\n\n\nAnd running:\n\n::\n\n $ python main.py\n - [django-dynamic-views](http://www.djangopackages.com/packages/p/django-dynamic-views/)\n - [django-simple-address](http://www.djangopackages.com/packages/p/django-simple-address/)\n - [django-db-sanitizer](http://www.djangopackages.com/packages/p/django-db-sanitizer/)\n :\n\nAfter that please execute again.\n\n::\n\n $ python main.py\n # No output\n\nIt displays only newest feed entries.\n\nIf you want to check more detail messages:\n\n::\n\n $ feedy example.py feedy -t djangopackages --no-ignore-fetched -vvv\n [INFO] No updates in djangopackages.\n [DEBUG] A last_fetched_at is just updated.\n\n\n\n2. Add feed patterns\n--------------------\n\nAdd CNN news feed for collecting images on each articles.\n\n.. code-block:: python\n\n from feedy import Feedy\n from bs4 import BeautifulSoup # You can select your favorite html parser.\n\n app = Feedy(store='feedy.dat', ignore_fetched=True)\n\n @app.add('http://rss.cnn.com/rss/edition.rss')\n def cnn(info, body):\n soup = BeautifulSoup(body, \"html.parser\")\n for x in soup.find_all('img'):\n print(x['src'])\n\n @app.add('https://www.djangopackages.com/feeds/packages/latest/rss/')\n def djangopackages(info, body):\n \"\"\"Get the latest django library information.\"\"\"\n print(\"- [{pkgname}]({link})\".format(pkgname=info['article_title'],\n link=info['article_link']))\n\n if __name__ == '__main__':\n app.run()\n\nAnd running:\n\n::\n\n $ python main.py\n - [django-dynamic-views](http://www.djangopackages.com/packages/p/django-dynamic-views/)\n - [django-simple-address](http://www.djangopackages.com/packages/p/django-simple-address/)\n - [django-db-sanitizer](http://www.djangopackages.com/packages/p/django-db-sanitizer/)\n :\n :\n http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_money.png\n http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_style.png\n http://edition.i.cdn.cnn.com/.a/1.269.4/assets/logo_cnn_nav_bottom.png\n :\n :\n\n\n3. Command line interface\n-------------------------\n\nFeedy offers command line interface. It's useful for debugging\n\n**help messages**\n\n::\n\n $ feedy --help\n Usage: feedy [OPTIONS] SRC OBJ\n\n Run your feedy's project flexibly.\n\n Options:\n -v, --verbose Set log level\n -t, --targets TEXT The target function names.\n -s, --store TEXT A filename for store the last fetched time\n each RSS feed.\n -m, --max-entries INTEGER The maximum length for fetching entries\n every RSS feed\n --ignore-fetched / --no-ignore-fetched\n The maximum length for fetching entries\n every RSS feed\n --help Show this message and exit.\n\n\nIf you want to get specified entry for debugging, please execute following command:\n\n::\n\n $ feedy main.py app --max-entries 2 --no-ignore-fetched\n - [django-dynamic-views](http://www.djangopackages.com/packages/p/django-dynamic-views/)\n - [django-simple-address](http://www.djangopackages.com/packages/p/django-simple-address/)\n http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_money.png\n http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_style.png\n\nAnd if you want to run only a cnn function, please execute:\n\n::\n\n $ feedy main.py app --max-entries 2 --no-ignore-fetched --target cnn\n http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_money.png\n http://i.cdn.turner.com/cnn/.e1mo/img/4.0/logos/menu_style.png\n\n\nAfter that, please execute a following command:\n\n\n4. Use plugins\n--------------\n\nYou can easy developing by using plugins.\nFor example, you can get shared count in social sns like facebook and pocket.\nThere are two ways for applying the plugin.\n\n**Apply specified function using decorator**\n\n.. code-block:: python\n\n from feedy_plugins import social_share_plugin\n\n @app.add('http://rss.cnn.com/rss/edition.rss')\n @social_share_plugin\n def cnn_shared(info, body, social_count):\n article = {\n 'title': info['article_title'],\n 'pocket': social_count['pocket_count'],\n 'facebook': social_count['facebook_count'],\n }\n print(article)\n\n\nAnd running:\n\n::\n\n $ feedy main.py app -t cnn_shared -m 2\n {'title': 'Searchers locate Flight 804, EgyptAir vice chairman says', 'pocket': 4, 'facebook': 25}\n {'title': 'Security fears over French airports', 'pocket': 2, 'facebook': 9}\n\n\n**Apply all functions with ``.install()``**\n\n.. code-block:: python\n\n from feedy import Feedy\n from feedy_plugins import social_share_plugin\n from bs4 import BeautifulSoup\n\n app = Feedy(store='feedy.dat', ignore_fetched=True)\n app.install(social_shared_plugin) # apply each patterns.\n\n @app.add('http://rss.cnn.com/rss/edition.rss')\n def cnn_shared(info, body, social_count):\n article = {\n 'title': info['article_title'],\n 'pocket': social_count['pocket_count'],\n 'facebook': social_count['facebook_count'],\n }\n print(article)\n\n @app.add('https://www.djangopackages.com/feeds/packages/latest/rss/')\n def djangopackages(info, body, social_count):\n print(\"- [{pkgname}]({link})\".format(pkgname=info['article_title'],\n link=info['article_link']))\n print(social_count['pocket_count'])\n\n if __name__ == '__main__':\n app.run()\n\n\n5. Using feedy_utils\n--------------------\n\nDownload images using feedy_utils.\n\n.. code-block:: python\n\n from feedy import Feedy\n from feedy_utils import download_image\n\n IMG_DIR = os.path.join(os.path.dirname('.'), 'img')\n\n app = Feedy(store='feedy.dat', ignore_fetched=True)\n\n @app.add('http://rss.cnn.com/rss/edition.rss')\n def cnn(info, body):\n download_image(body, info['site_url'],\n filename=\"{title}-{i}\".format(info['article_title']),\n directory=IMG_DIR)\n\n if __name__ == '__main__':\n app.run()\n\n\nCreate Plugins\n==============\n\nTo write a new plugin, simply create decorator like:\n\n.. code-block:: python\n\n def add_information_plugin(callback):\n @wraps(callback)\n def wrapper(*args, **kwargs):\n additional_info = \"This is custom plugin.\"\n kwargs['additional_info'] = additional_info\n callback(*args, **kwargs)\n return wrapper\n\n\nHappy hacking :)\n\n\nResources\n=========\n\n* `Github `_\n* `PyPI `_", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/c-bata/feedy", "keywords": "rss feed", "license": "MIT License", "maintainer": null, "maintainer_email": null, "name": "feedy", "package_url": "https://pypi.org/project/feedy/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/feedy/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/c-bata/feedy" }, "release_url": "https://pypi.org/project/feedy/0.0.4/", "requires_dist": null, "requires_python": null, "summary": "Simple RSS feed fetching framework", "version": "0.0.4" }, "last_serial": 2132911, "releases": { "0.0.0": [], "0.0.1": [ { "comment_text": "", "digests": { "md5": "57155a061331b4d7a09a80e565848c5c", "sha256": "dda67f5322a175b554e852b45ee4f6410502c11c9954594b2cdec1bf38935d64" }, "downloads": -1, "filename": "feedy-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "57155a061331b4d7a09a80e565848c5c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6223, "upload_time": "2016-05-17T08:59:07", "url": "https://files.pythonhosted.org/packages/14/86/8101534fdab4a14be14ded5cbbbe3cbdd85b179da5fe1db2b3628e640148/feedy-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d64974bd0c8c7891e9241328f04b0fc", "sha256": "d39a9070992657bc6b6ffaef51b165473eb5ef26ec412b1e00caa9a204f6a2b2" }, "downloads": -1, "filename": "feedy-0.0.1.tar.gz", "has_sig": false, "md5_digest": "0d64974bd0c8c7891e9241328f04b0fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4709, "upload_time": "2016-05-17T09:01:06", "url": "https://files.pythonhosted.org/packages/ce/03/fa9c91eb59d97a9bb8ec5f601131683672089527326ba1617fcd6c3020ec/feedy-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "0b1fd882a5300c1081421b7bfb26dcf9", "sha256": "ef17e2ad3cdd97ada1d366b44a6c454177f7715d69d02a18479bff14f48f6705" }, "downloads": -1, "filename": "feedy-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0b1fd882a5300c1081421b7bfb26dcf9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9892, "upload_time": "2016-05-19T20:51:27", "url": "https://files.pythonhosted.org/packages/a9/86/62a0cad9e91f34f7636e5fd84e4671f9ce7669d4ad9145ad1fef5cb8d9df/feedy-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d05f76ef178deb69a1e3baecb7af315b", "sha256": "6d023d5b6e0e777b0174cb3fe44f0623eb74b23db7091ffd6dfdc5919b9093b1" }, "downloads": -1, "filename": "feedy-0.0.2.tar.gz", "has_sig": false, "md5_digest": "d05f76ef178deb69a1e3baecb7af315b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7335, "upload_time": "2016-05-19T20:51:40", "url": "https://files.pythonhosted.org/packages/c3/01/908e7463827ca28510eabe101779da73ff5250ad68bc7f968d746bdbcc22/feedy-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "7dd330bd9ce136e987c93f61d9c663cf", "sha256": "f661a29ba3d2d81dd0afac350ae79454d11972730550c900d52d33547d3bcd0b" }, "downloads": -1, "filename": "feedy-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7dd330bd9ce136e987c93f61d9c663cf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11660, "upload_time": "2016-05-23T05:57:47", "url": "https://files.pythonhosted.org/packages/ed/10/ce28fb9f74dfd5a9c01c541ebe5d313d7684bf9e15a5a9b5db80842b6470/feedy-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e243fe0ffe0aab74ab1a6e05c0d93c9f", "sha256": "57e333bd849ed0c12be1bd0421d2678ffc321fb770bf7d62211bd354e904b70d" }, "downloads": -1, "filename": "feedy-0.0.3.tar.gz", "has_sig": false, "md5_digest": "e243fe0ffe0aab74ab1a6e05c0d93c9f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10034, "upload_time": "2016-05-23T05:57:54", "url": "https://files.pythonhosted.org/packages/8d/b1/2182e68660f583d1c3ce729e4b02f96fc2cc25be4b2652e4cd3a66ec5ae6/feedy-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "06d1535561fe45488a5b2a3e2a213c45", "sha256": "896bbc5bb07f52619ad693d32d480a33741e6326b2683542eaf63639a0bd5b3b" }, "downloads": -1, "filename": "feedy-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "06d1535561fe45488a5b2a3e2a213c45", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12538, "upload_time": "2016-05-25T12:39:36", "url": "https://files.pythonhosted.org/packages/f2/4e/a41dc6912c280980360d5af69c707d82a2e0eaa737515ff716c7d08dc1e7/feedy-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf421bc4b50de87ec8c1c753e72f17ae", "sha256": "95be018c2ab3669a37205080f39e0bf99824ebecf2ae423f48297fd17b34684f" }, "downloads": -1, "filename": "feedy-0.0.4.tar.gz", "has_sig": false, "md5_digest": "cf421bc4b50de87ec8c1c753e72f17ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10782, "upload_time": "2016-05-25T12:39:50", "url": "https://files.pythonhosted.org/packages/c4/3d/db004d086d4465e08d6a3796e693ec2e30cf071c939d616c2d5b58cfd698/feedy-0.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "06d1535561fe45488a5b2a3e2a213c45", "sha256": "896bbc5bb07f52619ad693d32d480a33741e6326b2683542eaf63639a0bd5b3b" }, "downloads": -1, "filename": "feedy-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "06d1535561fe45488a5b2a3e2a213c45", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12538, "upload_time": "2016-05-25T12:39:36", "url": "https://files.pythonhosted.org/packages/f2/4e/a41dc6912c280980360d5af69c707d82a2e0eaa737515ff716c7d08dc1e7/feedy-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf421bc4b50de87ec8c1c753e72f17ae", "sha256": "95be018c2ab3669a37205080f39e0bf99824ebecf2ae423f48297fd17b34684f" }, "downloads": -1, "filename": "feedy-0.0.4.tar.gz", "has_sig": false, "md5_digest": "cf421bc4b50de87ec8c1c753e72f17ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10782, "upload_time": "2016-05-25T12:39:50", "url": "https://files.pythonhosted.org/packages/c4/3d/db004d086d4465e08d6a3796e693ec2e30cf071c939d616c2d5b58cfd698/feedy-0.0.4.tar.gz" } ] }