Syncerのロゴ

oEmbed APIでwebサービスを作りたい全ての人に向けて書きました。

URLから簡単に埋め込み用コードを取得できるoEmbedについて、初心者の人でもなるべく分かるように紹介します。「oEmbedって何?」って思ってる人は流し見してみて下さい。

oEmbed oEmbed

目次

  1. oEmbedとは?
  2. oEmbedの便利さ
  3. oEmbedの使い方(5件)
    1. リクエスト方法
    2. オプションパラメータ
    3. 取得するサンプル
    4. JSONデータ
    5. 埋め込みコンテンツの出力
  4. サンプルの関数ライブラリ(PHP)
  5. oEmbedを採用しているサービスまとめ(10件)
    1. IFTTT
    2. Youtube
    3. Flickr
    4. Vimeo
    5. SlideShare
    6. App.net
    7. Instagram
    8. SoundCloud
    9. Twitter
    10. はてなブログ
  6. oEmbedの関連リンク集(2件)
    1. 最新情報
    2. 言語別のライブラリ

oEmbedとは?

oEmbedとは、埋め込み用コードを取得するためのシステム、統一規格です。TwitterやYoutube、Vimeoなどといった世界的に有名なwebサービスの各々がこのoEmbedの規格を採用しています。

統一規格があることで、web開発者はoEmbedの仕様だけを知っておけば、「個別に各サービスの仕様を調べる」といった学習コストをかけることなく、様々なサービスの埋め込み用コンテンツを利用することができるわけです。

2014年9月には日本で人気のブログサービスはてなブログが、このoEmbedの規格を採用して、ブログ記事の埋め込み用コードを取得するAPIを公開しました。採用するサービスが増えれば増えるほど、web開発者にとって好ましい環境が整っていくというわけですね。

oEmbedの便利さ

具体的な取得方法は後述します。oEmbedの魅力は「パーマリンクURLを指定することで、そのURLに応じた埋め込み用コードを取得できる」という、そのシンプルさにあります。

例えば、Instagramで下記パーマリンクの写真があります。

http://instagram.com/p/qxwxswstbL/[LINK]

この写真を埋め込むためのコードは下記の通りです。

<iframe src="//instagram.com/p/qxwxswstbL/embed/" width="612" height="710" frameborder="0" scrolling="no" allowtransparency="true"></iframe>

oEmbedを知らない時は、パーマリンクURLの文字列をわざわざ分解して赤文字部分を取り出し、埋め込み用コードを組み立てるといった非常に回りくどいことをしていた私…。webサービスによっては、URL文字列の材料だけじゃ埋め込み用コードを組み立てられないものもあって「さぁどうしよう…」という状態だったんです。

が、oEmbedなら、単純にパーマリンクURLを指定してリクエストするだけで、完成した埋め込み用コードを取得することができます。「コンテンツのパーマリンクから埋め込み用コードを取得できる」。地味だけど、これって、とーーーっても便利なんです…。

…その後、この記事を書く過程で調べていたら、InstagramはどうやらoEmbedで埋め込み用コードを吐かない様子…。ということでInstagramに関してはパーマリンクから埋め込み用コードを組み立てましょう…。

oEmbedの使い方

この章では、具体的にoEmbedを利用して埋め込み用コードを取得する方法を紹介します。

リクエスト方法

oEmbedの使い方は極めて簡単で、各サービスが指定するエンドポイントURLに、パラメータのurlを付けてリクエストするだけ。urlの値には、埋め込みたいコンテンツのパーマリンクを指定します。

{エンドポイント}?url={埋め込み用コードの対象となるパーマリンク}

オプションパラメータ

指定できる基本的なオプションパラメータは下記の通りです。利用するのはurlformatくらいでしょう。各サービスにより、パラメータの対応状況は異なるので、詳しくは各サービスの案内をご確認下さい。

項目説明
url [必須] 埋め込みたいコンテンツのパーマリンクURL。
maxwidth 埋め込み用コンテンツの幅の最大値を指定。
maxheight 埋め込み用コンテンツの高さの最大値を指定。
format 返却データのフォーマットをjsonxmlなどで指定。

取得するサンプル

それでは試しに、はてなブログの記事を埋め込んでみましょう。はてなブログが指定するoEmbedのエンドポイントは下記の通りです。

http://hatenablog.com/oembed

埋め込むのは、私がかねてからのファンであるはてブマンボクがはてブマンになった理由という記事です。記事のパーマリンクは下記の通り。

http://hatebuman.hatenablog.com/entry/2013/11/30/161605[LINK]

それでは早速、JSONデータを取得してみましょう。サンプルに使用する言語はPHPです。

