App-Chart
view release on metacpan or search on metacpan
lib/App/Chart/Suffix/LME.pm view on Meta::CPAN
# London Metal Exchange (LME) setups.
# Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013, 2016 Kevin Ryde
# This file is part of Chart.
#
# Chart 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 3, or (at your option) any later version.
#
# Chart 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 Chart. If not, see <http://www.gnu.org/licenses/>.
package App::Chart::Suffix::LME;
use 5.010;
use strict;
use warnings;
use Carp;
use Date::Calc;
use Date::Parse;
use File::Temp;
use File::Basename;
use HTML::Form;
use List::Util;
use File::Slurp;
use URI::Escape;
use Locale::TextDomain ('App-Chart');
use App::Chart;
use App::Chart::Database;
use App::Chart::Download;
use App::Chart::DownloadHandler;
use App::Chart::Sympred;
use App::Chart::Timebase::Months;
use App::Chart::TZ;
use App::Chart::Weblink;
use constant DEBUG => 0;
# As of July 2007, in https requests to secure.lme.com for the daily metals
# prices it seems essential to use http/1.1 persistent connections. If
# "Connection: close" is requested by the client something fishy happens and
# the connection hangs at about byte 48887 out of about 62110 (waiting for
# the last 16kbyte tls packet). This is with either gnutls or openssl and a
# trace with gnutls shows it just stops sending, though the TCP connection
# remains up. Either the default http/1.1 persistence (no Connection header
# at all) or the compatibility "Connection: keep-alive" style seems to make
# it better. Presumably it's something buggy in the server (Microsoft-IIS
# 6.0).
my $pred = App::Chart::Sympred::Suffix->new ('.LME');
App::Chart::TZ->london->setup_for_symbol ($pred);
# App::Chart::setup_source_help
# ($pred, __p('manual-node','London Metal Exchange'));
my %polypropylene_hash = ('PP'=>1,'PA'=>1,'PE'=>1,'PN'=>1);
my %linearlow_hash = ('LP'=>1,'LA'=>1,'LE'=>1,'LN'=>1);
my %steel_hash = ('FM'=>1,'FF'=>1);
sub type {
my ($symbol) = @_;
my $commodity = App::Chart::symbol_commodity ($symbol);
if ($polypropylene_hash{$commodity} || $linearlow_hash{$commodity}) {
return 'plastics';
}
if ($steel_hash{$commodity}) {
return 'steels';
}
return 'metals';
}
#-----------------------------------------------------------------------------
# weblink - commodity pages
App::Chart::Weblink->new
(pred => $pred,
name => __('LME _Commodity Page'),
desc => __('Open web browser at the London Metal Exchange page for this commodity'),
proc => sub {
my ($symbol) = @_;
if ($symbol =~ /^AA/) { return 'http://www.lme.co.uk/aluminiumalloy.asp' }
if ($symbol =~ /^AH/) { return 'http://www.lme.co.uk/aluminium.asp' }
if ($symbol =~ /^CA/) { return 'http://www.lme.co.uk/copper.asp' }
if ($symbol =~ /^NA/) { return 'http://www.lme.co.uk/nasaac.asp' }
if ($symbol =~ /^NI/) { return 'http://www.lme.co.uk/nickel.asp' }
if ($symbol =~ /^PB/) { return 'http://www.lme.co.uk/lead.asp' }
if ($symbol =~ /^SN/) { return 'http://www.lme.co.uk/tin.asp' }
if ($symbol =~ /^ZS/) { return 'http://www.lme.co.uk/zinc.asp' }
if ($symbol =~ /^F/) { return 'http://www.lme.co.uk/steel.asp' }
if ($symbol =~ /^P/) { return 'http://www.lme.co.uk/plastics.asp' }
if ($symbol =~ /^L/) { return 'http://www.lme.co.uk/plastics.asp' }
return undef;
});
#-----------------------------------------------------------------------------
# HTTP::Cookies extras
# $jar is a HTTP::Cookies object, read $str into it with $jar->load (which
# would normally read from a file)
#
sub http_cookies_set_string {
my ($jar, $str) = @_;
my $fh = File::Temp->new (TEMPLATE => 'chart-cookie-jar-XXXXXX',
( run in 1.013 second using v1.01-cache-2.11-cpan-df04353d9ac )