{"id":17190884,"url":"https://github.com/dfm/ugly","last_synced_at":"2025-04-13T19:42:55.771Z","repository":{"id":8487488,"uuid":"10092361","full_name":"dfm/ugly","owner":"dfm","description":"The ugliest Google Reader replacement on the market","archived":false,"fork":false,"pushed_at":"2020-06-12T18:27:06.000Z","size":122,"stargazers_count":6,"open_issues_count":3,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-07T18:51:22.556Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://reader.dfm.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dfm.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-05-16T02:46:58.000Z","updated_at":"2024-10-29T22:05:57.000Z","dependencies_parsed_at":"2022-09-09T22:40:51.309Z","dependency_job_id":null,"html_url":"https://github.com/dfm/ugly","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfm%2Fugly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfm%2Fugly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfm%2Fugly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfm%2Fugly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dfm","download_url":"https://codeload.github.com/dfm/ugly/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248771395,"owners_count":21159135,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-15T01:24:14.726Z","updated_at":"2025-04-13T19:42:55.732Z","avatar_url":"https://github.com/dfm.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Ugly Reader\n===========\n\n*The ugliest Google Reader replacement on the market.*\n\nTake a look at `the live demo \u003chttps://reader.dfm.io\u003e`_ or feel free to run your own\nversion locally.\n\nInstallation \u0026 Setup\n--------------------\n\nFirst off, you'll need a Postgres server running somewhere and your web user should have\nread and write access to a fresh database.\n\nIf you have a sane Python environment on your server, create a virtual environment and\nthen do the usual\n\n::\n\n    pip install -r requirements.txt\n\nThen, you'll need to sign up as a Google OAuth app using the `Google API Console\n\u003chttps://code.google.com/apis/console\u003e`_ and save your client ID and secret to a Python\nfile with the following syntax:\n\n::\n\n    GOOGLE_OAUTH2_CLIENT_ID = \"\u003cyour client ID\u003e\"\n    GOOGLE_OAUTH2_CLIENT_SECRET = \"\u003cyour client secret\u003e\"\n\nThe other options that you can set are shown in the default settings file \n``ugly/default_settings.py``. Make sure that you change your secret keys and double\ncheck that the Postgres URI points to the right server and database. Then, to build\nthe needed database tables, launch Python and run (if your custom settings file is\nsaved as ``local.py``):\n\n::\n\n    from ugly import create_app\n    from ugly.database import db\n    from ugly.models import *\n    \n    db.create_all(app=create_app(\"local.py\"))\n\nThe web app itself is built using `Flask \u003chttp://flask.pocoo.org/\u003e`_ and it lives\nin ``ugly/__init__.py``. For an example of how to run the app using a configuation\nsaved to ``local.py``, take a look at ``run_application.py``.\n\nFinally, you'll need to run a cronjob to update the feeds and deliver any updates\nto your Gmail accounts. This is implemented in the ``uglyd`` executable. You should\ninclude the command line flag ``--config /path/to/local.py`` indicating the path of\nyour local settings file. I've found that running every 15 minutes seems to work\npretty well. **Log all the things.**\n\nLicense\n-------\n\nCopyright 2013 `Dan Foreman-Mackey \u003chttp://dfm.io\u003e`_.\n\nUgly Reader is licensed under the MIT license (see LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfm%2Fugly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdfm%2Fugly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfm%2Fugly/lists"}