LinkEmbedder
view release on metacpan or search on metacpan
lib/LinkEmbedder/Link/oEmbed.pm view on Meta::CPAN
package LinkEmbedder::Link::oEmbed;
use Mojo::Base 'LinkEmbedder::Link';
use constant DEBUG => $ENV{LINK_EMBEDDER_DEBUG} || 0;
require LinkEmbedder;
# please report back if you add more urls to this hash
our %API = (
'ted.com' => 'https://www.ted.com/services/v1/oembed.json',
'vimeo.com' => 'https://vimeo.com/api/oembed.json',
'youtube.com' => 'https://www.youtube.com/oembed',
'youtu.be' => 'https://www.youtube.com/oembed',
);
has html => sub { shift->SUPER::html };
sub learn_p {
my $self = shift;
return $self->SUPER::learn_p unless $self->url->path =~ /\w/;
my $api_url = $self->_api_url;
return $self->_get_p($api_url)->then(sub { $self->_learn_from_json(shift) }) if $api_url;
$self->error({message => "Unknown oEmbed provider for @{[$self->url]}", code => 400});
return $self;
}
sub _api_url {
my $self = shift;
my $url = $self->url->clone;
my $api_url = LinkEmbedder::_host_in_hash($url->host, \%API) or return undef;
$url->path->trailing_slash(0);
$api_url = Mojo::URL->new($api_url);
$api_url->query->param(url => $url->to_string);
return $api_url;
}
1;
( run in 0.872 second using v1.01-cache-2.11-cpan-71847e10f99 )