FEP-dd4b: Quote Posts

Warning

このFEPはまだ翻訳されていません。

ここから翻訳に協力することができます。

Summary

This FEP describes the mechanism defined in Activity Streams 2.0 and the Activity Vocabulary for making quote posts, that is, Announce activities with additional commentary.

Motivation

Redistributing content or activities created by other actors is a key activity on the social web. The Announce activity type is defined in Activity Streams 2.0 ("AS2") to represent this activity. Announce is used in ActivityPub to provide sharing functionality; see 7.11 Announce Activity (sharing).

The Activity object type in AS2 inherits all the properties of the Object type. This means that all activity types have a rich set of properties for representation as first-class content on the social web. The Announce type is no exception.

However, the ActivityPub specification does not describe how to use those properties to provide additional commentary, metadata, and files for the shared content. Called "quote Tweets", "repost with comment", or "quote posts", this kind of extended sharing gives additional context to shared objects.

This FEP describes how to use the content property to provide this commentary, as well as other properties that may be useful in this context. It is applicable to uses of Activity Streams 2.0 in general; where it applies to ActivityPub, it is noted.

Specification

  • The object property of an Announce activity MUST be a reference to the shared content. It MAY be an AS2 Object or a Link, either as a JSON object or as a URL.
  • The content property of an Announce activity MAY be used to provide additional commentary on the shared content.
  • The attachment property of an Announce activity MAY be used to provide additional media content related to the shared content or the commentary.
  • The tag property of an Announce activity MAY be used to provide additional metadata, such as Mention objects or Hashtag objects, about the shared content or the commentary.
  • The inReplyTo property of an Announce activity MAY be used to connect an Announce activity to another object as a reply. The replied-to object MAY be the shared content, but this is unusual; it MAY also be part of a separate conversation.
  • An Announce activity with an inReplyTo property SHOULD be included in the replies collection of the object being replied to.
  • Announce activities SHOULD be counted as part of the shares collection of the shared content, regardless of any additional properties, as defined in 7.11 Announce Activity (sharing).

Basic Quote Post

This represents a simple quote post, where the actor is sharing a note from another actor with commentary.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/activities/aaabbbccc",
  "type": "Announce",
  "actor": "https://example.com/users/evan",
  "to": "https://example.com/users/evan/followers",
  "object": {
    "id": "https://example.com/notes/1234",
    "type": "Note",
    "attributedTo": "https://example.com/users/franklin"
  },
  "content": "I think that this is a good point and should be shared."
}

Quote Post with Attachment

This represents a quote post with an attachment, where the actor is sharing a note from another actor with commentary and an image.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/activities/dddeeefff",
  "type": "Announce",
  "actor": "https://example.com/users/evan",
  "to": "https://example.com/users/evan/followers",
  "object": {
    "id": "https://example.com/notes/1234",
    "type": "Note",
    "attributedTo": "https://example.com/users/franklin"
  },
  "content": "The author describes the rock formations of Crete; here's an example from my recent visit.",
  "attachment": {
    "type": "Link",
    "mediaType": "image/jpeg",
    "url": "https://example.com/images/1234.jpg"
  }
}

Quote Post with Hashtag

This represents a quote post with a hashtag, where the actor is sharing a note from another actor with commentary and a hashtag.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/activities/ghhiijjkk",
  "type": "Announce",
  "actor": "https://example.com/users/evan",
  "to": "https://example.com/users/evan/followers",
  "object": {
    "id": "https://example.com/notes/1234",
    "type": "Note",
    "attributedTo": "https://example.com/users/franklin"
  },
  "content": "Great description of Cretan geology; saving it for my next trip. <a href='https://example.com/tags/evanstriptocrete'>#evanstriptocrete</a>",
  "tag": {
    "type": "Hashtag",
    "href": "https://example.com/tags/evanstriptocrete",
    "name": "evanstriptocrete"
  }
}

Quote Post with Mention

This represents a quote post with a mention, where the actor is sharing a note from another actor with commentary and a mention.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/activities/lllmmnnoo",
  "type": "Announce",
  "actor": "https://example.com/users/evan",
  "to": ["https://example.com/users/evan/followers", "https://example.com/users/jeff"],
  "object": {
    "id": "https://example.com/notes/1234",
    "type": "Note",
    "attributedTo": "https://example.com/users/franklin"
  },
  "content": "<a href='https://example.com/users/jeff'>@jeff</a> you might like this Cretan geology article.",
  "tag": {
    "type": "Mention",
    "href": "https://example.com/users/jeff",
    "name": "jeff"
  }
}

The author of the quoted material can also be mentioned.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/activities/pppqqqrrr",
  "type": "Announce",
  "actor": "https://example.com/users/evan",
  "to": ["https://example.com/users/evan/followers", "https://example.com/users/franklin"],
  "object": {
    "id": "https://example.com/notes/1234",
    "type": "Note",
    "attributedTo": "https://example.com/users/franklin"
  },
  "content": "<a href='https://example.com/users/franklin'>@franklin</a> wrote this great Cretan geology article.",
  "tag": {
    "type": "Mention",
    "href": "https://example.com/users/franklin",
    "name": "franklin"
  }
}

Quote Post as Reply

A quote post can be used as a reply, often to share evidence or information from another source.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://example.com/activities/rrrsssttt",
  "type": "Note",
  "actor": "https://example.com/users/jeff",
  "to": "https://example.com/users/jeff/followers",
  "content": "Does anyone know where I can find a good article on Cretan geology?",
  "replies": {
    "id": "https://example.com/activities/rrrsssttt/replies",
    "type": "Collection",
    "totalItems": 1,
    "items": [
      {
        "id": "https://example.com/activities/lllmmnnoo",
        "type": "Announce",
        "actor": "https://example.com/users/evan",
        "object": {
          "id": "https://example.com/notes/1234",
          "type": "Note",
          "attributedTo": "https://example.com/users/franklin"
        },
        "content": "<a href='https://example.com/users/jeff'>@jeff</a> you might like this Cretan geology article.",
        "tag": {
          "type": "Mention",
          "href": "https://example.com/users/jeff",
          "name": "jeff"
        },
        "inReplyTo": "https://example.com/activities/rrrsssttt"
      }
    ]
  }
}

User interface guidance

A common representation of quote posts is to include the object of the Announce as an embedded card or other representation, with the content of the Announce object as introductory text.

Example of a quote post in a microblogging interface

Security considerations

For all Announce activities, it's important to consider how much of the shared content to expose to the recipient of the Announce activity. Using an URL as a reference, or including a limited set of metadata as in the examples in this FEP, allows the publishing server for the shared content to control access to the content. See Inclusion of the shared object in the ActivityPub Primer for more information.

参考文献

著作権

CC0 1.0 ユニバーサル (CC0 1.0) パブリック ドメイン

法律で認められる範囲において、この Fediverse 拡張提案の著者は、この作品に対するすべての著作権および関連する権利または隣接する権利を放棄しています。