在开放图谱协议允许任何网页成为社交图的丰富的对象。例如,它在Facebook上用于允许任何网页具有与Facebook上任何其他对象相同的功能。
- 原文来源:详情

尽管存在许多不同的技术和模式并且可以将它们组合在一起,但是没有一种技术可以提供足够的信息来丰富地表示社交图中的任何网页。Open Graph协议建立在这些现有技术的基础上,为开发人员提供了一件事。开发人员的简便性是Open Graph协议的主要目标,该协议已为许多技术设计决策提供了依据。
基本元数据
要将网页变成图形对象,您需要向页面添加基本元数据。我们已将协议的初始版本基于 RDFa,这意味着您将<meta>
在<head>
网页的中放置其他标签。每个页面的四个必需属性是:
og:title
-对象的标题,因为它应该出现在图形中,例如“ The Rock”。og:type
- 对象的类型,例如“ video.movie”。根据您指定的类型,可能还需要其他属性。og:image
-图片网址,应代表图表中的对象。og:url
-将在图形中用作其永久ID的对象的规范URL,例如“ http://www.imdb.com/title/tt0117500/”。
例如,以下是The Rock on IMDB的Open Graph协议标记:
<html prefix="og: http://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="http://www.imdb.com/title/tt0117500/" />
<meta property="og:image" content="http://ia.media-imdb.com/images/rock.jpg" />
...
</head>
...
</html>
可选元数据
以下属性对于任何对象都是可选的,通常建议使用:
og:audio
-伴随该对象的音频文件的URL。og:description
-对对象的一到两个句子描述。og:determiner
-句子中此对象标题之前出现的单词。(a,an,the,“”,auto)的枚举。如果auto
选择,则数据的使用者应在“ a”或“ an”之间选择。默认值为“”(空白)。og:locale
-标记这些标签的语言环境。格式为language_TERRITORY
。默认值为en_US
。og:locale:alternate
-可以使用此页面的一系列其他语言环境。og:site_name
-如果您的对象是大型网站的一部分,则应在整个网站上显示该名称。例如“ IMDb”。og:video
-补充此对象的视频文件的URL。
例如(仅用于显示目的的换行符):
<meta property="og:audio" content="http://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="http://example.com/bond/trailer.swf" />
RDF模式(在Turtle中)可以在ogp.me/ns中找到。
结构化属性
一些属性可以附加额外的元数据。使用property
和和 其他元数据相同的方式指定这些content
,但是property
将会有额外的符号:
。
该og:image
属性具有一些可选的结构化属性:
og:image:url
-与相同og:image
。og:image:secure_url
-如果网页需要HTTPS,则使用备用网址。og:image:type
- 此图像的MIME类型。og:image:width
-宽像素数。og:image:height
-高像素数。og:image:alt
-图片中内容的说明(非标题)。如果页面指定og:image,则应指定og:image:alt
。
完整图片示例:
<meta property="og:image" content="http://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" />
该og:video
标签具有相同的标签,展示的og:image
。这是一个例子:
<meta property="og:video" content="http://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" />
该og:audio
标签只可用(因为大小不会使声音的意义上)第3个属性:
<meta property="og:audio" content="http://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" />
数组
如果标签可以有多个值,只需<meta>
在页面上放置同一标签的多个版本 。在冲突期间,第一个标签(从上到下)被赋予优先级。
<meta property="og:image" content="http://example.com/rock.jpg" />
<meta property="og:image" content="http://example.com/rock2.jpg" />
在声明其根标记后放置结构化属性。每当解析另一个根元素时,就认为该结构化属性已完成并启动了另一个。
例如:
<meta property="og:image" content="http://example.com/rock.jpg" />
<meta property="og:image:width" content="300" />
<meta property="og:image:height" content="300" />
<meta property="og:image" content="http://example.com/rock2.jpg" />
<meta property="og:image" content="http://example.com/rock3.jpg" />
<meta property="og:image:height" content="1000" />
表示此页面上有3张图片,第一张图片为300x300
,中间一张图片的尺寸未指定,最后一张为1000
px高。
对象类型
为了在图形中表示对象,您需要指定其类型。使用og:type
属性完成此操作:
<meta property="og:type" content="website" />
当社区同意某种类型的模式时,会将其添加到全局类型列表中。类型系统中的所有其他对象均为 以下形式的CURIE:
<head prefix="my_namespace: http://example.com/ns#">
<meta property="og:type" content="my_namespace:my_type" />
全局类型分组为垂直。每个行业都有自己的名称空间。og:type
命名空间的值始终以该命名空间为前缀,然后带有句点。这是为了减少与用户定义的命名空间类型(总是包含冒号)之间的混淆。
音乐
- 命名空间URI:
http://ogp.me/ns/music#
og:type
值:
music:duration
- 整数 > = 1-歌曲的长度(以秒为单位)。music:album
- music.album 阵列 -专辑这首歌曲是从。music:album:disc
- 整数 > = 1-这首歌在专辑的哪张光盘上。music:album:track
- 整数 > = 1-这首歌是哪首歌。music:musician
- 个人资料 数组 -制作这首歌的音乐家。
music:song
- music.song -在这张专辑中的歌曲。music:song:disc
- 整数 > = 1-与之相同,music:album:disc
但取反。music:song:track
- 整数 > = 1-与之相同,music:album:track
但取反。music:musician
- 个人资料 -制作这首歌的音乐家。music:release_date
- 日期时间 -日期专辑发行。
music:song
-与music.album上的相同music:song:disc
music:song:track
music:creator
- 个人资料 -此播放列表的创建者。
music:creator
- 个人资料 -该电台的创建者。
视频
- 命名空间URI:
http://ogp.me/ns/video#
og:type
值:
video:actor
- 个人资料 数组 -电影中的演员。video:actor:role
- 字符串 -他们扮演的角色。video:director
- 个人资料 数组 -电影导演。video:writer
- 配置文件 数组 -电影的作家。video:duration
- 整数 > = 1-电影的长度,以秒为单位。video:release_date
- 日期时间 -日期电影被释放。video:tag
- 字符串 数组 -与此电影关联的标记词。
video:actor
-与video.movie相同video:actor:role
video:director
video:writer
video:duration
video:release_date
video:tag
video:series
- video.tv_show -哪些系列这一事件属于。
多集电视节目。元数据与video.movie相同。
不属于任何其他类别的视频。元数据与video.movie相同。
没有垂直
这些是全局定义的对象,它们不适合垂直使用,但却得到了广泛使用和认可。
og:type
值:
article
-命名空间URI: http://ogp.me/ns/article#
article:published_time
- 日期时间 -当文章首次发表。article:modified_time
- 日期时间 -当文章最后改变。article:expiration_time
- 日期时间 -当文章后过时。article:author
- 个人资料 数组 -文章作者。article:section
- 字符串 -高级部分名称。例如技术article:tag
- 字符串 数组 -与本文相关的标记词。
book
-命名空间URI: http://ogp.me/ns/book#
book:author
- 个人资料 数组 -谁撰写了这本书。book:isbn
- 字符串 -的ISBNbook:release_date
- 日期时间 -日期书被释放。book:tag
- 字符串 数组 -与这本书相关的标记词。
profile
-命名空间URI: http://ogp.me/ns/profile#
profile:first_name
- 字符串 -通常由父母或自己选择的名称。profile:last_name
- 字符串 -从家庭或婚姻继承而来的个人惯用的名字。profile:username
- 字符串 -标识它们的短而唯一的字符串。profile:gender
- 枚举(男,女)-他们的性别。
website
-命名空间URI: http://ogp.me/ns/website#
除了基本属性外,没有其他属性。任何未标记的网页均应视为og:type
网站。
种类
在“开放图谱”协议中定义属性时,使用以下类型。
类型 | 描述 | 文字 |
---|---|---|
布尔型 | 布尔值表示正确或错误的值 | 正确,错误,1、0 |
约会时间 | DateTime表示由日期(年,月,日)和可选的时间部分(小时,分钟)组成的时间值 | ISO 8601 |
枚举 | 由常量字符串值(枚举成员)的有界集合组成的类型。 | 作为枚举成员的字符串值 |
浮动 | 一个64位带符号浮点数 | 符合以下格式的所有文字: 1.234 -1.234 1.2e3 -1.2e3 7E-10 |
整数 | 一个32位有符号整数。在许多语言中,超过32位的整数会变成浮点数,因此我们限制了Open Graph协议,以便于使用多种语言。 | 符合以下格式的所有文字: 1234 -123 |
串 | Unicode字符序列 | 所有文字由Unicode字符组成,没有转义字符 |
网址 | 标识Internet资源的Unicode字符序列。 | 所有使用http://或https://协议的有效URL |
讨论与支持
您可以在Facebook组或 开发人员邮件列表中讨论开放图谱协议 。目前,它正在被Facebook(请参阅其文档),Google(请参阅其文档)和 mixi使用。它正在由IMDb,Microsoft,NHL,Posterous,烂番茄,TIME,Yelp等许多公司出版。
实作
开源社区已经开发了许多解析器和发布工具。让Facebook小组知道您是否也建立了一些很棒的东西!
- Facebook对象调试器 -Facebook的官方解析器和调试器
- Google Rich Snippets测试工具 -在特定行业和搜索引擎中支持开放图谱协议。
- PHP验证器和标记生成器-PHP5对象中的OGP 2011输入验证器和标记生成器
- PHP Consumer-一个小型库,用于访问PHP中的开放图谱协议数据
- PHP中的OpenGraphNode-PHP的简单解析器
- PyOpenGraph-用Python编写的库,用于从网站解析Open Graph协议信息
- OpenGraph Ruby-解析网页并提取Open Graph协议标记的Ruby Gem
- OpenGraph for Java-用于表示Open Graph协议的小型Java类
- RDF :: RDFa :: Parser-了解Open Graph协议的Perl RDFa解析器
- WordPress插件 -Facebook的官方WordPress插件,它将Open Graph元数据添加到WordPress支持的站点。
- 备用WordPress OGP插件 -一个简单的轻量级WordPress插件,可向WordPress支持的站点添加Open Graph元数据。
Open Graph协议最初是在Facebook上创建的,并受Dublin Core,链接相关规范,Microformats和RDFa的启发。本页描述的规范可在Open Web Foundation Agreement版本0.9下获得。这个网站是开源的。