はじめに
オープン・グラフ・プロトコル(Open Graph protocol:OGP)を用いると、任意のウェブ・ページをリッチなソーシャル・グラフのオブジェクトにすることができます。たとえば、Facebookでは、任意のウェブ・ページがFacebookの他のオブジェクトと同じ機能を持てるようにするためにこれを用います。
さまざまな技術やスキーマが存在しており、それらを組み合わせることもできますが、ソーシャル・グラフ内で任意のウェブ・ページを豊かに表現するのに十分な情報を提供してくれる単一の技術は存在しません。オープン・グラフ・プロトコルは、これらの既存の技術をベースにしており、実装を行うための1つの機能を開発者に提供します。開発者にとって容易であることは、オープン・グラフ・プロトコルの重要な目標であり、技術設計上の決定の多くを伝えています。
基本的なメタデータ
ウェブ・ページをグラフ・オブジェクトにするためには、ページに基本的なメタデータを追加する必要があります。我々はRDFaの初期バージョンのプロトコルをベースとしました。これは、自身のウェブ・ページの<head>
に<meta>
タグを追加することを意味します。各ページに対する4つの必須のプロパティーは次のとおりです。
og:title
- グラフ内に表示すべきオブジェクトのタイトル。例えば「The Rock」og:type
- オブジェクトのタイプ。例えば「video.movie」。指定するタイプによっては、別のプロパティーが必要な場合もある。og:image
- グラフ内にオブジェクトを表示すべき画像のURLog:url
- グラフの永続的なIDとして用いられるオブジェクトの基準URL。例えば「http://www.imdb.com/title/tt0117500」
例えば、IMDBのThe Rockに対するオープン・グラフ・プロトコルのマークアップは次のとおりです。
<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
- そのオブジェクトに付随する音声ファイルに対するURLog:description
- オブジェクトに関する1~2文の説明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を要求する場合に用いる代替URLog: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" />
グローバルなタイプは分野(vertical)にグループ分けされています。各分野は独自の名前空間を持ちます。名前空間に対する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
- 文字列型 - 上位のセクション名。例えば、Technologyarticle: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
- 列挙型 (male、female) - 彼らの性別
website
- 名前空間URI: http://ogp.me/ns/website#
基本的なプロパティー以外にはプロパティーはありません。マークアップされていないウェブ・ページは、og:type
websiteとして扱われるべきです。
型
オープン・グラフ・プロトコルで属性を定義する場合は、次の型が用いられます。
型 | 説明 | リテラル |
---|---|---|
ブール型 (Boolean) | ブールは真か偽の値を表す。 | true、false、1、0 |
日時型 (DateTime) | DateTimeは、日付(年、月、日)とオプションの時間要素(時間、分)で構成される時間的な値を表す。 | ISO 8601 |
列挙型 (Enum) | 固定の文字列値の有界集合(列挙メンバー)で構成される型 | 列挙のメンバーである文字列の値 |
浮動小数点型 (Float) | 64ビットの符号付き浮動小数点数 | 次の形式に準拠するすべてのリテラル 1.234 -1.234 1.2e3 -1.2e3 7E-10 |
整数型 (Integer) | 32ビットの符号付き整数。多くの言語では32ビットを超える整数は浮動小数点になるため、容易な多言語の利用のためにオープン・グラフ・プロトコルを制限している。 | 次の形式に準拠するすべてのリテラル 1234 -123 |
文字列型 (String) | Unicodeの文字列 | エスケープ文字のないUnicode文字で構成されるすべてのリテラル |
URL | インターネット資源を識別するUnicodeの文字列 | http://またはhttps://のプロトコルを利用するすべての有効なURL |
議論とサポート
オープン・グラフ・プロトコルについては、Facebookグループまたは開発者メーリングリストで議論できます。現在、Facebook(ドキュメントを参照)、Google(ドキュメントを参照)、mixiで利用されています。これは、IMDb、Microsoft、NHL、Posterous、Rotten Tomatoes、TIME、Yelp、その他の多くによって発表されています。
実装
オープン・ソース・コミュニティは、いくつかのパーサや公開用ツールを開発しています。あなたが素晴らしいツールを作成したら、Facebookグループに知らせてください!
- Facebook Object Debugger - Facebookの公式パーサとデバッガ
- Google Rich Snippets Testing Tool - 特定の分野と検索エンジンにおけるオープン・グラフ・プロトコルのサポート
- PHP Validator and Markup Generator - PHP5オブジェクトのOGP 2011入力検証システムとマークアップ作成システム
- PHP Consumer - PHPでオープン・グラフ・プロトコルのデータにアクセスするための小さなライブラリ
- OpenGraphNode in PHP - PHP用のシンプルなパーサ
- PyOpenGraph - ウェブサイトのオープン・グラフ・プロトコル情報を解析するためのPythonで記述されたライブラリ
- OpenGraph Ruby - ウェブ・ページを解析し、オープン・グラフ・プロトコルのマークアップを抽出するRubyのGem
- OpenGraph for Java - オープン・グラフ・プロトコルを表すために用いられる小さなJavaのクラス
- RDF::RDFa::Parser - オープン・グラフ・プロトコルを理解するPerlのRDFaパーサ
- WordPress plugin - Facebookの公式WordPressプラグインで、WordPressで動作するサイトにオープン・グラフのメタデータを追加する。
- Alternate WordPress OGP plugin - WordPressで動作するサイトにオープン・グラフのメタデータを追加するシンプルな軽いWordPressプラグイン