File Coverage

blib/lib/Finance/NASDAQ/Markets.pm
Criterion Covered Total %
statement 16 18 88.8
branch n/a
condition n/a
subroutine 6 6 100.0
pod n/a
total 22 24 91.6


line stmt bran cond sub pod time code
1             package Finance::NASDAQ::Markets;
2              
3 1     1   30637 use 5.012004;
  1         5  
  1         45  
4 1     1   8 use strict;
  1         1  
  1         48  
5 1     1   6 use warnings;
  1         7  
  1         44  
6              
7              
8             # Preloaded methods go here.
9 1     1   998 use LWP::Simple qw($ua get);
  1         359774  
  1         10  
10             $ua->timeout(15);
11 1     1   3283 use HTML::TableExtract;
  1         25491  
  1         10  
12 1     1   629 use HTML::TableContentParser;
  0            
  0            
13              
14             require Exporter;
15              
16             our @ISA = qw(Exporter);
17              
18             # Items to export into callers namespace by default. Note: do not export
19             # names by default without a very good reason. Use EXPORT_OK instead.
20             # Do not simply export all your public functions/methods/constants.
21              
22             # This allows declaration use Finance::NASDAQ::Markets ':all';
23             # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
24             # will save memory.
25             our %EXPORT_TAGS = ( 'all' => [ qw(
26            
27             ) ] );
28              
29             our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
30              
31             our @EXPORT = qw(
32             index sector
33             );
34              
35             our $VERSION = '0.01';
36              
37              
38             #http://quotes.nasdaq.com/aspx/marketindices.aspx
39             #http://quotes.nasdaq.com/aspx/sectorindices.aspx
40              
41             sub sector {
42             return getdata("http://quotes.nasdaq.com/aspx/sectorindices.aspx");
43             }
44             sub index {
45             return getdata("http://quotes.nasdaq.com/aspx/marketindices.aspx");
46             }
47              
48             sub getdata {
49             my ($url) = @_;
50             my @ids = qw/_LastSale _NetChange _PctChange _Volume/;
51             my $content;
52             my @set=() ;
53             $content = get $url;
54            
55             warn "NASDAQ is down" and return unless defined $content;
56              
57              
58             my $p = HTML::TableContentParser->new();
59             my @check=();
60             my $tables = $p->parse($content);
61             for my $t (@$tables) {
62             for my $r (@{$t->{rows}}) {
63             # print "Row: ";
64             for my $c (@{$r->{cells}}) {
65            
66             next unless($c->{data});
67            
68             if($c->{data}=~/redarrow/){
69             push @check,"-";
70             }
71             if($c->{data}=~/greenarrow/){
72             push @check,"+";
73             }
74             }
75             #print "\n";
76             }
77             }
78              
79            
80             my $te = HTML::TableExtract->new( headers => [("Symbol", "Name", "Index Value","Change Net / %", "High", "Low")] );
81             $te->parse($content);
82            
83             my $i=0;
84             foreach my $ts ($te->tables) {
85            
86             foreach my $row ($ts->rows) {
87             #print Dumper $ts;
88              
89              
90              
91             map {if(defined($_)){ $_=~s/(InfoQuote|Charting)//g; $_=_trim($_)}} @$row;
92            
93             if(defined($check[$i])) {
94            
95             if($check[$i] =~ /-/){
96             push @$row,'down';
97             }elsif($check[$i] =~/\+/){
98             push @$row,'up';
99             }
100            
101            
102             $row->[3] =~s/[^\0-\x80][^\0-\x80]/ $check[$i]/g;
103            
104            
105             #print Dumper split("",$row->[3]);
106            
107             push @set,[@$row];
108             $i++;
109             }
110             }
111              
112             }
113              
114              
115            
116             return @set;
117              
118             }
119              
120              
121              
122             sub _trim
123             {
124             my $string = shift;
125             $string = "" unless $string;
126             $string =~ s/^\s+//;
127             $string =~ s/\s+$//;
128             $string =~ s/\t//;
129             $string =~ s/^\s//;
130             return $string;
131             }
132              
133             package main;
134             use Data::Dumper;
135             my @idx = Finance::NASDAQ::Markets::index();
136             my @sec = Finance::NASDAQ::Markets::sector();
137             print Dumper [@idx,@sec];
138            
139            
140             1;
141             __END__