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 mojolicious+unsubscr...@googlegroups.com.
To post to this group, send email to mojolicious@googlegroups.com.
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to