<?php
	//エンドポイントのURL
	$endpoint = 'http://hatenablog.com/oembed';

	//記事のURL
	$permalink = 'http://hatebuman.hatenablog.com/entry/2013/11/30/161605';

	//リクエスト(パラメータの値はURLエンコードする)
	$json = @file_get_contents($endpoint.'?url='.rawurlencode($permalink).'&format=json');

	//JSONを出力
	echo $json;

JSONデータ

oEmbedで取得できるJSONデータは、基本的に下記の通りです。コンテンツ周りの重要な情報を取得できるので、必要に応じて活用することができますねー。この内、htmlに格納されているのが、そのまま利用できる埋め込みコードです。

{
    "author_name": "hatebuman",コンテンツ著作者の名前
    "width": "100%",コンテンツの幅
    "author_url": "http://blog.hatena.ne.jp/hatebuman/",コンテンツ著作者のプロフィールページなど
    "provider_url": "http://hatenablog.com",コンテンツ提供元のURL
    "version": "1.0",oEmbedのバージョン(2014年9月現在は1.0のみ)
    "provider_name": "Hatena Blog",コンテンツ提供元の名前
    "height": "190",コンテンツの高さ
    "html": "<iframe src=\"http://hatebuman.hatenablog.com/embed/2013/11/30/161605\" title=\"ボクがはてブマンになった理由 - はてブマンだブク\" scrolling=\"no\" frameborder=\"0\" style=\"width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"><a href=\"http://hatebuman.hatenablog.com/entry/2013/11/30/161605\">ボクがはてブマンになった理由 - はてブマンだブク</a></iframe>",コンテンツの埋め込み用コード
    "url": "http://hatebuman.hatenablog.com/entry/2013/11/30/161605",コンテンツのパーマリンク
    "title": "ボクがはてブマンになった理由",コンテンツのタイトル
    "type": "rich"埋め込みコンテンツの種類
}

埋め込みコンテンツの出力

htmlの値をそのまま出力してみました。うーん、楽チンですな…。便利さに感動。このように、パーマリンクを、埋め込み用コンテンツに繋げることができるのがoEmbedというわけですねー。

サンプルの関数ライブラリ(PHP)

oEmbedを利用して埋め込み用コードを取得するサンプルプログラムを紹介します。カスタマイズの下地となるよう、シンプルにしてあるので、よろしかったら使ってやって下さい。

<?php
//パラメータを用意
$params = array(
	'endpoint' => 'http://hatenablog.com/oembed',
	'params' => array(
		'url' => 'http://hatebuman.hatenablog.com/entry/2013/11/30/161605',
		'format' => 'json',
	),
);

//関数ライブラリを利用してJSONデータを取得する
$data = scr_oembed($params);

//第1要素には取得したJSONデータが格納される
$json = $data[0];

//第2要素にはレスポンスヘッダーが格納される
$response = $data[1];

//JSONをオブジェクト型に変換
$obj = json_decode($json);

//埋め込み用HTMLを出力
echo $obj->html;

//関数ライブラリ [scr_oembed]
// 引数は連想配列で指定
// endpoint: エンドポイントを文字列(string)で指定
// params: パラメータを連想配列(array)で指定
function scr_oembed($item){
	//パラメータを整形
	$params = http_build_query($item['params'],'','&');

	//リクエストを送ってJSONを取得
	$json = @file_get_contents($item['endpoint'].'?'.$params);

	//第1要素にJSON、第2要素にレスポンスヘッダーを付けて返却
	return array( $json , $http_response_header );
}

oEmbedを採用しているサービスまとめ

この章では、oEmbedを採用しているサービスの中から日本でも有名なものを紹介していきます。

Implementations oEmbed
ここで紹介する以外にも確認したい場合は、oEmbedの公式サイトをご覧下さい。

IFTTT

oEmbedを利用してIFTTTの埋め込み用コードを取得する方法です。公式リファレンスがなかったため、oEmbedの公式サイトに載っていた情報を元にしています。

リクエスト方法

項目内容
エンドポイント http://www.ifttt.com/oembed/
パーマリンク http://ifttt.com/recipes/... [Sample]

JSONデータ

