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.