#!/usr/bin/perl -w # # Deka import modul based on Union.pm # Version 2016-01-12 package Finance::Quote::Deka; require 5.005; use strict; use LWP::UserAgent; use HTTP::Request::Common; our $VERSION = '1.51'; # VERSION sub methods { return (deka => \&deka); } sub labels { return (deka => [qw/exchange name date isodate price method/]); } # ======================================================================= # The deka routine gets quotes of DEKA funds (Deka Investments) # On their website DEKA provides a csv file in the format # label1;label2;... # symbol1;name1;date1;date_before1;bid1;... # symbol2;name2;date2;date_before2,bid2,... # ... # # This subroutine was written by Andre Joost # Convert number separators to US values sub convert_price { $_ = shift; tr/.,/,./ ; return $_; } sub deka { my $quoter = shift; my @funds = @_; return unless @funds; my $ua = $quoter->user_agent; my (%fundhash, @q, %info, $tempdate); # create hash of all funds requested foreach my $fund (@funds) { $fundhash{$fund} = 0; } # get csv data my $response = $ua->request(GET &dekaurl); if ($response->is_success) { # process csv data foreach (split('\015?\012',$response->content)) { # @q = $quoter->parse_csv($_) or next; @q = split(/;/) or next; next unless (defined $q[0]); if (exists $fundhash{$q[0]}) { $fundhash{$q[0]} = 1; $info{$q[0], "exchange"} = "DEKA"; $info{$q[0], "name"} = $q[1]; $info{$q[0], "symbol"} = $q[0]; $tempdate = $q[2]; $quoter->store_date(\%info, $q[0], {eurodate => $tempdate}); $info{$q[0], "price"} = convert_price($q[4]); $info{$q[0], "last"} = convert_price($q[4]); $info{$q[0], "method"} = "deka"; $info{$q[0], "currency"} = $q[8]; $info{$q[0], "success"} = 1; } } # check to make sure a value was returned for every fund requested foreach my $fund (keys %fundhash) { if ($fundhash{$fund} == 0) { $info{$fund, "success"} = 0; $info{$fund, "errormsg"} = "No data returned"; } } } else { foreach my $fund (@funds) { $info{$fund, "success"} = 0; $info{$fund, "errormsg"} = "HTTP error"; } } return wantarray() ? %info : \%info; } # DEKA provides a csv file named fondspreise.csv containing the prices of all # their funds for the most recent business day. sub dekaurl { return "https://www.deka.de/privatkunden/pflichtseiten/fondspreise?service=fondspreislisteExportController&action=exportCsv&typ=inVertrieb"; } 1; =head1 NAME Finance::Quote::Deka - Obtain quotes from DEKA (Wertpapierhaus der Sparkassen). =head1 SYNOPSIS use Finance::Quote; $q = Finance::Quote->new; %stockinfo = $q->fetch("deka","DE0008474503"); =head1 DESCRIPTION This module obtains information about DEKA managed funds. Information returned by this module is governed by DEKA's terms and conditions. =head1 LABELS RETURNED The following labels may be returned by Finance::Quote::DEKA: exchange, name, date, price, last. =head1 SEE ALSO DEKA (Deka Investments), http://www.deka.de/ =cut