{
    "type": "rich",
    "version": "1.0",
    "html": "<a href=\"https://ifttt.com/view_embed_recipe/190824-auto-photo-bookof-locationthumbnail-ver\" target = \"_blank\" class=\"embed_recipe embed_recipe-l_39\" id= \"embed_recipe-190824\"><img src= 'https://ifttt.com/recipe_embed_img/190824' alt=\"IFTTT Recipe: Auto Photo Bookof LocationThumbnail ver connects instagram to evernote\" width=\"370px\" style=\"max-width:100%\"/></a><script async type=\"text/javascript\" src= \"//ifttt.com/assets/embed_recipe.js\"></script>",
    "width": 640,
    "height": 90,
    "title": "Auto Photo Bookof LocationThumbnail ver",
    "author_name": "syncer",
    "author_url": "https://ifttt.com/people/syncer",
    "provider_name": "IFTTT",
    "provider_url": "https://ifttt.com",
    "description": "Notes: 好きな場所を指定して下さい。\r\nそこで撮影された写真がEvernoteに保存されていきます。\r\n\r\nPlease specify the location.\r\nPhotos taken are saved in Evernote.\r\nYou can sea thumbnail image on note list.\r\n\r\n使い方 (How to use)\r\nhttp://syncer.jp/evernote-ifttt-auto-photobook"
}

埋め込みサンプル

IFTTT Recipe: Auto Photo Bookof LocationThumbnail ver connects instagram to evernote

Youtube

YoutubeもoEmbedに対応していて、動画の埋め込みコードの他、サムネイル画像も取得することができます。公式ブログのエントリーに、公式リファレンスが掲載されています。

oEmbed support Youtube API Blog

リクエスト方法

項目内容
エンドポイント http://www.youtube.com/oembed
パーマリンク https://www.youtube.com/watch?v=... [Sample]

JSONデータ

{
    "author_url": "http://www.youtube.com/user/nanblomovie",
    "provider_name": "YouTube",
    "thumbnail_height": 360,
    "html": "<iframe width=\"480\" height=\"270\" src=\"http://www.youtube.com/embed/dJCmnrIubCQ?feature=oembed\" frameborder=\"0\" allowfullscreen></iframe>",
    "height": 270,
    "title": "食べ方がいちいち癒されるヤギ",
    "thumbnail_width": 480,
    "version": "1.0",
    "type": "video",
    "width": 480,
    "provider_url": "http://www.youtube.com/",
    "author_name": "Yuta Arai",
    "thumbnail_url": "http://i.ytimg.com/vi/dJCmnrIubCQ/hqdefault.jpg"
}

埋め込みサンプル

サムネイル画像サンプル

oEmbedで取得したサムネイル画像
oEmbedで取得したサムネイル画像

Flickr

Flickrの埋め込みコードをoEmbedで取得する方法です。公式リファレンスはありませんでした。flickr、oEmbedとかで検索すると写真ページがヒットしてまう…。

リクエスト方法

パーマリンクを通常版と短縮版、どちらでも指定することができます。返却されるデータに違いはありません。

項目内容
エンドポイント http://www.flickr.com/services/oembed/
パーマリンク https://www.flickr.com/photos/... [Sample]
パーマリンク(短縮) https://flic.kr/p/... [Sample]

JSONデータ

Flickrの場合、埋め込み用コードを取得することはできません。urlthumbnail_urlなど、画像ファイルへのURLを元に自分で組み立てて下さい。

{
    "type": "photo",
    "title": "鳥取県旅行-20",
    "author_name": "Yuta Arai 0206",
    "author_url": "https://www.flickr.com/photos/yuta_arai_0206/",
    "width": "1024",
    "height": "768",
    "url": "https://farm9.staticflickr.com/8448/8008087593_cfe0a3a294_b.jpg",
    "web_page": "https://www.flickr.com/photos/yuta_arai_0206/8008087593/",
    "thumbnail_url": "https://farm9.staticflickr.com/8448/8008087593_cfe0a3a294_s.jpg",
    "thumbnail_width": 75,
    "thumbnail_height": 75,
    "web_page_short_url": "https://flic.kr/p/dcDxrK",
    "license": "All Rights Reserved",
    "license_id": 0,
    "version": "1.0",
    "cache_age": 3600,
    "provider_name": "Flickr",
    "provider_url": "https://www.flickr.com/"
}

画像サンプル

oEmbedを通して取得したJSONデータから、画像を出力したものです。

通常サイズ(1024x768)
通常サイズ(1024x768)
サムネイルサイズ (75x75)
サムネイルサイズ (75x75)

Vimeo

oEmbedを利用してVimeoの動画を埋め込む方法です。公式リファレンスは下記をご参考下さい。

oEmbed Vimeo developer

リクエスト方法

Vimeoはビデオのパーマリンクが経路ごとに3種類存在します。これら全てをurlの値として指定することが可能です。取得できるデータに差異はありません。

項目内容
エンドポイント http://vimeo.com/api/oembed.format
赤文字部分には、jsonまたはxmlを指定できる。
パーマリンク https://vimeo.com/... [Sample]
パーマリンク(チャンネル) https://vimeo.com/channels/... [Sample]
パーマリンク(グループ) https://vimeo.com/groups/... [Sample]

パラメータ

