The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Mojolicious::Plugin::LinkEmbedder - Convert a URL to embedded content

VERSION

0.20

DESCRIPTION

This module can transform a URL to an iframe, image or other embeddable content.

SYNOPSIS

Simple version

  use Mojolicious::Lite;
  plugin LinkEmbedder => { route => '/embed' };

The simple route includes the caching example below.

Caching is EXPERIMENTAL and could be removed without notice.

Full control

  plugin 'LinkEmbedder';

  get '/embed' => sub {
    my $c = shift;

    $c->delay(
      sub {
        my ($delay) = @_;
        $c->embed_link($c->param('url'), $delay->begin);
      },
      sub {
        my ($delay, $link) = @_;

        $c->respond_to(
          json => {
            json => {
              media_id => $link->media_id,
              url => $link->url->to_string,
            },
          },
          any => { text => $link->to_embed }
        );
      }
    );
  };

Example with caching

  plugin 'LinkEmbedder';

  get '/embed' => sub {
    my $c = shift;
    my $url = $c->param('url');
    my $cache = $c->app->{linkembedder_cache} ||= Mojo::Cache->new;
    my $cached;

    $c->delay(
      sub {
        my ($delay) = @_;
        return $delay->pass($cached) if $cached = $cache->get($url);
        return $c->embed_link($c->param('url'), $delay->begin);
      },
      sub {
        my ($delay, $link) = @_;

        $link = $link->TO_JSON if UNIVERSAL::can($link, 'TO_JSON');
        $cache->set($url => $link);

        $c->respond_to(
          json => {
            json => {
              media_id => $link->{media_id},
              url => $link->{url},
            },
          },
          any => { text => $link->{html} }
        );
      }
    );
  };

SUPPORTED LINKS

METHODS

See "SYNOPSIS".

register

  $app->plugin('LinkEmbedder' => \%config);

Will register the "embed_link" helper which creates new objects from Mojolicious::Plugin::LinkEmbedder::Default. %config is optional but can contain:

  • route => $str|$obj

    Use this if you want to have the default handler to do link embedding. The default handler is shown in "SYNOPSIS". $str is just a path, while $obj is a Mojolicious::Routes::Route object.

DISCLAIMER

This module might embed javascript from 3rd party services.

Any damage caused by either evil DNS takeover or malicious code inside the javascript is not taken into account by this module.

If you are aware of any security risks, then please let us know.

COPYRIGHT AND LICENSE

Copyright (C) 2014, Jan Henning Thorsen

This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.

AUTHOR

Jan Henning Thorsen - jhthorsen@cpan.org

Joel Berger, jberger@cpan.org

Marcus Ramberg - mramberg@cpan.org