#!/usr/bin/perl -w
use
if
DEBUG,
'Smart::Comments'
;
our
$VERSION
=
'1.64_03'
;
our
@labels
=
qw/name date isodate last name currency/
;
sub
labels {
return
(
dwsfunds
=> \
@labels
);
}
sub
methods {
return
(
dwsfunds
=> \
&dwsfunds
);
}
sub
dwsfunds {
my
$quoter
=
shift
;
my
@symbols
=
@_
;
my
$ua
=
$quoter
->user_agent();
my
%info
;
if
(not
exists
$quoter
->{DWS_CACHE}) {
$quoter
->{DWS_CACHE} = {};
eval
{
my
@headers
= (
'User-Agent'
=>
'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
,
'Accept'
=>
'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
,
'Accept-Encoding'
=>
'gzip, deflate, br'
,
'Accept-Language'
=>
'en-US,en;q=0.9'
);
my
$reply
=
$ua
->get(
$url
,
@headers
);
my
$processor
= scraper {
process
'//*[@id="FundsFinder_ResultTable"]/tr'
,
'row[]'
=> scraper {
process
'td'
,
'col[]'
=> scraper {
process
'a'
,
'name'
=>
'TEXT'
;
process
':not(a)'
,
'other'
=> [
'HTML'
,
sub
{[
split
m|<br */>|,
$_
]}];
};
};
};
my
$data
=
$processor
->scrape(
$reply
);
for
(
my
$i
= 1;
$i
< @{
$data
->{row}};
$i
++) {
eval
{
my
$name
=
$data
->{row}->[
$i
]->{col}->[1]->{name};
my
$date
=
$data
->{row}->[
$i
]->{col}->[2]->{other}->[0];
my
$last
=
$data
->{row}->[
$i
]->{col}->[2]->{other}->[2];
my
$wkn
=
$data
->{row}->[
$i
]->{col}->[4]->{other}->[1];
my
$isin
=
$data
->{row}->[
$i
]->{col}->[4]->{other}->[2];
$last
=~ s/,/./;
my
$info
= {
name
=>
$name
,
date
=>
$date
,
last
=>
$last
,
wkn
=>
$wkn
,
isin
=>
$isin
};
$quoter
->{DWS_CACHE}->{
$wkn
} =
$info
;
$quoter
->{DWS_CACHE}->{
$isin
} =
$info
;
};
}
};
}
foreach
my
$symbol
(
@_
) {
if
(
exists
$quoter
->{DWS_CACHE}->{
$symbol
}) {
$info
{
$symbol
,
'symbol'
} =
$symbol
;
$info
{
$symbol
,
'name'
} =
$quoter
->{DWS_CACHE}->{
$symbol
}->{name};
$info
{
$symbol
,
'last'
} =
$quoter
->{DWS_CACHE}->{
$symbol
}->{
last
};
$info
{
$symbol
,
'wkn'
} =
$quoter
->{DWS_CACHE}->{
$symbol
}->{wkn};
$info
{
$symbol
,
'isin'
} =
$quoter
->{DWS_CACHE}->{
$symbol
}->{isin};
$info
{
$symbol
,
'currency'
} =
'EUR'
;
$quoter
->store_date(\
%info
,
$symbol
, {
eurodate
=>
$quoter
->{DWS_CACHE}->{
$symbol
}->{date}});
$info
{
$symbol
,
'success'
} = 1;
}
else
{
$info
{
$symbol
,
'success'
} = 0;
$info
{
$symbol
,
'errormsg'
} =
"Symbol $symbol not found."
;
}
}
return
wantarray
() ?
%info
: \
%info
;
}
1;