Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Indicating Item Source #13

Open
aaronpk opened this issue Jan 30, 2018 · 15 comments
Open

Indicating Item Source #13

aaronpk opened this issue Jan 30, 2018 · 15 comments

Comments

@aaronpk
Copy link
Member

aaronpk commented Jan 30, 2018

Because many traditional readers choose to show both the "Source" of an item in a feed when viewing it, in addition to the "Author" of the item, it may make sense to include some details about the Source in each Item in that source when retrieving a timeline.

See some examples below:

feedbin-screenshot

reeder-v1

reeder-v2

inoreader_channel_author_feed_example

This will also be useful when someone reposts content, so you want the item to show the original author, but you also want to show who reposted it. Twitter does this by adding a line above the tweet.

twitter-repost-indicator

@aaronpk
Copy link
Member Author

aaronpk commented Jan 30, 2018

A similar but slightly different version of this is when following content from forums, where you want to know which forum thread a post is from.

I currently use a forum API to subscribe to a few specific threads, which is sent to IRC. Replicating this in a reader interface would need some way to include which thread an item is part of so that it can be read in context.

@EdwardHinkle
Copy link

This is definitely important. Another use case, I have some news feeds that actually don't list the author. So I have "Unknown" as the author. I'd love in the event that the author is unknown and the source is known, to be able to just put the source in place of the author. Of course, if both are there then you can have both.

@aaronpk
Copy link
Member Author

aaronpk commented Jan 30, 2018

Would you want the client to do that logic of showing the source info in place of the author? It seems potentially messy to have the server do that.

@EdwardHinkle
Copy link

Oh, no the client can definitely do that. Just listing a reason why having source info was important.

@aaronpk
Copy link
Member Author

aaronpk commented Feb 6, 2018

Some brainstorming info:

It looks like current interfaces show the following information about the source:

  • icon
  • name
  • url

Atom has the following properties in their top-level feed info:

  • title
  • link
  • description
  • copyright
  • image

RSS has the following (abbreviated):

  • title
  • link
  • description
  • copyright
  • image

It looks like an h-card would describe a source nicely.

All of the sources I'm following are either single-person blogs, so the source would be their name/photo, or multi-author blogs, so the source is the publisher organization.

@aaronpk
Copy link
Member Author

aaronpk commented Mar 6, 2018

My current thought for this is to add a new property to the entry with the source's h-card info:

{
  "type": "entry",
  "url": "https://example.com/1000",
  ...
  ...
  "_source": {
    "url": https://example.com/",
    "name": "Example Feed",
    "photo": "https://example.com/photo.jpg"
  }
}

My main question is whether the url should be the home page URL of the feed or the actual feed URL. I'm almost thinking we need to be able to include both.

If you're following an Atom/RSS/JSONfeed, then the feed URL is not something you'd want to send a user to, so you'd want the "home page" URL instead. For HTML feeds, it would be fine to use the feed URL directly.

However from a security perspective, if the entry's URL is on a different domain than the URL the entry was found on, the UI may want to indicate this in some way, similar to how my webmentions display the source URL as "via ____" if the source URL domain is different from the entry's reported URL. The main case this might happen is an aggregator where the every item in the feed is from a different domain than the aggregator's feed. Also micro.blog feeds where the post's original URL is reported instead of the micro.blog URL.

So I'm thinking we might need two properties, feed URL and home page URL. Unfortunately this no longer maps well to h-card. Any ideas?

@mblaney
Copy link

mblaney commented Mar 7, 2018

hey I hope you don't mind if I jump in here, I'm thinking I probably need to add microsub to my reader at some point, so might as well join the discussion....

I agree that each post needs to contain a source url, I'm wondering if there's a way to request the rest of the information you're after from the server? I notice there's a search option in the spec, but that's a bit too broad.

If the client could query a source url for all the options you've mentioned, it could apply them to any post with a matching source url. That would save duplicating the same information per post, and would simplify adding per-user editable fields like feed names as @sknebel suggested.

@alexmingoia
Copy link

alexmingoia commented Dec 5, 2018

I think we should preserve both source URL and author info, and stick to microformats. How about this?

{
  "type": "entry",
  "url": "https://example.com/1000",
  ...
  ...
  "_source": {
    "type": "feed",
    "url": "https://example.com/feed.xml",
    "author": {
      "type": "card",
      "url": https://example.com/",
      "name": "Example Feed",
      "photo": "https://example.com/photo.jpg"
    }
  }
}

In that scenario, I'd also suggest microsub servers to exclude the _source.author if it's the same as the entry author.

@aaronpk
Copy link
Member Author

aaronpk commented Apr 18, 2019

@mblaney Interesting idea on getting the source info in a different request. That does force clients to become a bit more stateful, as opposed to being able to render a timeline from only info that comes back in the timeline response. I'm imagining adding this to Monocle which doesn't store any info itself, so that would require adding caching or making more requests each time a timeline is viewed. I'm not sure where I actually fall on this idea, but just wanted to get that data point out there.

@mblaney
Copy link

mblaney commented Apr 19, 2019

@aaronpk yeah that makes sense. You could avoid the extra request by returning the feed level information with the timeline action. So instead of { "items": [], "paging": {} } it becomes { "items": [], "feeds": [], "paging": {} } where the feeds array only lists sources found in the returned items, instead of all feeds.

@EdwardHinkle
Copy link

Now that is interesting, because that starts to remind me of a jf2 style solution, where source is an id, and then the feeds array would contain the source data based on id? It would definitely help it be a single request and avoid duplication of data

@dshanske
Copy link
Member

I want to propose source be provided as a required field and clients fall back on it when there is no author property in display, and can optionally display both. Author not being required as not always available

@jackjamieson2
Copy link

jackjamieson2 commented Jun 20, 2019 via email

@aaronpk
Copy link
Member Author

aaronpk commented Jul 24, 2021

{
  "type": "entry",
  "url": "https://example.com/1000",
  ...
  ...
  "_source": {
    "_id": "9857239874",
    "url": https://example.com/",
    "name": "Example Person",
    "photo": "https://example.com/photo.jpg"
  }
}

Properties:

  • url, name, photo: display values, the client should show the name and photo and click on the URL
  • _id: internal identifier for the reason this post is in this channel (e.g. the internal feed ID)

Clients should show an "unfollow" button next to a post, which can make an "unfollow" request passing the _id.

Commitments to implement:

Producers:

  • Yarns
  • Aperture
  • Micro.blog

Consumers:

  • Monocle
@pstuifzand
Copy link

Ekster has now implemented the format here for the items: #13 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment