scripting / blue.feedland

A place to discuss and develop an app that connects social media apps via feeds.
MIT License
5 stars 0 forks source link

RSS feed for a social media site #8

Open scripting opened 1 year ago

scripting commented 1 year ago

This is an RFC.

These are some proposed changes for the RSS feed generated by rss.firesky.tv.

An example of such a feed.

Proposed change

Values of the channel-level title and description elements are the title and description the user entered in the UI of the social media site.

Here's a screen shot of the dialog in Bluesky.

We let the author decide how their feed will appear in a feed reader.

Proposed addition

We add to the source namespace a way for the generator of the feed to provide metadata about it.

This is in addition to the already-existing source:account element.

A new channel-level element, source:socialMediaContext.

This is what it looks in JSON syntax.

source:socialMediaContext
    service: "Bluesky",
    username: "bullman.bsky.social",
    lists: [
        {
            follows: "https://firesky.tv/lists/bullman.bsky.social/follows.opml"
            }
        ]

In the docs for the Source namespace it will be in XML.

scripting commented 1 year ago

BTW, I will move this very soon to a more public place.

johnspurlock commented 1 year ago

Ok, <title> and <description> are now taken from profile for single-user-based rss search feeds

In the docs for the Source namespace it will be in XML.

can you paste the xml version in here? i can guess from the json, but would rather have it from the source

scripting commented 1 year ago

Thanks! This is great. Now I know what to propose to the Mastodon people. Do you know them?

Back in a minute with the XML stuff.

scripting commented 1 year ago

Okay since this is still very much an RFC, I am going to push back on my own design.

Action items.

  1. source:socialMediaContext is not needed, as specified. The first two elements are just a repeat of what the source:account element already does.

  2. In the current feed, the source:account element is repeated in each item, but it is specifically a channel-level element, per the spec. So the item-level source:account elements should be removed and a channel-level element with the same info added.

To figure out what's going on with lists, I need to find out what the intent of this element was. Is this (see below) the only list that might contain this feed, or do you want to include N lists?

<atom:link href="https://firesky.tv/lists/andy.baio.net/follows.opml" rel="follows-list" type="application/opml+xml"/>

atom:link is a bad idea here. This is a very fundamental concept, a list that contains a feed, it should be given proper docs and placement. source namespace is the right place for it now, in 2023.

scripting commented 1 year ago

BTW, having the title and description as the user entered it made it possible to straighten this out.

image
johnspurlock commented 1 year ago

or do you want to include N lists?

Right - high level, it's for discovering related lists from the user feed. The follows list is one, but one of many possible - could generate a few more (like followers, follows+2, mutuals), but eventually other user-managed lists (like Twitter lists)

scripting commented 1 year ago

Good. That's what I thought. It's also the connection between RSS and OPML, two great formats that belong together.

Are these all lists that contain this feed?

johnspurlock commented 1 year ago

no, even our first guy doesn't : )

unless you follow yourself

scripting commented 1 year ago

So I'm not sure what this is about?

Are you including all the lists that are available from this user?

Maybe we should talk about this in our voice chat.

johnspurlock commented 1 year ago

i'm not including anything other than follows at the moment, but just helping you think through the design of whatever "related lists" tag or structure you want to come up with - it should keep more than one named list in mind

scripting commented 1 year ago

Okay here's the idea --

<source:subscriptionList url="https:\//firesky.tv/lists/andy.baio.net/follows.opml">follows </source>

  1. Put as many of these as you like at the channel-level of the feed.
  2. The url points to an OPML subscription list per the OPML 2.0 spec.
  3. Prior art is the confusingly named and not-oft used <source> element in RSS 2.0.

The rationale for this is that at this time what's really going on is the developer wants to include an OPML subscription list with the feed and leave open the option of including others in the future.

It seems to me this is the most straightforward way to do so.

You are entitled to disagree btw @johnspurlock -- that's what the RFC process is for.

johnspurlock commented 1 year ago

I think we'll need a way to distinguish lists in a coherent way

let's do:

<source:subscriptionList url="https://firesky.tv/lists/andy.baio.net/follows.opml" rel="follows">List of feeds for accounts @andy.baio.net follows</source:subscriptionList>

