Giter Club home page Giter Club logo

rss-reader-angular's Introduction

Angular RSS Reader

An RSS reader with the following features:

  • The ability to view an RSS feed
  • The ability to read the latest headlines
  • The ability to listen to podcasts from an RSS feed (coming soon!)

You can view the deployed website here.

Notes

  • You'll need an API key for viewing an RSS feed (due to the restrictions that the Rss2Json API has). See this document for more info.

    • (Note that Rss2Json also currently limits the number of feed URLs you can pass to the API to be parsed - as of now, the limit is at 25 feed URLs.)

About

The project was originally a fork of https://github.com/becompany/angular2-rss-reader-tutorial, but has now turned into a separate repository of its own.

Technologies used

The project uses the following technologies listed below.

Frameworks

APIs

  • Rss2Json for converting an RSS feed to a JSON representation
  • NewsAPI for providing headlines data
  • RestCountries for providing country data

Continuous Integration (CI)/Continuous Deployment (CD) tools

Other

rss-reader-angular's People

Contributors

angular-cli avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar edricchan03 avatar jpuerto avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

decanjones

rss-reader-angular's Issues

API endpoints support

This issue will be the official tracker for API endpoints support (meant for the app but will be available for public use).
This issue will be also updated accordingly if there'll be progress reports/new API endpoints.

GET https://example.com/api/news

Gets the latest news.

Parameters:

Name Description
topic A topic (technology, news, etc.)

GET https://example.com/api/notifications

Gets the notifications of unread news article(s) that he/she hasn't read.
⚠️ Requires the user to be authenticated before continuing

Parameters:

Name Description
userID The user's ID

GET https://example.com/api/readlater

Gets all article(s) that he/she has marked as read later.
⚠️ Requires the user to be authenticated before continuing

Parameters:

Name Description
userID The user's ID

POST https://example.com/api/readlater

When posted, it will be added to the list of read laters that he/she has.
⚠️ Requires the user to be authenticated before continuing

Parameters:

Name Description
post The post to be added to read later
userID Where to save the post to (aka the user's ID)

DELETE https://example.com/api/readlater

Deletes the specified read later.
⚠️ Requires the user to be authenticated before continuing

Parameters:

Name Description
postID The ID of the post to be deleted

TODO

  • Implement auth (required to prevent others from accessing confidential stuff)
  • Figure out how to allow parameters
  • Use Heroku for API endpoint support
  • Read documentation on Heroku
  • MongoDB/Alternate database service
  • Update links above with URL of Heroku app
  • Figure out which branch to place Heroku in
  • Read up on Express.js

Action required: Greenkeeper could not be activated 🚨

🚨 You need to enable Continuous Integration on all branches of this repository. 🚨

To enable Greenkeeper, you need to make sure that a commit status is reported on all branches. This is required by Greenkeeper because it uses your CI build statuses to figure out when to notify you about breaking changes.

Since we didn’t receive a CI status on the greenkeeper/initial branch, it’s possible that you don’t have CI set up yet. We recommend using Travis CI, but Greenkeeper will work with every other CI service as well.

If you have already set up a CI for this repository, you might need to check how it’s configured. Make sure it is set to run on all new branches. If you don’t want it to run on absolutely every branch, you can whitelist branches starting with greenkeeper/.

Once you have installed and configured CI on this repository correctly, you’ll need to re-trigger Greenkeeper’s initial pull request. To do this, please delete the greenkeeper/initial branch in this repository, and then remove and re-add this repository to the Greenkeeper App’s white list on Github. You'll find this list on your repo or organization’s settings page, under Installed GitHub Apps.

Add support for podcast RSS feeds

Currently, the API I'm using to parse RSS feeds to JSON (rss2json) also supports parsing podcast RSS feeds as the formats are quite similar.

Here's what the API spits out (for a single item) when I pass in a regular RSS feed (I'm using the RSS feed from the Android Developers blog):

