lbryio / lbry-desktop

A browser and wallet for LBRY, the decentralized, user-controlled content marketplace.
https://lbry.tech
MIT License
3.56k stars 414 forks source link

RSS feed for channels #3779

Closed gyalogmadar closed 3 years ago

gyalogmadar commented 4 years ago

Filtering and managing content that Users are interested in is a challenge. I have RSS feed setups that are comfortable and give amazing powers to view/track content that I'm interested in. All the features that are needed is quite extensive, and it will be a challenge to implement.

Setting up an RSS feed for each channel will give the ability to add libry feeds to the same content readers.

Abstracting away all the filtering and managing logic from the platform to other tools that are focused explicitly on that and users are familiar with.

With some guidance I'm interested in implementing the feature.

tzarebczan commented 4 years ago

Hey, thanks for the issue! There's a community rss feed up here: https://gitlab.melroy.org/melroy/lbry-channel-feed

Not sure when we'll run our own, but let us know if that one meets the requirements.

kauffj commented 4 years ago

@tzarebczan imo this is a valid issue. It would involve writing a route that renders the claim list as RSS XML output. The URL to that route can then be embedded in page metadata and potentially linked on channel/search

gyalogmadar commented 4 years ago

@tzarebczan Thank you for the suggestion. It works as expected. @kauffj Can you point me to the correct repository where the new route could be added? With that as a starting point, i'll try to implement this.

kauffj commented 4 years ago

@gyalogmadar awesome! Happy to help and give a quick intro. If you hit trouble or have questions you can reply here or @kauffj after joining chat.lbry.org.

Since this would be a lbry.tv feature (as opposed to a general browser feature), most code should reside inside of the lbrytv folder. Since this is actually only be the 2nd server-side handled route (aside from the generic one that loads the client-side JS), patterns are not especially established inside of lbrytv.

So I think the simplest approach is to do this:

  1. Add an RSS channel route here: https://github.com/lbryio/lbry-desktop/blob/master/web/src/routes.js

  2. Create rss.js here: https://github.com/lbryio/lbry-desktop/tree/master/web/src 3 rss.js should take a channel name plus claim id and use chainquery.js to fetch the information required to render XML.

  3. Chainquery provides SQL-like structure of LBRY metadata. You can see full schema here: https://github.com/lbryio/chainquery/blob/master/db/chainquery_schema.sql, but you'll probably only need to query the claims table.

  4. You will probably want/need to write a new method in chainquery.js specifically for fetching the information you need

  5. https://github.com/lbryio/lbry-desktop/blob/master/web/src/routes.js

stefansundin commented 3 years ago

@kauffj I may try to implement this, but I have a few questions. Most importantly, do you have a preference on the RSS feed format (Atom versus RSS 2.0)?

Personally I would implement it as an Atom feed (with no option for RSS 2.0).

The community project lbry-channel-feed is plenty customizable via path syntax and offers RSS 2.0 (the default), Atom, and JSON feeds (https://jsonfeed.org/). It also has the option to customize the URLs in the feed (lbry://, lbry.tv, or odysee.com). I am guessing lbry.tv versus odysee.com could be determined based on what domain is used to access the feed, but should there be an option for lbry:// links somehow? (maybe using a query string parameter like ?links=lbry-protocol instead of path-based?)

Some RSS readers (like the one I use, Inoreader) support iframes, so would it be ok to include an iframe embed in the entries too?

Thanks!

melroy89 commented 3 years ago

I will take the challenge to re-implement my lbry channel feed in lbry-desktop/odysee.com. Let's first start with a MVP with lbry:// protocol and/or odysee.com links to a user provided LBRY channel name (@...).

Later, we can always extend the functionality if needed.

Regards, Melroy vd Berg

stefansundin commented 3 years ago

@danger89 I have been thinking about it a bit, and I would suggest the following:

Instead of having parameters that customize where the links go (odysee.com versus lbry://), have the main article link use odysee.com, and then an inline link near the top say something like Open in LBRY Desktop and have it use lbry:// for the same content. I think I would like this the best, and I would have the option to open it in the web browser or the desktop app depending on what the video is.

I had a lot of trouble trying to get the chainquery stuff working (https://github.com/lbryio/snapshots/issues/2), which is why I haven't made much progress on this. But now that I have the snapshot I may give this another try.

melroy89 commented 2 years ago

Hey, thanks for the issue! There's a community rss feed up here: https://gitlab.melroy.org/melroy/lbry-channel-feed

Not sure when we'll run our own, but let us know if that one meets the requirements.

I will now discontinue providing my RSS service, since LBRY has implemented RSS feature within their own client/website.