rel would be for software - similar to html rel, known values could be reasoned about in the reader app >tag value< is for humans

johnspurlock commented 1 year ago

Deployed

e.g. https://rss.firesky.tv/?filter=from%3Awashingtonpost.com

<rss version="2.0" xmlns:source="http://source.scripting.com/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>The Washington Post</title>
    <link>https://firesky.tv/?filter=from%3Awashingtonpost.com</link>
    <description>Democracy Skys in Blueness</description>
    <language>en-us</language>
    <generator>https://firesky.tv</generator>
    <docs>http://cyber.law.harvard.edu/rss/rss.html</docs>
    <lastBuildDate>Mon, 22 May 2023 19:40:04 GMT</lastBuildDate>
    <atom:link href="https://rss.firesky.tv/?filter=from%3Awashingtonpost.com" rel="self" type="application/rss+xml" />
    <source:subscriptionList url="https://firesky.tv/lists/washingtonpost.com/follows.opml" rel="follows">Everyone The Washington Post follows on Bluesky</source:subscriptionList>
    <cloud domain="firesky-prod.sw.workers.dev" port="80" path="/rss-cloud-notify" registerProcedure="" protocol="http-post" />
    <item>
      <description>The federal government has concluded that a Georgia school district’s removal of titles with Black and LGBTQ characters may have created a “hostile environment” for students, potentially violating their civil rights. &lt;a href="https://wapo.st/3BNHWS0"&gt;https://wapo.st/3BNHWS0&lt;/a&gt;</description>
      <pubDate>Mon, 22 May 2023 17:38:21 GMT</pubDate>
      <link>https://bsky.app/profile/washingtonpost.com/post/3jwdiyed2pk2w</link>
      <guid isPermaLink="false">firesky:23052217382100060001</guid>
      <enclosure type="image/jpeg" length="45037" url="https://firesky.tv/b/230522173821000600010.jpg?did=did%3Aplc%3Ak5nskatzhyxersjilvtnz4lh&amp;cid=bafkreibt7eckteoqlxpdxx3fe2gjgdchhtcmmhdqx4qgatmzgbk6ut2uwq"/>
      <source:markdown>The federal government has concluded that a Georgia school district’s removal of titles with Black and LGBTQ characters may have created a “hostile environment” for students, potentially violating their civil rights. [https://wapo.st/3BNHWS0](https://wapo.st/3BNHWS0)</source:markdown>
      <source:account service="bluesky">washingtonpost.com</source:account>
      <dc:creator>washingtonpost.com</dc:creator>
    </item>
    ...
  </channel>
</rss>
scripting commented 1 year ago

I'm feeling pretty peppy now -- just got off a 40 minute Peloton.

If you want to know my opinion, and I assume you do because this is still an RFC thread, the "rel" attribute is terrible! It's an anti-interop concept along with the link element in HTML. It says (to me at least) "we don't want to work with each other to find something we all can use, so we're just going to punt and leave it up to each programmer to decide what they want to do."

I also asked ChatGPT what "rel" means in HTML and if RSS 2.0 ever uses that particular attribute.

http://ai.scripting.com/2023/05/22/html-link-rel-attribute.html

The answer is "rel" means "relationship" but you should read the rest of it. This isn't even an accurate use of the rel attribute.

And there is no element in RSS 2.0 that uses this attribute. So, let's put a little more into this and decide if this is really necessary, and if it is, figure out what's actually going on here, best as we can tell considering neither of us has built an application that uses this. (an important consideration, btw, in my experience)

scripting commented 1 year ago

With the change in how <title> works, this is what my feed list looks like now. Beautiful!

image
scripting commented 1 year ago

This is how I'm going to document source:subscriptionList

<source:subscriptionList url="https:\//firesky.tv/lists/washingtonpost.com/follows.opml">follows </source:subscriptionList>

johnspurlock commented 1 year ago

Alright, new version deployed!

e.g. https://rss.firesky.tv/?filter=from%3Awashingtonpost.com

scripting commented 1 year ago

Here are the docs for the new source:subscriptionList element.

http://source.scripting.com/#1684876699000

If I had it to do over, I'd call it source:subList. But I can live with the longer name.