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::Sock
rve {
my ($self, $c, $args) = @_;
my $format = $c->stash('format') || $c->param('format') || 'json';
my $log_level;
$args ||= {url => $c->param('url')};
$log_level = delete $args->{log_leve
>html) if $format eq 'html';
my $json = $err ? {err => $err->{code} || 500} : $link->TO_JSON;
return $c->render(json => $json) unless $format eq 'jsonp';
my $name = $c->param('callback
scription($text);
last;
}
}
sub _parse_gist {
my ($self, $tx) = @_;
$self->_learn_from_json($tx);
return $self unless $self->{files};
return $self->type('rich')->template([__PACKAGE__,
package LinkEmbedder::Link::Basic;
use Mojo::Base 'LinkEmbedder::Link';
use Mojo::JSON;
use Mojo::Util 'trim';
my $PHOTO_RE = qr!\.(?:jpg|png|gif|webp)\b!i;
my $VIDEO_RE = qr!\.(?:mpg|mpeg|mov|mp4|o
elf->SUPER::_learn_from_dom($dom);
$tmp = $dom->at('script[type="application/ld+json"]');
$self->_learn_from_json_schema($tmp->text) if $tmp;
# Bitbucket hack
$tmp = $dom->at('div.codehilite
earn_from_json_schema {
my ($self, $json) = @_;
eval { $json = Mojo::JSON::from_json($json) } unless ref $json eq 'HASH';
return unless ref $json eq 'HASH'
_from_json(shift) });
}
sub _learn_from_json {
my ($self, $tx) = @_;
my $json = $tx->res->json;
$self->type('rich');
if (my $description = $json->{message}) {
$description = "$json->{au
on" if $json->{author_name};
$self->description($description);
}
if ($json->{finished_at}) {
$self->title(sprintf 'Build %s at %s', $json->{status} ? 'failed' : 'succeeded', $json->{finis
hed_at});
}
elsif ($json->{started_at}) {
$self->title(sprintf 'Started building at %s.', $json->{started_at});
}
else {
$self->title('Build has not been started.');
}
return $sel
r %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'
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]}",
title' => ['meta[property="og:title"]', 'meta[name="twitter:title"]', 'title'],
);
my @JSON_ATTRS = (
'author_name', 'author_url', 'cache_age', 'height', 'provider_name', 'p
O_JSON {
my $self = shift;
my %json;
for my $attr (grep { defined $self->$_ } @JSON_ATTRS) {
$json{$attr} = $self->$attr;
$json{$attr} = "$json{$attr}" if $attr =~ /url$/;
}
$json{
html} = $self->html unless $self->type eq 'link';
return \%json;
}
sub _dump { Mojo::Util::dumper($_[0]->TO_JSON); }
sub _el {
my ($self, $dom, @sel) = @_;
@sel = @{$DOM_SEL{$sel[0]}} if $DOM