VimeoはoEmbedに力を入れているようで、指定できるオプションパラメータが豊富です。下記に表にしてみました。

パラメータ説明
url [必須] コンテンツのパーマリンク。
width ビデオの幅を指定。
maxwidth ビデオの最大幅を指定。
height ビデオの高さを指定。
maxheight ビデオの最大高さを指定。
byline ビデオの署名を表示する。デフォルトではtrue
title ビデオのタイトルを表示する。デフォルトではtrue
portrait 投稿者のプロフィールアイコンを表示する。デフォルトではtrue
color ビデオコントロールの色を指定する。
callback JSONで値を取得する時、この関数でラップする。
autoplay trueを指定すると、埋め込みコンテンツが自動再生する。デフォルトではfalse
loop trueを指定すると、埋め込みコンテンツがループ再生になる。デフォルトではfalse
autopause trueを指定すると、別の埋め込みコンテンツを再生時に自動で一時停止する。デフォルトではtrue
xhtml 埋め込みコードをXHTMLに対応する。デフォルトではfalse
api trueを指定するとJavascriptで利用することができる。デフォルトではfalse
player_id Javascriptで取得する際、プレーヤーのためにユニークなIDを返す。デフォルトではfalse

JSONデータ

{
    "type": "video",
    "version": "1.0",
    "provider_name": "Vimeo",
    "provider_url": "https://vimeo.com/",
    "title": "Japanese Sumo!",
    "author_name": "Yuta Arai",
    "author_url": "http://vimeo.com/arayutw",
    "is_plus": "0",
    "html": "<iframe src=\"//player.vimeo.com/video/87344826\" width=\"1280\" height=\"720\" frameborder=\"0\" title=\"Japanese Sumo!\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>",
    "width": 1280,
    "height": 720,
    "duration": 40,
    "description": "at Fuji Safari Park.",
    "thumbnail_url": "http://i.vimeocdn.com/video/465371059_1280.jpg",
    "thumbnail_width": 1280,
    "thumbnail_height": 720,
    "video_id": 87344826,
    "uri": "/videos/87344826"
}

埋め込みサンプル

SlideShare

oEmbedを利用してSlideShareのスライドを埋め込む方法です。公式リファレンスは下記をご参考下さい。

oEmbed Documentation SlideShare API

リクエスト方法

私はSlideShareを利用したことがないため、サンプルのスライドには、私が好きなwebサービスpplogのものを利用させていただきました。

項目内容
エンドポイント http://www.slideshare.net/api/oembed/2
パーマリンク http://www.slideshare.net/... [Sample]

JSONデータ

{
    "title": "YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworks",
    "thumbnail_width": 170,
    "html": "<iframe src=\"http://www.slideshare.net/slideshow/embed_code/38446121\" width=\"427\" height=\"356\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> </iframe> <div style=\"margin-bottom:5px\"> <strong> <a href=\"https://www.slideshare.net/naotokoshikawa/yapcasia2014pplog\" title=\"YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworks\" target=\"_blank\">YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworks</a> </strong> from <strong><a href=\"http://www.slideshare.net/naotokoshikawa\" target=\"_blank\">Naoto Koshikawa</a></strong> </div>\n\n",
    "total_slides": 27,
    "provider_name": "SlideShare",
    "thumbnail_height": 128,
    "version_no": "1409221372",
    "provider_url": "http://www.slideshare.net",
    "width": 425,
    "height": 355,
    "version": "1.0",
    "conversion_version": 2,
    "slideshow_id": 38446121,
    "slide_image_baseurl_suffix": "-1024.jpg",
    "thumbnail": "//cdn.slidesharecdn.com/ss_thumbnails/yapcasia2014pplog-140828052148-phpapp01-thumbnail.jpg?cb=1409221372",
    "author_url": "http://www.slideshare.net/naotokoshikawa",
    "slide_image_baseurl": "//image.slidesharecdn.com/yapcasia2014pplog-140828052148-phpapp01/95/slide-",
    "type": "rich",
    "author_name": "Naoto Koshikawa"
}

埋め込みサンプル

SlideShareの埋め込みコードは、webサイトごとのスタイルシートの影響を受ける様子。strongのタグが使われるというのも、ちょっと気になっちゃいますな…。

App.net

oEmbedを利用してApp.netのコメントや写真を埋め込む方法です。公式リファレンスは下記をご参考下さい。

oEmbed App.net API Reference

リクエスト方法

写真のパーマリンクは、投稿本文に表示されているURLを利用します。このURLにアクセスすると別のURLにリダイレクトされてしまいます。

項目内容
エンドポイント https://api.app.net/oembed
パーマリンク(コメント) https://alpha.app.net/... [Sample]
パーマリンク(写真) https://photos.app.net/.../... [Sample]

