I’m trying to figure out how to get the comments of a post given a link to it using ActivityPub.
Based on reading the ActivityPub spec, I thought comments were federated via the replies
key of the ActivityPub Object.
This works for Mastodon posts, but not for Lemmy (nor Pleroma). As an example
curl -H "Accept: application/activity+json" https://lemmy.my.id/post/79514 | jq
doesn’t contain a replies
key. Yet the comments are federated to Mastodon somehow.
What is going on? How can I get the comment?
AFAIK, you can’t load comments on posts manually. You only get comments that are pushed to your instance after someone has subscribed to the community containing the post.
Unfortunately I think you’re right. I tested it by trying to load the Lemmy post up on a couple of single-user Mastodon instances, and they failed to load it.
It looks like only Mastodon and PeerTube and maybe a couple others list replies alongside the post. It would be nice if more did because I’m relying on the feature for this project of mine: https://github.com/BentonEdmondson/servitor
The public links with post and comment in are used specifically for federation and can only really be used to build a hierarchy upwards. The use case for this probably will make it make more sense.
Say I subscribe to a remote community from my instance. I won’t get anything specifically until an activity happens. The first activity I get is a like for a comment. But I don’t have the comment. But luckily the like message has a link to the comment URL. So now I can fetch that. But how can I just show a comment out of context? I cannot, but the comment json tells me what it is in reply to. Maybe a post, maybe another comment. I can just keep fetching up the tree until I get to the post. Once I have all that I have something that can be rendered, the whole hierarchy from the liked comment to the post.
That’s why it works that way. It’s probably just to save on DB queries, why query the DB for all the comments if in normal federation use case it already has the comment(s) it wants if it reached the post.
But in the use case you give, how could you view the replies below the liked comment? If the replies key is absent you can’t. So you can only see those for Mastodon/PeerTube in that case, not Lemmy/Pleroma.
You can see the hierarchy above not below.
You might get a like. It looks like:
like: [ "id" => "https://lemmy.one/activities/like/7d0ef24f-755f-48dd-9b37-ea42041cb34e", "actor" => "https://lemmy.one/u/Matt", "object" => "https://lemmy.procrastinati.org/comment/146844", "type" => "Like", "audience" => "https://lemdro.id/c/android" ]
In the object property you see the comment. If you visit that you’ll get among the rest of the json for the comment
"inReplyTo": "https://lemmy.world/comment/1269475",
And again
"inReplyTo": "https://lemdro.id/post/77457",
Now you have the hierarchy from the like’s comment to the post. Not the rest of the tree, enough to render the comment in context though.
I understand exactly what you’re saying; you can get the parents but not the replies in that situation.
I’m just saying that in your situation (e.g. someone I follow on Mastodon likes a Lemmy post) it would be convenient for me as a user to be able to view the replies to that Lemmy post, but I cannot necessarily do that because Lemmy does not include
replies
.I expect it does, from the lemmy API. But from the ActivityPub api, it doesn’t make sense to.
Hi there! Looks like you linked to a Lemmy community using a URL instead of its name, which doesn’t work well for people on different instances. Try fixing it like this: [email protected]
So, do lemmy instances communicate with each other over their own API, in addition to ActivityPub?