pjs/webtools/mozbot/BotModules/Stocks.bm

59 строки
1.9 KiB
Plaintext

# -*- Mode: perl; tab-width: 4; indent-tabs-mode: nil; -*-
################################
# Stocks Module #
################################
package BotModules::Stocks;
use vars qw(@ISA);
@ISA = qw(BotModules);
1;
# XXX Per-channel configurable notification of stock changes
# XXX Currency
# XXX Non-US markets
sub Help {
my $self = shift;
my ($event) = @_;
return {
'' => 'This module gets stock quotes. Ask me a ticker symbol, I will retrieve the quote.',
'stock' => 'Call this command with a ticker symbol to get the current stock price and change. Syntax: stock FBAR',
};
}
sub Told {
my $self = shift;
my ($event, $message) = @_;
if ($message =~ /^\s*stocks?\s+(.+?)\s*$/osi) {
$self->getURI($event, "http://quote.yahoo.com/d/quotes.csv?f=sl1d1t1c1ohgv&e=.csv&s=$1", $1);
} else {
return $self->SUPER::Told(@_);
}
return 0; # we've dealt with it, no need to do anything else.
}
sub GotURI {
my $self = shift;
my ($event, $uri, $output, $stock) = @_;
$self->debug($output);
my $message = '';
if ($event->{'channel'} ne '') {
$message .= "$event->{'from'}: ";
}
# The data currently listed in this format are: ticker symbol, last price, date, time, change, open price, daily high, daily low, and volume.
# -- http://help.yahoo.com/help/us/fin/quote/quote-05.html
my @stockValues = split(',', $output);
foreach my $part (@stockValues) {
$part =~ s/"//gos; # remove all quotes. Bit of a hack, but... XXX
}
if ($stockValues[4] > 0) {
$stockValues[4] = 'up ' . (0+$stockValues[4]);
} elsif ($stockValues[4] < 0) {
$stockValues[4] = 'down ' . (0-$stockValues[4]);
} else {
$stockValues[4] = 'no change';
}
$message .= "Stock quote for $stockValues[0]: $stockValues[1], $stockValues[4] (low: $stockValues[7], high: $stockValues[6])";
$self->say($event, $message);
}