Note: I cross posted this question on perlmonks 
https://perlmonks.org/?node_id=1229558

On Thursday, February 7, 2019 at 9:48:20 AM UTC-8, Ron Bergin wrote:
>
> 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