# Copyright (C) 1998, Dj Padzensky # Copyright (C) 1998, 1999 Linas Vepstas # Copyright (C) 2000, Yannick LE NY # Copyright (C) 2000, Paul Fenwick # Copyright (C) 2000, Brent Neal # Copyright (C) 2000, Keith Refson # Copyright (C) 2003, Tomas Carlsson # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA # # # This code was derived from the work on the packages Finance::Yahoo::* # package Finance::Quote::SEB; require 5.004; use strict; use vars qw( $SEB_FUNDS_URL); use constant DEBUG => $ENV{DEBUG}; use if DEBUG, 'Smart::Comments'; use LWP::UserAgent; use HTTP::Request::Common; use utf8; our $VERSION = '1.51'; # VERSION $SEB_FUNDS_URL = 'https://seb.se/pow/fmk/2100/Senaste_fondkurserna.TXT'; sub methods { return (seb_funds => \&seb_funds); } { my @labels = qw/date isodate method source name currency price/; sub labels { return (seb_funds => \@labels); } } sub seb_funds { my $quoter = shift; my @symbols = @_; return unless @symbols; my ($ua, $reply, $url, %funds); $url = $SEB_FUNDS_URL; $ua = $quoter->user_agent; $reply = $ua->request(GET $url); ### url : $url ### reply : $reply unless ($reply->is_success) { foreach my $symbol (@symbols) { $funds{$symbol, "success"} = 0; $funds{$symbol, "errormsg"} = "HTTP failure"; } return wantarray ? %funds : \%funds; } foreach my $line (split /\n/, $reply->content) { chomp($line); # Format: # 2003-08-11;SEB Aktiesparfond;5,605;387 my ($date, $name, $price, $hmm) = split ';', $line; utf8::encode($name); if (grep {$_ eq $name} @symbols) { $price =~ s/,/\./; # change decimal point from , to . $funds{$name, 'symbol'} = $name; $quoter->store_date(\%funds, $name, {isodate => $date}); $funds{$name, 'method'} = 'seb_funds'; $funds{$name, 'source'} = 'Finance::Quote::SEB'; $funds{$name, 'name'} = $name; $funds{$name, 'currency'} = 'SEK'; $funds{$name, 'price'} = $price; $funds{$name, 'success'} = 1; } } # Check for undefined symbols foreach my $symbol (@symbols) { unless ($funds{$symbol, 'success'}) { $funds{$symbol, "success"} = 0; $funds{$symbol, "errormsg"} = "Fund name not found"; } } return %funds if wantarray; return \%funds; } 1; =head1 NAME Finance::Quote::SEB - Obtain fund prices from www.seb.se =head1 SYNOPSIS use Finance::Quote; $q = Finance::Quote->new; %fundinfo = $q->fetch("seb_funds","fund name"); =head1 DESCRIPTION This module obtains information about SEB fund prices from www.seb.se. The only available information source is "seb_funds" and it will use www.seb.se. =head1 FUND NAMES Unfortunately there is no unique identifier for the fund names. Therefore the complete fund name must be given, including spaces, case is important. Consult https://seb.se/bors-och-finans/fonder/fondkurslista for all available funds. Example "SEB Aktiesparfond" =head1 LABELS RETURNED Information available from SEB may include the following labels: date method source name currency price. The prices are updated at the end of each bank day. =head1 SEE ALSO SEB website - http://www.seb.se/ =cut