App-Chart
view release on metacpan or search on metacpan
misc/t-yahoo.pl view on Meta::CPAN
# "start":1504828800,
# "gmtoffset":36000},
# "post":{"timezone":"AEST",
# "end":1504851120,
# "start":1504850400,
# "gmtoffset":36000}},
# "dataGranularity":"1d",
# "validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},
# "timestamp":[1504483200,1504569600,1504656000,1504742400,1504845136],
# "indicators":
# {"quote":
# [{"high":[30.385000228881836,30.399999618530273,30.209999084472656,30.3799991607666,30.170000076293945],
# "low":[30.15999984741211,30.100000381469727,29.950000762939453,30.0,29.829999923706055],
# "close":[30.260000228881836,30.350000381469727,30.149999618530273,30.170000076293945,29.885000228881836],
# "open":[30.270000457763672,30.290000915527344,30.059999465942383,30.299999237060547,30.170000076293945],
# "volume":[2059508,2240849,4332445,3451099,2144174]}],
# "unadjclose":[{"unadjclose":[30.260000228881836,30.350000381469727,30.149999618530273,30.170000076293945,29.885000228881836]}],
# "adjclose":[{"adjclose":[30.260000228881836,30.350000381469727,30.149999618530273,30.170000076293945,29.885000228881836]}]}}],
# "error":null}}
my $symbol;
$symbol = 'NAB.AX';
$symbol = 'XAUUSD=X';
my $end = time();
my $start = $end - 86400*30;
# # GXY.AX split 22 May 17
# $symbol = 'GXY.AX';
# require Time::Local;
# $start = Time::Local::timegm_modern (0,0,0, 16, 3-1, 2017);
# $end = Time::Local::timegm_modern (0,0,0, 20, 3-1, 2017);
print POSIX::asctime(POSIX::gmtime($start));
print POSIX::asctime(POSIX::gmtime($end));
my $events;
$events = "div%7Csplit";
$events = "split";
$events = "div";
$events = "history";
$events = "history|split";
my $url = "https://query2.finance.yahoo.com/v8/finance/chart/$symbol?formatted=true&lang=en-US®ion=US&period1=$start&period2=$end&interval=1d&events=$events&corsDomain=finance.yahoo.com";
require App::Chart::UserAgent;
my $ua = App::Chart::UserAgent->instance;
my $resp = $ua->get($url);
my $content = $resp->decoded_content (raise_error => 1, charset => 'none');
File::Slurp::write_file('/tmp/z', {err_mode=>'carp'}, $content);
$content = $resp->decoded_content (raise_error => 1);
print $content;
exit 0;
}
{
# v7 in June 2024
# https://finance.yahoo.com/quote/AMP.AX/history?p=AMP.AX
# redirect to:
# https://finance.yahoo.com/quote/AMP.AX/history/?p=AMP.AX
# 404
exit 0;
}
{
require HTTP::Response;
my $filename = "$ENV{HOME}/chart/samples/yahoo/history?p=BHP.AX";
my $resp = HTTP::Response->new();
my $content = slurp ($filename);
$resp->content($content);
$resp->content_type('text/html; charset=utf-8');
my @ret = App::Chart::Yahoo::daily_cookie_parse($content,$resp);
### @ret
exit 0;
}
{
# Date,Dividends
# 2014-05-14,1.41429
# 2015-05-15,1.41428
# 2013-05-30,1.32857
# 2013-11-06,1.38571
# 2015-11-04,1.4143
# 2016-05-17,1.41428
# 2017-05-16,1.4143
# 2014-11-06,1.4143
# 2016-11-03,1.4143
# 2012-11-08,1.28571
# Date,Open,High,Low,Close,Adj Close,Volume
# 2017-09-07,30.299999,30.379999,30.000000,30.170000,30.170000,3451099
# 2017-09-08,30.170000,30.170000,29.830000,29.889999,29.889999,2129470
# NAB.AX Mon 6 Nov 2017 gives
# Date,Open,High,Low,Close,Adj Close,Volume
# 2017-11-01,31.889999,32.389999,31.809999,31.950001,31.950001,12516393
# 2017-11-02,32.000000,32.009998,31.610001,31.780001,31.780001,7329859
# 2017-11-05,31.830000,31.830000,31.610001,31.620001,31.620001,736485
# which is Thu 2 Nov and Sun 5 Nov, being 9:30am or some such in GMT
my $symbol;
$symbol = 'NOSUCH.AX';
$symbol = 'NAB.AX';
$symbol = 'FBU.NZ';
my $events;
$events = 'div';
$events = 'split|history';
$events = 'split';
my $data = App::Chart::Yahoo::daily_cookie_data($symbol);
### $data
my $crumb = $data->{'crumb'};
require App::Chart::UserAgent;
my $ua = App::Chart::UserAgent->instance;
my $jar = App::Chart::Yahoo::http_cookies_from_string($data->{'cookies'} // '');
$ua->cookie_jar ($jar);
my $end = time() + 86400 - 86400*90;
my $start = $end - 86400*5; # *365
# GXY.AX split 22 May 17
misc/t-yahoo.pl view on Meta::CPAN
my $content = $resp->decoded_content (raise_error => 1, charset => 'none');
File::Slurp::write_file('/tmp/x', {err_mode=>'carp'}, $content);
$content = $resp->decoded_content (raise_error => 1);
$content =~ /"CrumbStore":\{"crumb":"([^"]*)"}/;
$crumb = $1;
print "crumb raw $crumb\n";
$crumb = App::Chart::Yahoo::javascript_string_unquote($crumb);
$jar->save('/tmp/cookie3.txt');
} else {
$crumb = 'GmF7zbT8OWV';
$jar->load('/tmp/cookie3.txt');
}
print "crumb decoded $crumb\n";
print "cookies\n";
print $jar->as_string;
print "\n";
my $events;
$events = 'history';
$events = 'div';
$events = 'split,history';
print "now CSV\n";
print "\n";
my $end = time();
my $start = $end - 86400*5;
my $url = "https://query1.finance.yahoo.com/v7/finance/download/$symbol?period1=$start&period2=$end&interval=1d&events=$events&crumb=$crumb";
print "$url\n";
my $resp = $ua->get($url);
print "\n";
my $resp_size = length($resp->as_string);
print "size $resp_size\n";
print $resp->status_line,"\n";
print $resp->headers->as_string;
my $content = $resp->decoded_content (raise_error => 1, charset => 'none');
File::Slurp::write_file('/tmp/y', {err_mode=>'carp'}, $content);
$content = $resp->decoded_content (raise_error => 1);
print $content;
exit 0;
}
{
# timegm 00:00:00 AAPL last day missed, TSCO.L ok, BHP.AX ok
# end +86399 AAPL ok, TSCO.L and BHP.AX extra day
my $symbol;
$symbol = 'BHP.AX';
$symbol = 'AAPL';
$symbol = 'TSCO.L';
$symbol = 'WPL.AX';
$symbol = 'WFD.AX';
$App::Chart::option{'verbose'} = 2;
my ($url,$jar) = App::Chart::Yahoo::daily_url_and_cookiejar
($symbol,
App::Chart::ymd_to_tdate_floor (2017,8,15),
App::Chart::ymd_to_tdate_floor (2017,9,8));
### $url
### jar: $jar->as_string
my $resp = App::Chart::Download->get($url,
cookie_jar => $jar,
allow_404 => 1);
my $resp_size = length($resp->as_string);
print "size $resp_size\n";
print $resp->status_line,"\n";
print $resp->headers->as_string;
my $content = $resp->decoded_content (raise_error => 1);
print $content;
print "\n";
exit 0;
}
{
# App::Chart::Database->write_extra ('', 'yahoo-daily-cookies', undef);
$App::Chart::option{'verbose'} = 2;
my ($url,$jar) = App::Chart::Yahoo::daily_url_and_cookiejar
('BHP.AX',
App::Chart::ymd_to_tdate_floor (2017,8,20),
App::Chart::ymd_to_tdate_floor (2017,9,4));
### $url
### jar: $jar->as_string
exit 0;
}
{
$App::Chart::option{'verbose'} = 1;
my $h = App::Chart::Yahoo::daily_cookie_data('AMP.AX');
### $h
exit 0;
}
#------------------------------------------------------------------------------
{
require HTTP::Response;
require App::Chart::Suffix::AX;
my $resp = HTTP::Response->new();
# my $filename = <~/chart/samples/yahoo/latest.csv>;
my $filename = <~/chart/samples/yahoo/latest-C.csv>;
# my $filename = "/tmp/d";
my $content = slurp ($filename);
$resp->content($content);
$resp->content_type('text/plain');
my $h = App::Chart::Yahoo::latest_parse ($resp);
print Dumper(\$h);
App::Chart::Download::write_latest_group ($h);
exit 0;
}
{
require HTTP::Response;
my $resp = HTTP::Response->new();
my $content = slurp ("$ENV{'HOME'}/chart/samples/yahoo/latest-C.csv");
$resp->content($content);
my $h = App::Chart::Yahoo::latest_parse($resp);
print $h;
exit 0;
}
{
( run in 0.650 second using v1.01-cache-2.11-cpan-39bf76dae61 )