{
  "title": "The path to DX deprecation",
  "pubDate": "2020-02-04 17:00:00",
  "link": "http://feedproxy.google.com/~r/blogspot/hsDu/~3/QFqlKD_NKMY/the-path-to-dx-deprecation.html",
  "guid": "tag:blogger.com,1999:blog-6755709643044947179.post-2036758058664532886",
  "author": "Android Developers",
  "thumbnail": "https://1.bp.blogspot.com/-v8edB3sVed0/XjmhkeNtWVI/AAAAAAAAOC0/7_7cVD3KIIkumfdnR4IAqWkCn4l9IccdgCLcBGAsYHQ/s72-c/unnamed.png",
  "description": "\n<img src=\"https://1.bp.blogspot.com/-v8edB3sVed0/XjmhkeNtWVI/AAAAAAAAOC0/7_7cVD3KIIkumfdnR4IAqWkCn4l9IccdgCLcBGAsYHQ/s1600/unnamed.png\"><a href=\"https://1.bp.blogspot.com/-v8edB3sVed0/XjmhkeNtWVI/AAAAAAAAOC0/7_7cVD3KIIkumfdnR4IAqWkCn4l9IccdgCLcBGAsYHQ/s1600/unnamed.png\" imageanchor=\"1\"><img border=\"0\" src=\"https://1.bp.blogspot.com/-v8edB3sVed0/XjmhkeNtWVI/AAAAAAAAOC0/7_7cVD3KIIkumfdnR4IAqWkCn4l9IccdgCLcBGAsYHQ/s1600/unnamed.png\" data-original-width=\"512\" data-original-height=\"152\" alt=\"generic Android header\"></a>\n\n<p>\n<em>Posted by Leo Sei, Product Manager on Android </em>\n</p>\n<p>\nBack in 2017, we released D8, a new faster dexing compiler to replace DX, producing smaller APKs. In April 2018, we <a href=\"https://android-developers.googleblog.com/2018/04/android-studio-switching-to-d8-dexer.html\">announced</a> D8 as the default option in Android Studio 3.1.\n</p>\n<p>\nIn that announcement, we laid out 3 phases to deprecate DX and we are now entering phase 2:\n</p>\n<p>\n<em>“Once we've seen a six month window without major regressions from DX to D8, we'll enter the second phase. This phase will last for a year, and is intended to ensure that even complex projects have lots of time to migrate. During this phase, we'll keep DX available, but we'll treat it as fully deprecated; we won't be fixing any issues.”</em>\n</p>\n<p>\nIf you haven’t already, it is now the time to migrate to D8 (see details in the <a href=\"https://android-developers.googleblog.com/2018/04/android-studio-switching-to-d8-dexer.html\">previous post</a>). As always, if you encounter issues, please do <a href=\"https://b.corp.google.com/issues/new?component=192708&amp;template=840533\">let us know</a>!\n</p>\n<p>\n<strong>Next steps</strong>\n</p>\n<p>\nOn Feb 1st, 2021, we’ll move to step 3, removing DX fully from Android Studio and any other build environments.\n</p>\n<p>\nNote: This post is about DX only (and does <span>not</span> include shrinking tools)\n</p>\n<div class=\"feedflare\">\n<a href=\"http://feeds.feedburner.com/~ff/blogspot/hsDu?a=QFqlKD_NKMY:82VXdZKzSt8:yIl2AUoC8zA\"><img src=\"http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA\" border=\"0\"></a> <a href=\"http://feeds.feedburner.com/~ff/blogspot/hsDu?a=QFqlKD_NKMY:82VXdZKzSt8:-BTjWOF_DHI\"><img src=\"http://feeds.feedburner.com/~ff/blogspot/hsDu?i=QFqlKD_NKMY:82VXdZKzSt8:-BTjWOF_DHI\" border=\"0\"></a>\n</div>\n<img src=\"http://feeds.feedburner.com/~r/blogspot/hsDu/~4/QFqlKD_NKMY\" height=\"1\" width=\"1\" alt=\"\">\n",
  "content": "\n<img src=\"https://1.bp.blogspot.com/-v8edB3sVed0/XjmhkeNtWVI/AAAAAAAAOC0/7_7cVD3KIIkumfdnR4IAqWkCn4l9IccdgCLcBGAsYHQ/s1600/unnamed.png\"><a href=\"https://1.bp.blogspot.com/-v8edB3sVed0/XjmhkeNtWVI/AAAAAAAAOC0/7_7cVD3KIIkumfdnR4IAqWkCn4l9IccdgCLcBGAsYHQ/s1600/unnamed.png\" imageanchor=\"1\"><img border=\"0\" src=\"https://1.bp.blogspot.com/-v8edB3sVed0/XjmhkeNtWVI/AAAAAAAAOC0/7_7cVD3KIIkumfdnR4IAqWkCn4l9IccdgCLcBGAsYHQ/s1600/unnamed.png\" data-original-width=\"512\" data-original-height=\"152\" alt=\"generic Android header\"></a>\n\n<p>\n<em>Posted by Leo Sei, Product Manager on Android </em>\n</p>\n<p>\nBack in 2017, we released D8, a new faster dexing compiler to replace DX, producing smaller APKs. In April 2018, we <a href=\"https://android-developers.googleblog.com/2018/04/android-studio-switching-to-d8-dexer.html\">announced</a> D8 as the default option in Android Studio 3.1.\n</p>\n<p>\nIn that announcement, we laid out 3 phases to deprecate DX and we are now entering phase 2:\n</p>\n<p>\n<em>“Once we've seen a six month window without major regressions from DX to D8, we'll enter the second phase. This phase will last for a year, and is intended to ensure that even complex projects have lots of time to migrate. During this phase, we'll keep DX available, but we'll treat it as fully deprecated; we won't be fixing any issues.”</em>\n</p>\n<p>\nIf you haven’t already, it is now the time to migrate to D8 (see details in the <a href=\"https://android-developers.googleblog.com/2018/04/android-studio-switching-to-d8-dexer.html\">previous post</a>). As always, if you encounter issues, please do <a href=\"https://b.corp.google.com/issues/new?component=192708&amp;template=840533\">let us know</a>!\n</p>\n<p>\n<strong>Next steps</strong>\n</p>\n<p>\nOn Feb 1st, 2021, we’ll move to step 3, removing DX fully from Android Studio and any other build environments.\n</p>\n<p>\nNote: This post is about DX only (and does <span>not</span> include shrinking tools)\n</p>\n<div class=\"feedflare\">\n<a href=\"http://feeds.feedburner.com/~ff/blogspot/hsDu?a=QFqlKD_NKMY:82VXdZKzSt8:yIl2AUoC8zA\"><img src=\"http://feeds.feedburner.com/~ff/blogspot/hsDu?d=yIl2AUoC8zA\" border=\"0\"></a> <a href=\"http://feeds.feedburner.com/~ff/blogspot/hsDu?a=QFqlKD_NKMY:82VXdZKzSt8:-BTjWOF_DHI\"><img src=\"http://feeds.feedburner.com/~ff/blogspot/hsDu?i=QFqlKD_NKMY:82VXdZKzSt8:-BTjWOF_DHI\" border=\"0\"></a>\n</div>\n<img src=\"http://feeds.feedburner.com/~r/blogspot/hsDu/~4/QFqlKD_NKMY\" height=\"1\" width=\"1\" alt=\"\">\n",
  "enclosure": {
    "thumbnail": "https://1.bp.blogspot.com/-v8edB3sVed0/XjmhkeNtWVI/AAAAAAAAOC0/7_7cVD3KIIkumfdnR4IAqWkCn4l9IccdgCLcBGAsYHQ/s72-c/unnamed.png"
  },
  "categories": [
    "Android App",
    "d8",
    "dexer",
    "dx"
  ]
}

