(.*?)<\/TR>.*?<\/tbody>/si) {
@list = $self->stocklist_parse($1);
return undef unless @list;
}
else {
return undef;
}
if ($list[11] !~ /$stockname/i) {
return undef;
}
return @list;
}
sub stocklist_parse {
shift;
my $table = shift || die "no table sent to table-parser";
my @tds =();
my @retarr;
my $shortname;
if ($table =~ /(.*?)<\/TD>(.*)/si) {
$retarr[0] = $1;
$table = $3;
if ($2 =~ /(.*?)<\/nobr>/i) {
$shortname = $1;
}
else {
die "Couldn't get shortname";
}
}
else {
die "couldn't get company name";
}
foreach ($table =~ /(.*?)<\/TD>/gsi) {
push @tds, $_;
}
if (scalar(@tds) != 12) {
die "wrong number of fields";
}
foreach (1 .. 2) {
if ($tds[$_] =~ /(.*?)<\/FONT>/i) {
$retarr[$_] = $1;
}
else {
$retarr[$_] = $tds[$_]; #Bättre än inget
}
}
foreach (3..7) {
$retarr[$_] = $tds[$_];
}
foreach(8..9) {
if ($tds[$_] =~ /(.*?)<\/nobr>/i) {
$retarr[$_] = $1;
}
else {
$retarr[$_] = $tds[$_];
}
}
$retarr[10] = $tds[11];
$retarr[11] = $shortname;
return @retarr;
}
sub get_stocklist {
my $self = shift;
my $stocklist = shift;
if (!defined($stocklist)) { #can be zero
die "get_stocklist() needs a list number";
}
my $list;
my (@retlist, @trlist);
die "get_stocklist() takes numerical list number" unless ($stocklist =~ /^\d+$/);
if ($stocklist == 0) {
$list = get "http://www.se.omxgroup.com/stocklist.aspx?list=SSE1&group=Kursnoteringar&listname=A-lista%20samtliga";
}
elsif ($stocklist == 1) {
$list = get "http://www.se.omxgroup.com/stocklist.aspx?list=SSE2&group=Kursnoteringar&listname=A-lista%20mest%20omsatta";
}
elsif ($stocklist == 2) {
$list = get "http://www.se.omxgroup.com/stocklist.aspx?list=SSE3&group=Kursnoteringar&listname=A-lista%20%C3%B6vriga";
}
elsif ($stocklist == 3) {
$list = get "http://www.se.omxgroup.com/stocklist.aspx?list=SSE43&group=Kursnoteringar&listname=O-lista%20samtliga";
}
elsif ($stocklist == 4) {
$list = get "http://www.se.omxgroup.com/stocklist.aspx?list=SSE10&group=Kursnoteringar&listname=O-lista%20mest%20Attract40";
}
elsif ($stocklist == 5) {
$list = get "http://www.se.omxgroup.com/stocklist.aspx?list=SSE42&group=Kursnoteringar&listname=O-lista%20%EF%BF%BDvriga";
}
else {
die "get_stocklist() takes a numerical argument of 0-5";
}
if ($list =~ /(.*?)<\/tbody>/si) {
$list = $1;
foreach ($list =~ /(.*?)<\/TR>/gs) {
push @trlist, $_;
}
pop @trlist; #last isn't a stock
for(my $i = 0; $istocklist_parse($trlist[$i]);
if (@tmparr) {
$retlist[$i] = [@tmparr];
}
else {
die "error parsing \$trlist[$i]";
}
}
}
return @retlist;
}
1;
__END__
=head1 NAME
Finance::SE::OMX - Getting stock information from the swedish stock exchange
=head1 SYNOPSIS
use Finance::SE::OMX;
=head1 DESCRIPTION
Finance::SE::OMX provides a simple interface for retrieving stock information
from the swedish stock exchange. It uses LWP::Simple for the communication
with the searchform.
=head1 METHODS
=over 4
=item new()
Standard constructor. Takes no arguments.
=back
=over 4
=item get_data_short("STOCK_SHORTNAME")
Retrieves information about a stock based on the supplied shortname.
It returns this information as an array where the elements are:
0 - Full name of company
1 - The increase/decrease of the stock in SEK
2 - The increase/decrease of the stock in %
3 - The buy share price
4 - The sell share price
5 - The latest share price
6 - The highest share price
7 - The lowest share price
8 - The share volume
9 - The company's turnover
10 - Time of last update
11 - The short name of the company
If no stock where found, it returns undef.
=back
=over 4
=item get_stocklist(0-5)
Retrieves a whole list of stocks in an array of arrays structure.
Which list it returns is chosen by the argument given to it.
The arguments are:
0 - A-listan samtliga
1 - A-listan mest omsatta
2 - A-listan övriga
3 - O-listan samtliga
4 - O-listan Attract40
5 - O-listan övriga
The arrays in the array is shaped like the one that
gets returned by get_data_short(), since they both use the
same function for retrieving the data.
It dies if it can't succeed.
=back
=head1 EXAMPLES
$stock = Finance::SE::OMX->new;
@bol = $stock->get_data_short("BOL");
print "$bol[0]\t\t$bol[5]\t\t$bol[10]\n";
=head1 BUGS
If you find any bugs, please notify me somehow and I'll fix it.
If OMX changes their website, then this module may need a
serious update.
=head1 AUTHOR
Sebastian Cato
=head1 COPYRIGHT
Copyright (c) 2006, Sebastian Cato. All Rights Reserved.
This program is free software. You may copy and/or
redistribute it under the same terms as Perl itself.
=cut
|