Skip to content

Universal oembed endpoint works with Cloudflare Workers powered by iframely providors.json

Notifications You must be signed in to change notification settings

ku-suke/oembed-edge

Repository files navigation

oEmbed Edge

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:providers

使用方法

開発サーバー起動

npm run dev

デプロイ

npm run deploy

API

GET /oembed

URLから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>"
}

処理フロー

  1. Static Discovery: 登録済みプロバイダーのURLパターンにマッチするか確認
    • マッチした場合、対応するoEmbedエンドポイントにリクエスト
  2. 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
  • Reddit
  • Figma
  • CodePen
  • CodeSandbox
  • SlideShare
  • Tumblr
  • Pinterest
  • その他130以上のサービス

プロバイダーの更新

iframely/lib/plugins/system/oembed/providers.json を更新後:

npm run build:providers

除外プロバイダー

以下のプロバイダーは認証が必要なため除外されています:

  • Facebook (Post, Video)
  • Instagram

ファイル構成

.
├── 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

About

Universal oembed endpoint works with Cloudflare Workers powered by iframely providors.json

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published