JSONデータ(コメント)

{
    "provider_url": "https://app.net",
    "version": "1.0",
    "author_url": "https://alpha.app.net/arayu",
    "title": "愛犬の写真です。 https://photos.app.net/22918724/1",
    "url": "https://alpha.app.net/arayu/post/22918724",
    "provider_name": "App.net",
    "type": "link",
    "html": "<div><div data-post-body=\"\"><span itemscope=\"https://join.app.net/schemas/Post\">#24859;&#29356;&#12398;&#20889;&#30495;&#12391;&#12377;&#12290; <a href=\"https://photos.app.net/22918724/1\" target=\"_blank\" rel=\"nofollow\">https://photos.app.net/22918724/1</a></span></div><div data-post-annotations=\"\"><div data-oembed-type=\"photo\" data-annotation=\"net.app.core.oembed\"><p>image.jpg</p><p><a href=\"https://files.app.net/1/764248/aH5BfcGr4OBKej6BON4fU4vypRqh6SFkWqR2ReQxYcBn9A4x65cXnR8pOx0vkt9qWK-Ub9DbdDfjVIzgJP-ZrTKLrsu_IbuqyLZhO_hoxBLxblBmLNSuWB0xBQzK37E-QV4fNiHq77RX6v4Hldp8HbW6V5x5PQ927VcYqdrMWkC-1wiPFgFbSGkKjom0AEVMo\"><img width=\"200\" src=\"https://files.app.net/1/764248/aH5BfcGr4OBKej6BON4fU4vypRqh6SFkWqR2ReQxYcBn9A4x65cXnR8pOx0vkt9qWK-Ub9DbdDfjVIzgJP-ZrTKLrsu_IbuqyLZhO_hoxBLxblBmLNSuWB0xBQzK37E-QV4fNiHq77RX6v4Hldp8HbW6V5x5PQ927VcYqdrMWkC-1wiPFgFbSGkKjom0AEVMo/image_thumb_200s\" height=\"200\"></a></p><p>by <a href=\"https://alpha.app.net/arayu\">@arayu</a> via <a href=\"https://app.net\">App.net</a></p></div></div></div>",
    "author_name": "arayu"
}

JSONデータ(写真)

App.netでは添付画像のURLを指定することで、その画像に関するかなり詳細なデータを取得することができます。

