OEmbed 1.1.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package OEmbed --version 1.1.0
                    
NuGet\Install-Package OEmbed -Version 1.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OEmbed" Version="1.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OEmbed" Version="1.1.0" />
                    
Directory.Packages.props
<PackageReference Include="OEmbed" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OEmbed --version 1.1.0
                    
#r "nuget: OEmbed, 1.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OEmbed@1.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OEmbed&version=1.1.0
                    
Install as a Cake Addin
#tool nuget:?package=OEmbed&version=1.1.0
                    
Install as a Cake Tool

OEmbed

A simple oEmbed consumer library for .NET

Install

via NuGet:

PM> Install-Package OEmbed

DI extensions for Microsoft.Extensions.DependencyInjection:

PM> Install-Package OEmbed.Extensions.Microsoft.DependencyInjection

DI configuration

services.AddOEmbed();

// or

services.AddOEmbed(options =>
{
	options.EnableCache = true; // true by default
});

By default it's register all built in providers:

  • InstagramProvider
  • TiktokProvider
  • TwitterProvider
  • VimeoProvider
  • YoutubeProvider
  • RedditProvider

You can add a provider during configuration:

services.AddOEmbed()
	.ClearProviders() // remove all default providers
	.AddProvider<YoutubeProvider>()
	.AddProvider<VimeoProvider>();

// or with options
services.AddOEmbed()
	.ClearProviders() // remove all default providers
	.AddProvider<TwitterProvider>(options =>
	{
		options.Parameters = new Dictionary<string, string?>
		{
			["theme"] = "dark"
		};
	});

Usage

  • Inject IOEmbedConsumer throught constructor injection.
  • Call one of RequestAsync() overloads.

For example:

using HeyRed.OEmbed.Abstractions;
using HeyRed.OEmbed.Models;

// Returns null if provider not found for given url.
// NOTE: This method can throw HttpRequestException, so wrap your request with try/catch if it needed.
Video? result = await _oEmbedConsumer.RequestAsync<Video>("https://vimeo.com/22439234");

The result object is are similar to described in the spec

Models: Base, Link, Photo, Rich, Video

If you dont know which response models supported by provider, then use dynamic overload.

// Deserialize response based on provider preferences
dynamic? item = await _oEmbedConsumer.RequestAsync(url);

if (item is not null)
{
	if (item is Video) 
	{ 
		// work with video 
	}
	elseif (item is Photo) 
	{ 
		// work with photo 
	}
	else { //do something }
}

Caching

Configure cache options:

services.AddOEmbed().Configure<CacheOptions>(options =>
{
	options.AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(30); // Default is 1 hour
});

By default cache is enabled and it's default implementation is just a wrapper around MemoryCache

You can write your own implementation of ICache and replace default cache during app configuration:

services.AddOEmbed().SetCache<DistributedRedisCache>();

Additional providers

An easy way to write your own provider is inheritance of ProviderBase record:

public record ExampleProvider : ProviderBase
{
	public ExampleProvider(ProviderOptions? options = default) // Is optional, you can safely remove argument from constructor
	{
		AddParameters(options?.Parameters);

		// The Provider registry is primarily using this to select right provider at first check.
		AddAllowedHosts(new[] { "example.com", "www.example.com" });

		AddScheme(
			// Simple regex without "^" and "$" asserts. 
			// If this Regex is match string url, then scheme used to build request.
			matcher: new RegexMatcher(@"https?://(?:www\.)?example\.com/\S+"), 
			// API endpoint for current scheme
			apiEndpoint: "http://example.com/oembed",
			// The response type provided by resource.
			resourceType: ResourceType.Rich);
		}
	}
	
	// (Optional) Primary API response format(default is JSON)
	public override ResponseFormat ResponseType => ResponseFormat.Xml;
}

License

MIT

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on OEmbed:

Package Downloads
OEmbed.Extensions.Microsoft.DependencyInjection

OEmbed extensions for ASP.NET Core.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
4.0.1 215 5/21/2025
4.0.0 9,495 1/22/2024
3.0.0 55,569 6/7/2023
2.0.1 899 10/28/2022
2.0.0 14,809 5/18/2022
1.6.1 634 4/1/2022
1.6.0 608 3/24/2022
1.5.0 594 3/23/2022
1.4.0 729 3/23/2022
1.3.0 587 3/21/2022
1.2.0 616 3/19/2022
1.1.0 602 3/18/2022
1.0.1 636 3/17/2022
1.0.0 630 3/17/2022