Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: LWP::UserAgent & match

by hippo (Chancellor)
on May 21, 2020 at 16:00 UTC ( #11117051=note: print w/replies, xml ) Need Help??


in reply to LWP::UserAgent & match

$todaysQuoteStr =~ quotemeta($todaysQuoteStr); ## I believe this escapes all characters that need to be escaped

Not quite, no. The right hand side uses quotemeta to do that but then you don't assign the result to anything. This will show the difference that an assignment makes:

#!/usr/bin/env perl use strict; use warnings; my $todaysQuoteStr = ' data-reactid="49"><span class="Trsdu(0.3s) Fw(b +) Fz(36px) Mb(-4px) D(ib)" data-reactid="50">'; $todaysQuoteStr =~ quotemeta($todaysQuoteStr); print "Bad: $todaysQuoteStr\n"; $todaysQuoteStr = quotemeta($todaysQuoteStr); print "Good: $todaysQuoteStr\n";

Replies are listed 'Best First'.
Re^2: LWP::UserAgent & match
by vskatusa (Acolyte) on May 21, 2020 at 16:26 UTC
    Thanks hippo. I did make the change but no luck in match. BTW, the $string does contain the matcheded string $todaysQuoteStr. My revised code
    use strict; use warnings; use LWP::UserAgent; use feature 'say'; my ($position,$price); my $todaysQuoteStr = 'data-reactid="49"><span class="Trsdu(0.3s) Fw(b) + Fz(36px) Mb(-4px) D(ib)" data-reactid="50">'; $todaysQuoteStr = quotemeta($todaysQuoteStr); my $url = 'https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch' +; my $ua = LWP::UserAgent->new(); my $req = HTTP::Request->new(GET => $url); $ua->agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537. +36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'); my $response = $ua->request($req); my $string = $response->decoded_content; #say "string = $string"; say "\t\t\t=>searching for todays quote pattern [$todaysQuoteStr]"; + $position = 0; if ($string =~ m/$todaysQuoteStr/) { my $quoteStr = substr $string, $position, 20; say "quoteStr = $quoteStr"; my @quotes = split(/<\/span>/,$quoteStr); $price = $quotes[0]; say "\t\t\t[price = $price]"; } else { say "\t\t\t pattern not found"; }
      worked - code below
      use strict; use warnings; use LWP::UserAgent; use feature 'say'; my ($price); my $todaysQuoteStr = 'data-reactid="49"><span class="Trsdu(0.3s) Fw(b) + Fz(36px) Mb(-4px) D(ib)" data-reactid="50">'; $todaysQuoteStr = quotemeta($todaysQuoteStr); my $url = 'https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch' +; my $ua = LWP::UserAgent->new(); my $req = HTTP::Request->new(GET => $url); $ua->agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537. +36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'); my $response = $ua->request($req); my $string = $response->decoded_content; #say "string = $string"; say "\t\t\t=>searching for todays quote pattern [$todaysQuoteStr]"; + my ($counter,$position) = (0,''); while ($string =~ m/$todaysQuoteStr/g) { $counter++; $position = pos($string); if ($counter == 1) {last;} # } if (!(defined($position))) { $position = ''; } if ($position eq '') { say "\t\t\t\t<<pattern not found!>> "; } else { my $quoteStr = substr $string, $position, 20; say "quoteStr = $quoteStr"; my $endStr = '</span>'; $endStr = quotemeta($endStr); my @quotes = split(/$endStr/,$quoteStr); $price = $quotes[0]; say "\t\t\t[price = $price]"; }

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11117051]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (3)
As of 2020-11-30 12:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?