This commit is contained in:
parent
b0c4d4e19c
commit
619913dec3
1 changed files with 251 additions and 0 deletions
251
technology/internet/OpenGraphProtocol.md
Normal file
251
technology/internet/OpenGraphProtocol.md
Normal file
|
@ -0,0 +1,251 @@
|
|||
---
|
||||
obj: concept
|
||||
website: https://ogp.me
|
||||
rev: 2024-12-16
|
||||
---
|
||||
|
||||
# The Open Graph protocol
|
||||
The [Open Graph protocol](https://ogp.me/) enables any web page to become a rich object in a social graph. For instance, this is used on Facebook to allow any web page to have the same functionality as any other object on Facebook.
|
||||
|
||||
## Basic Metadata
|
||||
To turn your web pages into graph objects, you need to add basic metadata to your page. Which means that you'll place additional `<meta>` tags in the `<head>` of your web page. The four required properties for every page are:
|
||||
|
||||
- `og:title` - The title of your object as it should appear within the graph, e.g., "The Rock".
|
||||
- `og:type` - The type of your object, e.g., `video.movie`. Depending on the type you specify, other properties may also be required.
|
||||
- `og:image` - An image URL which should represent your object within the graph.
|
||||
- `og:url` - The canonical URL of your object that will be used as its permanent ID in the graph, e.g., "https://www.imdb.com/title/tt0117500/".
|
||||
|
||||
As an example, the following is the Open Graph protocol markup for [The Rock on IMDB](https://www.imdb.com/title/tt0117500/):
|
||||
|
||||
```html
|
||||
<html prefix="og: https://ogp.me/ns#">
|
||||
<head>
|
||||
<title>The Rock (1996)</title>
|
||||
<meta property="og:title" content="The Rock" />
|
||||
<meta property="og:type" content="video.movie" />
|
||||
<meta property="og:url" content="https://www.imdb.com/title/tt0117500/" />
|
||||
<meta property="og:image" content="https://ia.media-imdb.com/images/rock.jpg" />
|
||||
...
|
||||
</head>
|
||||
...
|
||||
</html>
|
||||
```
|
||||
|
||||
### Optional Metadata
|
||||
The following properties are optional for any object and are generally recommended:
|
||||
|
||||
- `og:audio` - A URL to an audio file to accompany this object.
|
||||
- `og:description` - A one to two sentence description of your object.
|
||||
- `og:determiner` - The word that appears before this object's title in a sentence. An enum of (`a`, `an`, `the`, `""`, `auto`). If `auto` is chosen, the consumer of your data should chose between `a` or `an`. Default is `""` (blank).
|
||||
- `og:locale` - The locale these tags are marked up in. Of the format `language_TERRITORY`. Default is `en_US`.
|
||||
- `og:locale:alternate` - An array of other locales this page is available in.
|
||||
- `og:site_name` - If your object is part of a larger web site, the name which should be displayed for the overall site. e.g., "IMDb".
|
||||
- `og:video` - A URL to a video file that complements this object.
|
||||
|
||||
For example (line-break solely for display purposes):
|
||||
|
||||
```html
|
||||
<meta property="og:audio" content="https://example.com/bond/theme.mp3" />
|
||||
<meta property="og:description"
|
||||
content="Sean Connery found fame and fortune as the
|
||||
suave, sophisticated British agent, James Bond." />
|
||||
<meta property="og:determiner" content="the" />
|
||||
<meta property="og:locale" content="en_GB" />
|
||||
<meta property="og:locale:alternate" content="fr_FR" />
|
||||
<meta property="og:locale:alternate" content="es_ES" />
|
||||
<meta property="og:site_name" content="IMDb" />
|
||||
<meta property="og:video" content="https://example.com/bond/trailer.swf" />
|
||||
```
|
||||
|
||||
## Structured Properties
|
||||
Some properties can have extra metadata attached to them. These are specified in the same way as other metadata with `property` and `content`, but the `property` will have extra `:`.
|
||||
|
||||
The `og:image` property has some optional structured properties:
|
||||
|
||||
- `og:image:url` - Identical to `og:image`.
|
||||
- `og:image:secure_url` - An alternate url to use if the webpage requires HTTPS.
|
||||
- `og:image:type` - A MIME type for this image.
|
||||
- `og:image:width` - The number of pixels wide.
|
||||
- `og:image:height` - The number of pixels high.
|
||||
- `og:image:alt` - A description of what is in the image (not a caption). If the page specifies an og:image it should specify `og:image:alt`.
|
||||
|
||||
A full image example:
|
||||
|
||||
```html
|
||||
<meta property="og:image" content="https://example.com/ogp.jpg" />
|
||||
<meta property="og:image:secure_url" content="https://secure.example.com/ogp.jpg" />
|
||||
<meta property="og:image:type" content="image/jpeg" />
|
||||
<meta property="og:image:width" content="400" />
|
||||
<meta property="og:image:height" content="300" />
|
||||
<meta property="og:image:alt" content="A shiny red apple with a bite taken out" />
|
||||
```
|
||||
|
||||
The `og:video` tag has the identical tags as `og:image`. Here is an example:
|
||||
|
||||
```html
|
||||
<meta property="og:video" content="https://example.com/movie.swf" />
|
||||
<meta property="og:video:secure_url" content="https://secure.example.com/movie.swf" />
|
||||
<meta property="og:video:type" content="application/x-shockwave-flash" />
|
||||
<meta property="og:video:width" content="400" />
|
||||
<meta property="og:video:height" content="300" />
|
||||
```
|
||||
|
||||
The `og:audio` tag only has the first 3 properties available (since size doesn't make sense for sound):
|
||||
|
||||
```html
|
||||
<meta property="og:audio" content="https://example.com/sound.mp3" />
|
||||
<meta property="og:audio:secure_url" content="https://secure.example.com/sound.mp3" />
|
||||
<meta property="og:audio:type" content="audio/mpeg" />
|
||||
```
|
||||
|
||||
## Arrays
|
||||
If a tag can have multiple values, just put multiple versions of the same `<meta>` tag on your page. The first tag (from top to bottom) is given preference during conflicts.
|
||||
|
||||
```html
|
||||
<meta property="og:image" content="https://example.com/rock.jpg" />
|
||||
<meta property="og:image" content="https://example.com/rock2.jpg" />
|
||||
```
|
||||
|
||||
Put structured properties after you declare their root tag. Whenever another root element is parsed, that structured property is considered to be done and another one is started.
|
||||
|
||||
For example:
|
||||
|
||||
```html
|
||||
<meta property="og:image" content="https://example.com/rock.jpg" />
|
||||
<meta property="og:image:width" content="300" />
|
||||
<meta property="og:image:height" content="300" />
|
||||
<meta property="og:image" content="https://example.com/rock2.jpg" />
|
||||
<meta property="og:image" content="https://example.com/rock3.jpg" />
|
||||
<meta property="og:image:height" content="1000" />
|
||||
```
|
||||
|
||||
means there are 3 images on this page, the first image is `300x300`, the middle one has unspecified dimensions, and the last one is `1000px` tall.
|
||||
|
||||
## Object Types
|
||||
In order for your object to be represented within the graph, you need to specify its type. This is done using the `og:type` property:
|
||||
|
||||
```html
|
||||
<meta property="og:type" content="website" />
|
||||
```
|
||||
|
||||
When the community agrees on the schema for a type, it is added to the list of global types. All other objects in the type system are CURIEs of the form.
|
||||
|
||||
```html
|
||||
<head prefix="my_namespace: https://example.com/ns#">
|
||||
<meta property="og:type" content="my_namespace:my_type" />
|
||||
```
|
||||
|
||||
The global types are grouped into verticals. Each vertical has its own namespace. The `og:type` values for a namespace are always prefixed with the namespace and then a period. This is to reduce confusion with user-defined namespaced types which always have colons in them.
|
||||
|
||||
### Music
|
||||
|
||||
- Namespace URI: [`https://ogp.me/ns/music#`](https://ogp.me/ns/music)
|
||||
|
||||
`og:type` values:
|
||||
|
||||
[`music.song`](https://ogp.me/#type_music.song)
|
||||
|
||||
- `music:duration` - [integer](https://ogp.me/#integer) >=1 - The song's length in seconds.
|
||||
- `music:album` - [music.album](https://ogp.me/#type_music.album) [array](https://ogp.me/#array) - The album this song is from.
|
||||
- `music:album:disc` - [integer](https://ogp.me/#integer) >=1 - Which disc of the album this song is on.
|
||||
- `music:album:track` - [integer](https://ogp.me/#integer) >=1 - Which track this song is.
|
||||
- `music:musician` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - The musician that made this song.
|
||||
|
||||
[`music.album`](https://ogp.me/#type_music.album)
|
||||
|
||||
- `music:song` - [music.song](https://ogp.me/#type_music.song) - The song on this album.
|
||||
- `music:song:disc` - [integer](https://ogp.me/#integer) >=1 - The same as `music:album:disc` but in reverse.
|
||||
- `music:song:track` - [integer](https://ogp.me/#integer) >=1 - The same as `music:album:track` but in reverse.
|
||||
- `music:musician` - [profile](https://ogp.me/#type_profile) - The musician that made this song.
|
||||
- `music:release_date` - [datetime](https://ogp.me/#datetime) - The date the album was released.
|
||||
|
||||
[`music.playlist`](https://ogp.me/#type_music.playlist)
|
||||
|
||||
- `music:song` - Identical to the ones on [music.album](https://ogp.me/#type_music.album)
|
||||
- `music:song:disc`
|
||||
- `music:song:track`
|
||||
- `music:creator` - [profile](https://ogp.me/#type_profile) - The creator of this playlist.
|
||||
|
||||
[`music.radio_station`](https://ogp.me/#type_music.radio_station)
|
||||
|
||||
- `music:creator` - [profile](https://ogp.me/#type_profile) - The creator of this station.
|
||||
|
||||
### Video
|
||||
|
||||
- Namespace URI: [`https://ogp.me/ns/video#`](https://ogp.me/ns/video)
|
||||
|
||||
`og:type` values:
|
||||
|
||||
[`video.movie`](https://ogp.me/#type_video.movie)
|
||||
|
||||
- `video:actor` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - Actors in the movie.
|
||||
- `video:actor:role` - [string](https://ogp.me/#string) - The role they played.
|
||||
- `video:director` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - Directors of the movie.
|
||||
- `video:writer` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - Writers of the movie.
|
||||
- `video:duration` - [integer](https://ogp.me/#integer) >=1 - The movie's length in seconds.
|
||||
- `video:release_date` - [datetime](https://ogp.me/#datetime) - The date the movie was released.
|
||||
- `video:tag` - [string](https://ogp.me/#string) [array](https://ogp.me/#array) - Tag words associated with this movie.
|
||||
|
||||
[`video.episode`](https://ogp.me/#type_video.episode)
|
||||
|
||||
- `video:actor` - Identical to [video.movie](https://ogp.me/#type_video.movie)
|
||||
- `video:actor:role`
|
||||
- `video:director`
|
||||
- `video:writer`
|
||||
- `video:duration`
|
||||
- `video:release_date`
|
||||
- `video:tag`
|
||||
- `video:series` - [video.tv_show](https://ogp.me/#type_video.tv_show) - Which series this episode belongs to.
|
||||
|
||||
[`video.tv_show`](https://ogp.me/#type_video.tv_show)
|
||||
|
||||
A multi-episode TV show. The metadata is identical to [video.movie](https://ogp.me/#type_video.movie).
|
||||
|
||||
[`video.other`](https://ogp.me/#type_video.other)
|
||||
|
||||
A video that doesn't belong in any other category. The metadata is identical to [video.movie](https://ogp.me/#type_video.movie).
|
||||
|
||||
### No Vertical
|
||||
These are globally defined objects that just don't fit into a vertical but yet are broadly used and agreed upon.
|
||||
|
||||
`og:type` values:
|
||||
|
||||
[`article`](https://ogp.me/#type_article) - Namespace URI: [`https://ogp.me/ns/article#`](https://ogp.me/ns/article)
|
||||
|
||||
- `article:published_time` - [datetime](https://ogp.me/#datetime) - When the article was first published.
|
||||
- `article:modified_time` - [datetime](https://ogp.me/#datetime) - When the article was last changed.
|
||||
- `article:expiration_time` - [datetime](https://ogp.me/#datetime) - When the article is out of date after.
|
||||
- `article:author` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - Writers of the article.
|
||||
- `article:section` - [string](https://ogp.me/#string) - A high-level section name. E.g. Technology
|
||||
- `article:tag` - [string](https://ogp.me/#string) [array](https://ogp.me/#array) - Tag words associated with this article.
|
||||
|
||||
[`book`](https://ogp.me/#type_book) - Namespace URI: [`https://ogp.me/ns/book#`](https://ogp.me/ns/book)
|
||||
|
||||
- `book:author` - [profile](https://ogp.me/#type_profile) [array](https://ogp.me/#array) - Who wrote this book.
|
||||
- `book:isbn` - [string](https://ogp.me/#string) - The [ISBN](https://en.wikipedia.org/wiki/International_Standard_Book_Number)
|
||||
- `book:release_date` - [datetime](https://ogp.me/#datetime) - The date the book was released.
|
||||
- `book:tag` - [string](https://ogp.me/#string) [array](https://ogp.me/#array) - Tag words associated with this book.
|
||||
|
||||
[`profile`](https://ogp.me/#type_profile) - Namespace URI: [`https://ogp.me/ns/profile#`](https://ogp.me/ns/profile)
|
||||
|
||||
- `profile:first_name` - [string](https://ogp.me/#string) - A name normally given to an individual by a parent or self-chosen.
|
||||
- `profile:last_name` - [string](https://ogp.me/#string) - A name inherited from a family or marriage and by which the individual is commonly known.
|
||||
- `profile:username` - [string](https://ogp.me/#string) - A short unique string to identify them.
|
||||
- `profile:gender` - [enum](https://ogp.me/#enum)(male, female) - Their gender.
|
||||
|
||||
[`website`](https://ogp.me/#type_website) - Namespace URI: [`https://ogp.me/ns/website#`](https://ogp.me/ns/website)
|
||||
|
||||
No additional properties other than the basic ones. Any non-marked up webpage should be treated as `og:type` website.
|
||||
|
||||
## Types
|
||||
The following types are used when defining attributes in Open Graph protocol.
|
||||
|
||||
| **Type** | **Description** | **Literals** |
|
||||
| -------- | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| Boolean | A Boolean represents a true or false value | true, false, 1, 0 |
|
||||
| DateTime | A DateTime represents a temporal value composed of a date (year, month, day) and an optional time component (hours, minutes) | ISO 8601 |
|
||||
| Enum | A type consisting of bounded set of constant string values (enumeration members). | A string value that is a member of the enumeration |
|
||||
| Float | A 64-bit signed floating point number | All literals that conform to the following formats: `1.234`, `-1.234`, `1.2e3`, `-1.2e3`, `7E-10` |
|
||||
| Integer | A 32-bit signed integer. | All literals that conform to the following formats: `1234`, `-123` |
|
||||
| String | A sequence of Unicode characters | All literals composed of Unicode characters with no escape characters |
|
||||
| URL | A sequence of Unicode characters that identify an Internet resource. | All valid URLs that utilize the `http://` or `https://` protocols |
|
Loading…
Reference in a new issue