author profile images as icons for RSS feeds?

Currently RSS feeds use the Observable logo / favicon as their icon. (Based on a feed reader looking up the icon from observablehq.com.)

From what I can tell skimming around the web, if an atom:icon element is included in feeds, many (most?) feed readers will show that icon for the feed. Author profile images would be generally more useful icons than the Observable logo for author feeds.

(I haven’t tested though, and am not an expert on feed xml and feed reader compatibility.)

3 Likes

For context, my RSS reader currently looks like:

Having separate per-author icons would help relate the view there to the view on observablehq.com

To avoid making too many new threads, I am going to just put more RSS/feed comments here as they come up. Reading around the web about this a bit, I didn’t realize that RSS compatibility is so complicated.

Currently all Observable RSS feed items just contain:

    <title> the title
    <link> a URL
    <description> clickable thumbnail, no text
    <guid> the same URL
    <pubDate> a timestamp

These should probably also at least include the author, especially feeds involving multiple authors like the firehose of recent notebooks or the feeds for collections.

It would also be nice to have last modification date (I am not sure but this might even cause previously visited rss entries to show up as unread in feed readers when they are updated? a possibly desirable behavior), a description/summary of a couple sentences, and ideally a longer html content including the first few paragraphs and images of the notebook. It seems like the thumbnail image can be in a separate “image” tag instead of in the description.

As a supplement to an RSS feed, it might be nice to also add a jsonfeed version, which is a bit easier to consume, and probably also easier to produce, https://jsonfeed.org/version/1.1 – apparently in jsonfeed the “author” is a json object consisting of name, url, and “avatar” image url.

I generate my own RSS for my blog within Observable https://observablehq.com/@tomlarkworthy/rss-atom-feed

There is a preview link dynamically served from the notebook via a serverside-cell

https://endpointservice.web.app/notebooks/@tomlarkworthy/rss-atom-feed/deployments/preview

If you want a custom RSS feed, comprised of public information (which what you are asking is), then we could potentially roll our own. All technical hurdles have been addressed in my example notebook though its not in a form that promotes resuse ATM.

1 Like

That’s very neat Tom!

I don’t know if it is the best long-term plan to permanently support author or collection RSS feeds using an off-site proxy, but it would definitely be a good platform for building a prototype / testing RSS or jsonfeed features.

I don’t know if it is the best long-term plan to permanently support author or collection RSS feeds using an off-site proxy

I don’t know either but I am curious where your biggest concerns lie.

We’ve added <image> elements to the RSS feeds for authors. Hope this helps!

1 Like

Hmm. I’m not sure that changed anything here. I’ll try to experiment with Tom’s proxy and see what I can figure out.

Hey I tried using Feedly and it was okish

What RSS feed reader are you using?

BTW, I added Google Cloud Logging and enabled CORS for everything by default so the proxy is easier to use and debug now.

According to the W3C feed validator the image URL is malformed, because the “&” is not encoded:

https://validator.w3.org/feed/check.cgi?url=https%3A%2F%2Fapi.observablehq.com%2Fdocuments%2F%40jrus.rss

When the “&” is replaced by &amp; (tested via the direct input method), the validator reports no remaining major issues.

This! I’m not sure how many things still only support RSS feeds, but JSON feeds are fairly widely supported, and, as I found out a couple of months ago when I did some web scraping to make my own, dead simple to implement as a serverless function (https://feeds.jedfox.com). If I were to make feeds in the future I would probably make them JSON-only unless there was a reason to do something else.

Okay, with a jsonfeed 1 feed, and starting from an Observable API parsed-json notebook n, this seems to work for a feed item, properly giving the author a name and icon in my feed reader:

({
  id: n.id,
  date_published: n.publish_time,
  date_modified: n.update_time,
  title: n.title,
  content_html: `<img src="https://static.observableusercontent.com/thumbnail/${n.thumbnail}.jpg">`,
  image: `https://static.observableusercontent.com/thumbnail/${n.thumbnail}.jpg`,
  url: `https://observablehq.com/@${n.owner.login}/${n.slug}`,
  author: {
    name: n.creator.name || n.creator.login, 
    url: `https://observablehq.com/@${n.creator.login}`, 
    avatar: n.creator.avatar_url
  }
})

(Not sure if there might be some advantage to turning category names into ‘tags’ for each notebook.)

If the author is the same for every item in the feed (e.g. it is an author feed, rather than /recent), then the author object can be put at top level instead of into each item separately.

For /recent, the top level content might be something like:

({
  version: "https://jsonfeed.org/version/1",
  title: "Recent Notebooks – Observable",
  description: "The firehose of all published notebooks at https://observablehq.com/",
  home_page_url: "https://observablehq.com/recent",
  feed_url: "https://api.observablehq.com/documents/public.json",
  favicon: "https://static.observablehq.com/favicon-512.0667824687f99c942a02e06e2db1a060911da0bf3606671676a255b1cf97b4fe.png",
  icon: "https://static.observablehq.com/favicon-512.0667824687f99c942a02e06e2db1a060911da0bf3606671676a255b1cf97b4fe.png",
  items: [
    ...
  ]
})

For author feeds I would recommend setting top-level icon and favicon to the author’s avatar URL.

Jsonfeed 1.1 replaced ‘author’ with ‘authors’ (a list), but it is only a few months old and I am not sure if feed readers have caught up yet.

2 Likes

Here is an example ‘recent’ feed based on @tomlarkworthy’s proxy, which includes author names and avatars,

notebook: https://observablehq.com/@jrus/rsstest

jsonfeed JSON: https://endpointservice.web.app/notebooks/@jrus/rsstest/deployments/preview

Having author avatars and names show up in this firehose feed is super helpful in my feed reader. For example, when I see a notebook like this where the preview and name are kinda boring, I will still click if I see that @mbostock wrote it:

I am pretty certain adding author names and avatars can also be done in RSS / Atom if desired.

3 Likes

One option here would be to provide both. Version 1.1-supporting parsers are supposed to ignore the author if authors is provided.

Okay @tomlarkworthy helped me a bit with putting multiple URLs in front of the same notebook on his proxy.

Now @jrus/feed creates endpoints like:

https://endpointservice.web.app/notebooks/@jrus/feed/recent

https://endpointservice.web.app/notebooks/@jrus/feed/@fil

etc.

If anyone wants to chat about this in real time, hop by d3js.zulipchat.com#observable>RSS feeds


I think the avatars as favicons make for a big improvement here (compare with the image near the top of the thread):

5 Likes

I have modified these feeds so that feed items start by showing the thumbnail, but if you click the thumbnail it gets replaced with an embedded notebook. https://endpointservice.web.app/notebooks/@jrus/feed/recent

1 Like