I'm brand new to Mojolicious and working on a lite script that goes to 75
urls and retrieves text in an h3 tag. I've worked up a working test script
that outputs to console and now I'm working on adjusting it to be a web app
but I can't seem to get the correct syntax to store/retrieve the data.
What am I doing wrong?
#!/usr/bin/perl
use Mojolicious::Lite;
my @urls = (
'https://mojolicious.org',
'https://metacpan.org',
'https://perlmonks.org',
'http://www.google.com',
);
get '/titles' => sub {
my $ua = Mojo::UserAgent->new;
my $async = Mojo::IOLoop::Delay->new;
$async->steps(
sub {
my $self = shift;
$ua->get($_, $self->begin) for @urls;
},
sub {
my ($self, @tx) = @_;
my $titles = [];
foreach (@tx) {
my $title = '';
my $status = $_->res->is_success ? 'Connected' : $_->error
->{message};
if ( $_->res->is_success ) {
$title = $_->res->dom->at('title')->text;
$title =~ s/^\s+|\s+$//g; # couldn't get Mojo::Util
trim function to work
}
push @$titles, {host => $_->req->url->host, status =>
$status, title => $title};
}
$self->stash(titles => $titles);
}
);
} => 'titles';
app->start;
__DATA__
@@ titles.html.ep
% layout 'titles';
%= dumper stash('titles')
<table border=1>
<tr>
<th>Host</th>
<th>Status</th>
<th>Title</th>
</tr>
<!-- % for my $server ( @{ stash('titles') } ) { -->
% for my $server ( stash('titles') ) {
<tr>
<td><%= $server->{host} %></td>
<td><%= $server->{status} %></td>
<td><%= $server->{title} =%></td>
</tr>
% }
</table>
@@ layouts/titles.html.ep
<!doctype html>
<html>
<head>
<title>Titles</title>
</head>
<body>
<h1>Titles</h1>
<%= content =%>
</body>
</html>
Here's the output:
> $ ./titles_web.pl get /titles
> [Thu Feb 7 09:45:54 2019] [debug] GET "/titles" (fcf21ce8)
> [Thu Feb 7 09:45:54 2019] [debug] Routing to a callback
> [Thu Feb 7 09:45:54 2019] [debug] Rendering template "titles.html.ep"
> from DATA section
> [Thu Feb 7 09:45:54 2019] [debug] Rendering template
> "layouts/titles.html.ep" from DATA section
> [Thu Feb 7 09:45:54 2019] [debug] 200 OK (0.00267s, 374.532/s)
> <!doctype html>
>
> <html>
>
> <head>
> <title>Titles</title>
> </head>
>
> <body>
> <h1>Titles</h1>
>
> undef
>
>
> <table border=1>
> <tr>
> <th>Host</th>
> <th>Status</th>
> <th>Title</th>
> </tr>
>
> <!-- % for my $server ( @{ stash('titles') } ) { -->
> <tr>
> <td></td>
> <td></td>
> <td></td>
> </tr>
> </table>
> </body>
>
> </html>
>
--
You received this message because you are subscribed to the Google Groups
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.