LinkEmbedder
view release on metacpan or search on metacpan
lib/LinkEmbedder.pm view on Meta::CPAN
package LinkEmbedder;
use Mojo::Base -base;
use LinkEmbedder::Link;
use Mojo::JSON;
use Mojo::Loader 'load_class';
use Mojo::Promise;
use Mojo::UserAgent;
use constant TLS => eval { require IO::Socket::SSL; IO::Socket::SSL->VERSION('2.009'); 1 };
use constant DEBUG => $ENV{LINK_EMBEDDER_DEBUG} || 0;
our $VERSION = '1.20';
my $PROTOCOL_RE = qr!^(\w+):\w+!i; # Examples: mail:, spotify:, ...
has force_secure => sub { $ENV{LINK_EMBEDDER_FORCE_SECURE} || 0 };
has ua => sub { Mojo::UserAgent->new->max_redirects(3); };
has url_to_link => sub {
return {
'default' => 'LinkEmbedder::Link::Basic',
'dropbox.com' => 'LinkEmbedder::Link::Dropbox',
'git.io' => 'LinkEmbedder::Link::Github',
'github.com' => 'LinkEmbedder::Link::Github',
'google' => 'LinkEmbedder::Link::Google',
'goo.gl' => 'LinkEmbedder::Link::Google',
'imgur.com' => 'LinkEmbedder::Link::Imgur',
'instagram.com' => 'LinkEmbedder::Link::Instagram',
'ix.io' => 'LinkEmbedder::Link::Ix',
'meet.jit.si' => 'LinkEmbedder::Link::Jitsi',
'metacpan.org' => 'LinkEmbedder::Link::Metacpan',
'nhl.com' => 'LinkEmbedder::Link::NHL',
'paste.opensuse.org' => 'LinkEmbedder::Link::OpenSUSE',
'paste.scsys.co.uk' => 'LinkEmbedder::Link::Shadowcat',
'pastebin.com' => 'LinkEmbedder::Link::Pastebin',
'spotify' => 'LinkEmbedder::Link::Spotify',
'ted.com' => 'LinkEmbedder::Link::oEmbed',
'travis-ci.org' => 'LinkEmbedder::Link::Travis',
'twitter.com' => 'LinkEmbedder::Link::Twitter',
'vimeo.com' => 'LinkEmbedder::Link::oEmbed',
'xkcd.com' => 'LinkEmbedder::Link::Xkcd',
'webex.com' => 'LinkEmbedder::Link::Webex',
'whereby.com' => 'LinkEmbedder::Link::Whereby',
'youtube.com' => 'LinkEmbedder::Link::oEmbed',
'youtu.be' => 'LinkEmbedder::Link::oEmbed',
};
};
sub get {
my ($self, $args, $cb) = @_;
$self->get_p($args)->then(sub {
$self->$cb(shift);
})->catch(sub {
my $err = pop // 'Unknown error.';
$err = {message => "$err", code => 500} unless ref $err eq 'HASH';
$self->$cb(LinkEmbedder::Link->new(error => $err, force_secure => $self->force_secure));
});
return $self;
}
sub get_p {
my ($self, $args) = @_;
my ($e, $link);
$args = ref $args eq 'HASH' ? {%$args} : {url => $args};
( run in 1.805 second using v1.01-cache-2.11-cpan-39bf76dae61 )