OEmbed.Extensions.Microsoft.DependencyInjection 1.6.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package OEmbed.Extensions.Microsoft.DependencyInjection --version 1.6.1                
NuGet\Install-Package OEmbed.Extensions.Microsoft.DependencyInjection -Version 1.6.1                
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.Extensions.Microsoft.DependencyInjection" Version="1.6.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add OEmbed.Extensions.Microsoft.DependencyInjection --version 1.6.1                
#r "nuget: OEmbed.Extensions.Microsoft.DependencyInjection, 1.6.1"                
#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.
// Install OEmbed.Extensions.Microsoft.DependencyInjection as a Cake Addin
#addin nuget:?package=OEmbed.Extensions.Microsoft.DependencyInjection&version=1.6.1

// Install OEmbed.Extensions.Microsoft.DependencyInjection as a Cake Tool
#tool nuget:?package=OEmbed.Extensions.Microsoft.DependencyInjection&version=1.6.1                

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

  • CoubProvider
  • DeviantartProvider
  • FlickrProvider
  • GfycatProvider
  • GiphyProvider
  • GyazoProvider
  • ImgurProvider
  • InstagramProvider
  • KickstarterProvider
  • PinterestProvider
  • PixivProvider
  • RedditProvider
  • SoundcloudProvider
  • SpotifyProvider
  • TiktokProvider
  • TumblrProvider
  • TwitterProvider
  • VimeoProvider
  • YoutubeProvider

Additional providers can be added during configuration:

using HeyRed.OEmbed.Providers;

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

// or with options
// NOTE: Some oembed providers defines additional parameters, so use "Parameters" option if you need them.
services.AddOEmbed()
    .ClearProviders() // remove all default providers
    .AddProvider<TwitterProvider>(options =>
    {
        options.Parameters = new Dictionary<string, string?>
        {
            ["theme"] = "dark"
        };
    })
    .AddProvider<FacebookProvider>(options =>
    {
        options.Parameters = new Dictionary<string, string?>
        {
            ["access_token"] = "app_id|token"
        };
    });

Additional providers:

  • FacebookProvider
  • AfreecatvProvider
  • VliveProvider
  • AnnieMusicProvider
  • AudioboomProvider
  • AudiomackProvider
  • CodepenProvider
  • YandexMusicProvider
  • DeezerProvider
  • DailymotionProvider

NOTE: While Instagram can work without access_token(with limited legacy endpoint), Facebook is just throw exception if you didn't provide these token.

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 or HttpRequestException was thrown.
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 
    }
    else if (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
{
    // "ProviderOptions" is optional, you can safely remove argument from constructor
    public ExampleProvider(ProviderOptions? options = default)
    {
        AddParameters(options?.Parameters);
        
        // The Provider registry is primarily using this to select right provider at first check.
        // NOTE: Add all the hosts that will be used in the schemes below.
        AddAllowedHosts(new[] { "example.com", "www.example.com" });
        
        AddScheme(
            // Simple regex without hostname, "^" and "$" asserts. 
            // If this Regex is match string url, then scheme used to build request.
            matcher: new RegexMatcher(@"/\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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.0.0 3,801 1/22/2024
3.0.0 3,822 6/7/2023
2.0.1 743 10/28/2022
2.0.0 909 5/18/2022
1.6.1 490 4/1/2022
1.6.0 454 3/24/2022
1.5.0 460 3/23/2022
1.4.1 453 3/23/2022
1.3.0 430 3/21/2022
1.2.0 455 3/19/2022
1.1.0 418 3/18/2022
1.0.1 470 3/17/2022
1.0.0 457 3/17/2022