{
    "provider_url": "https://app.net",
    "thumbnail_large_url_immediate_expires": "2014-09-03T20:00:00Z",
    "embeddable_url": "https://photos.app.net/22918724/1",
    "author_name": "@arayu",
    "height": 1024,
    "thumbnail_large_width": 640,
    "thumbnail_large_url_immediate": "https://d36tc8clsz1tk5.cloudfront.net/adn-uf-01/UK/Ae/8R/UKAe8RjydS0zfiKoLOe8RCpgPRqhZ-qlSirqlMVSczc?response-cache-control=public%2C%20max-age%3D7200%2C%20s-maxage%3D172800&response-content-disposition=inline%3B%20filename%2A%3DUTF-8%27%27image_image_thumb_960r.jpg&Expires=1409774400&Signature=mmha9zrODykDLKMQFJZ2Zr0iNQmoFK8OKXcjHgmpMZGuZ7OPnJbNJwynMlXbxJEoRo-bE8Ybufr3YzV1j2cU2HMVlD~eryKk9fhrapcR8xmjcYM-CtJjOCJ0D3Vzv5oczTgNAb6sWZA~aUV8q9DDbkhAxfaolLXGxzJuUzgWp5A_&Key-Pair-Id=APKAIWNGPWT6YVKFBWJA",
    "thumbnail_url": "https://files.app.net/1/764248/aLI6pwbELGYh84sb4zVrBFsxP-uIxjp-o83tbFCtFfrdoSnBIYNxRdoTiG03-bxHPhwf5k4yE7uQn-GGbTFao9WmSZq9iuhcFpXNdZFOmz5-I5r8HvicWCMvyFDdKrhjcVNGjcmZd1yrJOfa5ZtfNOoCQ0VmoQMlCD0IBrYW2IOi-y2GWhcwJuWmY4kYDp99e/image_thumb_200s",
    "file_id": "764248",
    "url_secure": null,
    "file_token_read": "aLI6pwbELGYh84sb4zVrBFsxP-uIxjp-o83tbFCtFfrdoSnBIYNxRdoTiG03-bxHPhwf5k4yE7uQn-GGbTFao9WmSZq9iuhcFpXNdZFOmz5-I5r8HvicWCMvyFDdKrhjcVNGjcmZd1yrJOfa5ZtfNOoCQ0VmoQMlCD0IBrYW2IOi-y2GWhcwJuWmY4kYDp99e",
    "thumbnail_height": 200,
    "thumbnail_url_immediate_expires": "2014-09-03T20:00:00Z",
    "thumbnail_large_height": 640,
    "url_immediate": "https://d36tc8clsz1tk5.cloudfront.net/adn-uf-01/KR/qm/5D/KRqm5DwDTw26ZiKakdax9SpgPRqhZ-qlSirqlMVSczc?response-cache-control=public%2C%20max-age%3D7200%2C%20s-maxage%3D172800&response-content-disposition=inline%3B%20filename%2A%3DUTF-8%27%27image.jpg&Expires=1409774400&Signature=Xa6K7gmhDOQrE5~2QmR~o2hj89nAQ6cTT64S29YAyGvaLWBAoq0JGKL34jXgNlUSINkD3brf9Zxzljg4N-g13rxUjmAwiQuJBFm~m8YVoeNYSG1YdYar1dsqi~u-Mp6I8-frA1lSAxBlFlS7qo~MrFv3BqFdCzcPMKDUeDbuDTU_&Key-Pair-Id=APKAIWNGPWT6YVKFBWJA",
    "thumbnail_url_secure": null,
    "title": "image.jpg",
    "url": "https://files.app.net/1/764248/aLI6pwbELGYh84sb4zVrBFsxP-uIxjp-o83tbFCtFfrdoSnBIYNxRdoTiG03-bxHPhwf5k4yE7uQn-GGbTFao9WmSZq9iuhcFpXNdZFOmz5-I5r8HvicWCMvyFDdKrhjcVNGjcmZd1yrJOfa5ZtfNOoCQ0VmoQMlCD0IBrYW2IOi-y2GWhcwJuWmY4kYDp99e",
    "thumbnail_large_url": "https://files.app.net/1/764248/aLI6pwbELGYh84sb4zVrBFsxP-uIxjp-o83tbFCtFfrdoSnBIYNxRdoTiG03-bxHPhwf5k4yE7uQn-GGbTFao9WmSZq9iuhcFpXNdZFOmz5-I5r8HvicWCMvyFDdKrhjcVNGjcmZd1yrJOfa5ZtfNOoCQ0VmoQMlCD0IBrYW2IOi-y2GWhcwJuWmY4kYDp99e/image_thumb_960r",
    "url_immediate_expires": "2014-09-03T20:00:00Z",
    "thumbnail_width": 200,
    "width": 1024,
    "version": "1.0",
    "author_url": "https://alpha.app.net/arayu",
    "provider_name": "App.net",
    "type": "photo",
    "html": "<div><div data-post-body=\"\"><span itemscope=\"https://join.app.net/schemas/Post\">&#24859;&#29356;&#12398;&#20889;&#30495;&#12391;&#12377;&#12290; <a href=\"https://photos.app.net/22918724/1\" target=\"_blank\" rel=\"nofollow\">https://photos.app.net/22918724/1</a></span></div><div data-post-annotations=\"\"><div data-oembed-type=\"photo\" data-annotation=\"net.app.core.oembed\"><p>image.jpg</p><p><a href=\"https://files.app.net/1/764248/aLI6pwbELGYh84sb4zVrBFsxP-uIxjp-o83tbFCtFfrdoSnBIYNxRdoTiG03-bxHPhwf5k4yE7uQn-GGbTFao9WmSZq9iuhcFpXNdZFOmz5-I5r8HvicWCMvyFDdKrhjcVNGjcmZd1yrJOfa5ZtfNOoCQ0VmoQMlCD0IBrYW2IOi-y2GWhcwJuWmY4kYDp99e\"><img width=\"200\" src=\"https://files.app.net/1/764248/aLI6pwbELGYh84sb4zVrBFsxP-uIxjp-o83tbFCtFfrdoSnBIYNxRdoTiG03-bxHPhwf5k4yE7uQn-GGbTFao9WmSZq9iuhcFpXNdZFOmz5-I5r8HvicWCMvyFDdKrhjcVNGjcmZd1yrJOfa5ZtfNOoCQ0VmoQMlCD0IBrYW2IOi-y2GWhcwJuWmY4kYDp99e/image_thumb_200s\" height=\"200\"></a></p><p>by <a href=\"https://alpha.app.net/arayu\">@arayu</a> via <a href=\"https://app.net\">App.net</a></p></div></div></div>",
    "thumbnail_url_immediate": "https://d36tc8clsz1tk5.cloudfront.net/adn-uf-01/yJ/5E/Eu/yJ5EEuqYVQT9qXs_p3-wUipgPRqhZ-qlSirqlMVSczc?response-cache-control=public%2C%20max-age%3D7200%2C%20s-maxage%3D172800&response-content-disposition=inline%3B%20filename%2A%3DUTF-8%27%27image_image_thumb_200s.jpg&Expires=1409774400&Signature=W-kjehuZ6EII~6XR8XHiVArs9eZ6cMF-ia5axXIjrDJglxEZQlbMR3dnBiWovsnP7GUuwF~TzazagpxBeS53P~mFQmtT76~3ypPr1ddaDD7Vn5dXwno3uLeQ~w-BcnB5tDgxDj~~ge1WMMc7u4Ki4mXP6DVRWiuZYjGReP0kgg0_&Key-Pair-Id=APKAIWNGPWT6YVKFBWJA"
}

