{ "info": { "author": "Tobias Bengfort", "author_email": "tobias.bengfort@posteo.de", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", "Operating System :: OS Independent", "Programming Language :: JavaScript", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: News/Diary" ], "description": "plutopluto - simple feed aggregator\n\nOverview\n--------\n\nDisplay posts from multiple feeds::\n\n plutopluto http://xkcd.com/atom.xml http://what-if.xkcd.com/feed.atom\n\nDisplay posts from a feed with multiple pages::\n\n plutopluto http://staff.tumblr.com/page/{page}/rss\n\nLoad config (with urls) from separate file::\n\n plutopluto -c config.cfg\n\nHistory\n-------\n\nWhen I stopped using facebook some years ago the only thing I missed was\ngetting a stream of interesting things. I really like just scrolling along and\nlook at some pictures, read some discussions and watch some videos.\n\nSo I started to look for alternatives. Pretty fast I realized that I did not\nneed a social network to a stream. The existing infrastructure of blogs with\nRSS or atom feeds was more than enough for anything I wanted.\n\nThe only thing missing was a nice way to display these feeds in a stream. So\nthis is what I wanted to create: A stream-like feed reader.\n\nLater I realized there is a second reason why I would want to use plutopluto:\nMany blogs suck. Either they look plain ugly or they are unusable slow -- which\nhappens especially with image-centered blogs. So I just fire up plutopluto\nwith the blog's feed and have a nice and clean interface for scrolling through\nthe content.\n\nArchitecture\n------------\n\nI originally implemented plutopluto in PHP. This is a rewrite in JavaScript.\n\nUnfortunately, the cross origin policy prevents JavaScript from accessing\nfeeds directly. So there is a minimal python server which gets the feeds and\nalso converts them to JSON. I could have used a 3rd party service like the\n`google feed API`_ for this, but I did not want to leak any data to google and\nalso I already had the required python code from another project.\n\nThe JavaScript code depends on jQuery. However, I wrote a minimal\nreimplementation inspired by `jqlite`_ that is used instead. Why? Because it\nwas fun.\n\nDesign\n------\n\nThe default design is minimalistic and pratical. It is simply a list of post\nsorted by time. When you scroll to the bottom, more posts are loaded, so you\ncan just keep scrolling until no posts are left. Each post has a header\nsection with the publication time and the name of the source. When you click\non the source you go to the original post.\n\nThis design was inspired by `soup.io`_ and is also similar to tumblr.\n\nConfiguration\n-------------\n\nYou can configure all `flask related options`_ as well as ``HOST``, ``PORT``\nand ``URLS`` in a separate configuration file using ``plutopluto --config\nFILE``. See ``example.cfg`` for an example. If no configurations is provided,\nthe file ``.plutopluto.cfg`` is tried, first in the current folder, then in\nhome.\n\nSome options can be passed to plutopluto directly. See ``plutopluto --help``.\nIf defined, they take precedence over those from the config file.\n\nExtend/Hack\n-----------\n\nEverything about this project is meant to be simple. I am serious about this.\nI really want the code to be as easy to understand and extend by as many people\nas possible. If you see anything you don't understand: Please create a bug\nreport.\n\nFAQ\n---\n\nWhy the name \"plutopluto\"?\n There is some kind of a tradition of feed aggregators called this way:\n `planetplanet `_,\n `moonmoon `_\n\nWhat is the favicon?\n It's a sad pluto. `When I was a child, pluto was still considered a\n planet. `_\n\nThe posts are not sorted correctly\n Loading and parsing many feeds takes some time. So when the first posts are\n displayed, many feeds have not yet finished. In fact, the first posts are\n displayed as soon as the first feed is loaded. So the first few posts will\n necessarily originate from the same source.\n\nThe stream always starts with the same source\n See previous question.\n\n\n.. _`google feed API`: https://developers.google.com/feed/\n.. _`jqlite`: https://github.com/montyjanderson/jqlite\n.. _`soup.io`: http://www.soup.io/\n.. _`flask related options`: http://flask.pocoo.org/docs/0.10/config/#builtin-configuration-values", "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/xi/plutopluto", "keywords": null, "license": "GPLv2+", "maintainer": null, "maintainer_email": null, "name": "plutopluto", "package_url": "https://pypi.org/project/plutopluto/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/plutopluto/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/xi/plutopluto" }, "release_url": "https://pypi.org/project/plutopluto/1.2.0/", "requires_dist": null, "requires_python": null, "summary": "simple feed aggregator", "version": "1.2.0" }, "last_serial": 1876433, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "fb854ad5cca981da6d3d7a0cba2a3b8e", "sha256": "0ce15cf4dba2682bd290ce5814a4581637dbd186c92d8096005e109bcb5418c6" }, "downloads": -1, "filename": "plutopluto-1.0.0.tar.gz", "has_sig": false, "md5_digest": "fb854ad5cca981da6d3d7a0cba2a3b8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12427, "upload_time": "2014-09-26T03:17:58", "url": "https://files.pythonhosted.org/packages/61/ca/2ca73cab0765b0ea1395f17e7b6803550ba700be04ab16fc62c93cb9705e/plutopluto-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "dbb68d9d3876b6b6a3acdb5e65691b13", "sha256": "84305a7917f11ab84d81c8ca2dffd311182c09ab447d8f0e010118eb569bc8df" }, "downloads": -1, "filename": "plutopluto-1.0.1.tar.gz", "has_sig": false, "md5_digest": "dbb68d9d3876b6b6a3acdb5e65691b13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12426, "upload_time": "2014-09-26T18:32:40", "url": "https://files.pythonhosted.org/packages/12/e7/4887ef67b964c400f15d2f5d503f061043d906e4eb71f5e1446f136b2d3c/plutopluto-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "812a99461839131f28cd099dcd2b1d86", "sha256": "675c549f8b89182a2c79671c68515bd333b215760b1b136e0a4d92138a6fa2b2" }, "downloads": -1, "filename": "plutopluto-1.0.2.tar.gz", "has_sig": false, "md5_digest": "812a99461839131f28cd099dcd2b1d86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12477, "upload_time": "2014-12-26T10:37:49", "url": "https://files.pythonhosted.org/packages/57/70/a12a177603e5e8c7f56b016d613d45fcbba1e154f82b00ee7238f69ae4c4/plutopluto-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "476688ab873a630a47480867371c6609", "sha256": "d38cbacaeb8869f21a6d2df26972479a325b780605c96b755ee97236690ff2b4" }, "downloads": -1, "filename": "plutopluto-1.1.0.tar.gz", "has_sig": false, "md5_digest": "476688ab873a630a47480867371c6609", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15008, "upload_time": "2015-07-19T18:31:49", "url": "https://files.pythonhosted.org/packages/cf/df/28637824e2fb2332a26a412d75ba48dc4f5558c8f6706092c08f8da41d4e/plutopluto-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "1f91827c8f2a3e1714e2ab8d33645e68", "sha256": "d906d98d8ae2c70809baa4f3668f6deca420ef952b78caed83376ab7d34f4a74" }, "downloads": -1, "filename": "plutopluto-1.2.0.tar.gz", "has_sig": false, "md5_digest": "1f91827c8f2a3e1714e2ab8d33645e68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15143, "upload_time": "2015-12-24T10:18:56", "url": "https://files.pythonhosted.org/packages/bf/d2/6894f47efacbfb91177f5a61c8d4f1fda6b7b4da31aa32a50411f4c0d19f/plutopluto-1.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1f91827c8f2a3e1714e2ab8d33645e68", "sha256": "d906d98d8ae2c70809baa4f3668f6deca420ef952b78caed83376ab7d34f4a74" }, "downloads": -1, "filename": "plutopluto-1.2.0.tar.gz", "has_sig": false, "md5_digest": "1f91827c8f2a3e1714e2ab8d33645e68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15143, "upload_time": "2015-12-24T10:18:56", "url": "https://files.pythonhosted.org/packages/bf/d2/6894f47efacbfb91177f5a61c8d4f1fda6b7b4da31aa32a50411f4c0d19f/plutopluto-1.2.0.tar.gz" } ] }