As compared to what it spits out (for a single item) when I pass in a podcast RSS feed (I'm using the RSS feed for the popular show "Stuff You Should Know" by HowStuffWorks and iHeartRadio):

{
  "title": "SYSK Selects: How Bonsai Works",
  "pubDate": "2020-02-08 10:00:00",
  "link": "https://www.howstuffworks.com/c3fc0fd2-5460-11e8-b38c-67bbf97a6de1",
  "guid": "c3fc0fd2-5460-11e8-b38c-67bbf97a6de1",
  "author": "iHeartRadio &amp; HowStuffWorks",
  "thumbnail": "http://megaphone-prod.s3.amazonaws.com/podcasts/c3fc0fd2-5460-11e8-b38c-67bbf97a6de1/image/uploads_2F1580829065229-5umkrrl48d-78657334576b3c7c6aa6bcba0a7f8881_2FSKSKLogo-FINAL-iHR-3000x3000.png",
  "description": "For thousands of years people have been taking normal trees and forcing them into miniature. Learn all about the history and art of this strangely engrossing pastime in this classic episode.\n Learn more about your ad-choices at https://news.iheart.com/podcast-advertisers",
  "content": "\n<p>For thousands of years people have been taking normal trees and forcing them into miniature. Learn all about the history and art of this strangely engrossing pastime in this classic episode.</p>\n<p> </p> Learn more about your ad-choices at <a href=\"https://news.iheart.com/podcast-advertisers\">https://news.iheart.com/podcast-advertisers</a>\n",
  "enclosure": {
    "link": "https://www.podtrac.com/pts/redirect.mp3/chtbl.com/track/5899E/traffic.megaphone.fm/HSW9319766045.mp3",
    "type": "audio/mpeg",
    "duration": 3528,
    "rating": {
      "scheme": "urn:itunes",
      "value": "no"
    }
  },
  "categories": []
}

Tasks

  • Add a dedicated sub-page for podcasts
    • Or maybe support podcast RSS feeds in the feeds page? (We could check if enclosure.type is of an audio file)
  • Add a new component for rendering individual items
    • Maybe turn it into a library component while we're at it
  • Indicate that podcast RSS feeds are now supported in a "What's new" pop-up? Or probably the release notes

Action required: Greenkeeper could not be activated 🚨

🚨 You need to enable Continuous Integration on all branches of this repository. 🚨

To enable Greenkeeper, you need to make sure that a commit status is reported on all branches. This is required by Greenkeeper because it uses your CI build statuses to figure out when to notify you about breaking changes.

Since we didn’t receive a CI status on the greenkeeper/initial branch, it’s possible that you don’t have CI set up yet. We recommend using Travis CI, but Greenkeeper will work with every other CI service as well.

If you have already set up a CI for this repository, you might need to check how it’s configured. Make sure it is set to run on all new branches. If you don’t want it to run on absolutely every branch, you can whitelist branches starting with greenkeeper/.

Once you have installed and configured CI on this repository correctly, you’ll need to re-trigger Greenkeeper’s initial pull request. To do this, please delete the greenkeeper/initial branch in this repository, and then remove and re-add this repository to the Greenkeeper App’s white list on Github. You'll find this list on your repo or organization’s settings page, under Installed GitHub Apps.

Search support

There should be a way to search the RSS.

  • Search designing
  • Search prototyping
  • Search implementation
  • Dynamic routing (querying?)

Multiple themes

There should be support for multiple themes.

  • Lazy loading (optional)

Implement a better UI

Currently, the user interface looks unfriendly to new users who use the app:

Current UI

Here's a preview of how the UI should look like:

Preview

Settings

Some more settings to implement (examples):

  • Multiple RSS support (experimental) #3
  • Notify on new releases
  • RSS feed notifications?
  • Toggle show source code of feed article JSON card overflow menu item
  • Theme picker

Native Android support

Yup. An official android app will be coming. :)
This will be the official issue to track progress for the app.

  • Implement auto-changing of actionbar icons
  • User interface (bottom navigation)
  • Add RSS support
  • Configure RSS dialog
  • Release to Play Store (optional)
  • Add app icon
  • Add credits page to thank those who helped make it possible
  • Dedicated repo for Android (Available here)
  • Swipe to refresh (in progress)

App breaks when loading invalid RSS URL

Problem

When the user attempts to enter a URL which is invalid in the RSS dialog, the app breaks and an error is shown.

Error

Possible solutions

  1. Check if the URL returns a status of error (something like this):
    {
        "status":"error",
        "message":"You are converting new feeds in a short period, please try again later or use an api key."
    }
  2. Clear the localStorage if the following above happens using this code:
    window.localStorage.clear();
    // or localStorage.clear();

Automate releases on tags

Currently, I've been manually creating releases using GitHub's web interface and copying and pasting the release notes from release-notes.json. However, this can eventually be troublesome.

EDIT: Here's a checklist indicating the things to be done for the new tags workflow:

  • Pull-in changes from release-notes.json
  • Add support for retrieving updated/moved/added/removed dependencies in package.json
  • Add support for including merged PRs in the release notes
  • Remove draft mode (?) once stable

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.