埋め込みサンプル

埋め込みコンテンツに関しては、コメント、写真、いずれのパーマリンクを指定しても同じ内容のものが出力されます。

愛犬の写真です。 https://photos.app.net/22918724/1

image.jpg

by @arayu via App.net

Instagram

oEmbedを利用してInstagramの写真、動画を埋め込む方法です。公式リファレンスは下記をご参考下さい。

Embedding Endpoints Instagram Developers

リクエスト方法

項目内容
エンドポイント http://api.instagram.com/oembed
パーマリンク http://instagr.am/p/.../ [Sample]
パーマリンク(短縮) http://instagr.am/p/.../ [Sample]

JSONデータ

うーむ、Instagramの場合、埋め込み用のHTMLコードがJSONデータに含まれないようです。このJSONデータの材料から埋め込みコードを作成することはできません。oEmbedとは…。その代わり、画像ファイルの生URLなどを取得することができるのは便利ですね。

{
    "provider_url": "http://instagram.com/",
    "media_id": "792026015776036142_295878252",
    "title": "竹の塚霊園にある、おきあがり観音です。",
    "url": "http://photos-f.ak.instagram.com/hphotos-ak-xfa1/10597292_910228762338853_1220151813_n.jpg",
    "author_name": "arayutw",
    "height": 640,
    "width": 640,
    "version": "1.0",
    "author_url": "http://instagram.com/arayutw",
    "author_id": 295878252,
    "type": "photo",
    "provider_name": "Instagram"
}

ということで、埋め込む場合は、oEmbedに指定するパーマリンクの後尾に、embed/を付けましょう…。これが埋め込み用のURLとなります。

http://instagr.am/p/r913cLMtUu/embed/

埋め込みサンプル

SoundCloud

oEmbedを利用してSoundCloudの音楽を埋め込む方法です。公式リファレンスは下記をご参考下さい。

oEmbed SoundCloud Developers

リクエスト方法

項目内容
エンドポイント http://soundcloud.com/oembed
パーマリンク https://soundcloud.com/.../... [Sample]

JSONデータ

{
    "version": 1,
    "type": "rich",
    "provider_name": "SoundCloud",
    "provider_url": "http://soundcloud.com",
    "height": 400,
    "width": "100%",
    "title": "Flickermood by Forss",
    "description": "From the Soulhack album,&nbsp;recently featured in this ad <a href=\"https://www.dswshoes.com/tv_commercial.jsp?m=october2007\">https://www.dswshoes.com/tv_commercial.jsp?m=october2007</a> ",
    "thumbnail_url": "http://i1.sndcdn.com/artworks-000067273316-smsiqx-t500x500.jpg?e76cf77",
    "html": "<iframe width=\"100%\" height=\"400\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?visual=true&url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F293&show_artwork=true\"></iframe>",
    "author_name": "Forss",
    "author_url": "http://soundcloud.com/forss"
}

埋め込みサンプル

Twitter

oEmbedを利用してTwitterのつぶやきを埋め込む方法です。個人的に、Twitterが提供するAPIの中で認証が必要ないものとして印象的。公式リファレンスは下記をご参考下さい。

GET statuses/oembed Twitter Developers

リクエスト方法

項目内容
エンドポイント https://api.twitter.com/1/statuses/oembed.json
パーマリンク https://twitter.com/.../status/... [Sample]

パラメータ

Twitterもオプションパラメータが豊富です。パーマリンク、または投稿IDでコンテンツを指定することができます。

パラメータ説明
id [どちらか必須] 投稿IDを指定。
url [どちらか必須] 投稿パーマリンクを指定。
maxwidth コンテンツの最大幅を指定。250550の間で指定可。
hide_media 添付画像を非表示にするか。デフォルトはfalse
hide_thread リプライの場合、返信先のツイートを表示するか。デフォルトはfalse
omit_script 埋め込み用コードにscriptのタグを含めるか。デフォルトではtrue
align コンテンツの配置をleftrightcenterから指定。デフォルトではnone
lang 言語を指定する。

JSONデータ

