Cloudflare Workers向けの軽量oEmbedプロキシ。IframelyをEdge環境で動作するよう移植したものです。
- 軽量: cheerio, jsdom等の重いライブラリを使用せず、Cloudflare NativeのHTMLRewriterを使用
- 高速: Edge環境で動作し、低レイテンシーでレスポンス
- 147プロバイダー対応: YouTube, Vimeo, Twitter, Spotify, TikTok等の主要サービスに対応
- 汎用フォールバック: 未対応サイトもOpenGraph/Twitter Cardsメタデータから自動生成
git clone --recursive https://github.com/ku-suke/oembed-edge.git
npm install
npm run build:providersnpm run devnpm run deployURLからoEmbed情報を取得します。
パラメータ
| 名前 | 必須 | 説明 |
|---|---|---|
| url | Yes | 取得対象のURL |
リクエスト例
curl "http://localhost:8787/oembed?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ"レスポンス例
{
"type": "video",
"version": "1.0",
"title": "Rick Astley - Never Gonna Give You Up (Official Video)",
"author_name": "Rick Astley",
"author_url": "https://www.youtube.com/@RickAstleyYT",
"provider_name": "YouTube",
"provider_url": "https://www.youtube.com/",
"thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"thumbnail_width": 480,
"thumbnail_height": 360,
"width": 200,
"height": 113,
"html": "<iframe ...></iframe>"
}- Static Discovery: 登録済みプロバイダーのURLパターンにマッチするか確認
- マッチした場合、対応するoEmbedエンドポイントにリクエスト
- Generic Fallback: プロバイダーが見つからない場合
- 対象URLのHTMLを取得
<link rel="alternate" type="application/json+oembed">を検出した場合はそのURLを使用- 未検出の場合、OpenGraph/Twitter Cardsメタデータからレスポンスを生成
- YouTube / YouTube Shorts
- Vimeo
- Twitter / X
- Spotify
- TikTok
- SoundCloud
- Dailymotion
- Flickr
- Figma
- CodePen
- CodeSandbox
- SlideShare
- Tumblr
- その他130以上のサービス
iframely/lib/plugins/system/oembed/providers.json を更新後:
npm run build:providers以下のプロバイダーは認証が必要なため除外されています:
- Facebook (Post, Video)
.
├── package.json
├── tsconfig.json
├── wrangler.toml
├── iframely/ # iframely(submodule)
├── scripts/
│ └── build-providers.ts # プロバイダー生成スクリプト
└── src/
├── index.ts # Workerエントリーポイント
├── utils.ts # ユーティリティ関数
└── generated-providers.ts # 自動生成 (編集不可)
- Node.js 18+
- Cloudflare Workers
MIT