{
    "cache_age": "3153600000",
    "url": "https://twitter.com/arayutw/statuses/507100153845530624",
    "height": null,
    "provider_url": "https://twitter.com",
    "provider_name": "Twitter",
    "author_name": "あらゆ",
    "version": "1.0",
    "author_url": "https://twitter.com/arayutw",
    "type": "rich",
    "html": "<blockquote class=\"twitter-tweet\"><p>桂浜水族館で喧嘩があった模様。興奮した両者は取っ組み合いになり、一方が水中に突き落とされました。 <a href=\"http://t.co/kDma6ANXMk\">pic.twitter.com/kDma6ANXMk</a></p>&mdash; あらゆ (@arayutw) <a href=\"https://twitter.com/arayutw/status/507100153845530624\">September 3, 2014</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
    "width": 550
}

埋め込みサンプル

はてなブログ

最後にはてなブログを紹介。こうして見ると、oEmbedへの対応は日本発のwebサービスの中ではかなり先進的ですねー。他のサイトも続いてほしいものです。公式リファレンスは下記ページです。

はてなブログoEmbed API Hatena Developer Center

リクエスト方法

項目内容
エンドポイント http://hatenablog.com/oembed
パーマリンク http://....hatenablog.com/entry/ [Sample]

JSONデータ

{
    "author_name": "arayutw",
    "width": "100%",
    "author_url": "http://blog.hatena.ne.jp/arayutw/",
    "provider_url": "http://hatenablog.com",
    "version": "1.0",
    "provider_name": "Hatena Blog",
    "height": "190",
    "html": "<iframe src=\"http://arayutw.hatenablog.com/embed/2013/12/18/200240\" title=\"はてなスター数全件取得 - arayutwのブログ\" scrolling=\"no\" frameborder=\"0\" style=\"width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"><a href=\"http://arayutw.hatenablog.com/entry/2013/12/18/200240\">はてなスター数全件取得 - arayutwのブログ</a></iframe>",
    "url": "http://arayutw.hatenablog.com/entry/2013/12/18/200240",
    "title": "はてなスター数全件取得",
    "type": "rich"
}

埋め込みサンプル

oEmbedの関連リンク集

oEmbedの利用に役立つwebサイトをまとめました。

最新情報

公式が発信している最新情報をチェックできる場所です。

oEmbed
oEmbedの公式サイト。
The official oEmbed mailing list
Googleグループを利用した公式のメーリングリスト。

言語別のライブラリ

oEmbedの利用が容易になるライブラリを各言語でまとめました。

php-oembed
PHP用のライブラリ。
Web-oEmbed-0.04
Perl用のライブラリ。
netshade/oembed_links
Ruby用のライブラリ。
Python oEmbed
Python用のライブラリ。
worldcompany/djangoembed
Django用のライブラリ。
michael-simons/java-oembed
Java用のライブラリ。
oEmbed API Wrapper for .Net
.Net用のライブラリ。
jquery-oembed
jQuery用のライブラリ。
itteco/iframely
Node.js用のライブラリ。

関連記事

Moves APIでwebサービスを作りたい全ての人に向けて書きました
地図を表示する - Google Maps API v3
oEmbed APIでwebサービスを作りたい全ての人に向けて書きました。
初心者にも分かる!なOAuth1.0における署名の作成方法
pocket APIでwebサービスを作りたい全ての人に向けて書きました
デフォルトのUIを非表示にする - disableDefaultUI
Tumblr APIでwebサービスを作りたい全ての人に向けて書きました
Instagram APIでwebサービスを作りたい全ての人に向けて書きました
地図キャンパスの背景色を指定する - backgroundColor
マップタイプ(地図の種類)を指定する - Google Maps API v3

...もっと見るにはこちら

APIの使い方まとめ
APIの使い方まとめ

33件の記事を全部見る

InstagramやTumblrなど、webサービス制作に利用できる、各種APIの使い方をまとめています。

この記事へのコメント

感想、ご指摘などお気軽にお寄せ下さい。「関連記事を書いた」という方はご報告いただければリンクします。

  • コメント

※Twitter、Facebook、はてな、いずれかのアカウントをお持ちの方は、本人認証(ログイン)を行なうことができます。
※本人認証をすることで、書き込みの待ち時間なし、画像アップロード、アイコンなどが利用できます。
※認証時にサービスと連携しますが、名前とアイコン以外の情報を読み込んだり、また書き込みを行なうことはありません。連携で要求する権限は「公開情報の読み取り」のみです。

コメントは、0件です。

記事の更新履歴

  • 記事を公開しました。
    1970/01/01 09:00

ブログの著者について

あらゆ
Yuta Arai (あらゆ)
足立区竹ノ塚在住の1982年生まれ。ウェブとラーメンが大好きです。