App-Chart
view release on metacpan or search on metacpan
misc/t-yahoo.pl view on Meta::CPAN
}
{
# v1 info parse
my $filename = "$ENV{HOME}/chart/samples/yahoo/v1-info-CSCO.json";
$filename = "$ENV{HOME}/chart/samples/yahoo/v1-info-ORD.AX.json";
$filename =~ /v1-info-([A-Z.]+)\.json/ or die;
my $symbol = $1;
require HTTP::Response;
my $resp = HTTP::Response->new(200,'OK');
$resp->content(slurp($filename));
$resp->content_type('application/json;charset=utf-8');
my $h = App::Chart::Yahoo::info_parse ($symbol,$resp);
print Dumper ($h);
# App::Chart::Download::write_daily_group ($h);
exit 0;
}
{
# v8 parse
my $filename = "$ENV{HOME}/chart/samples/yahoo/TSCO.L-2017.json";
$filename = "$ENV{HOME}/chart/samples/yahoo/SCT.AX-split2024.json";
$filename = "$ENV{HOME}/chart/samples/yahoo/BHP.AX-2024div.json";
$filename = "$ENV{HOME}/chart/samples/yahoo/NKLA.MX-split.json";
$filename =~ m{.*/(.*)-} or die;
my $symbol = $1;
my $content = slurp ($filename);
require JSON;
my $href = JSON::decode_json($content);
# ### $href
my $result = $href->{'chart'}->{'result'}->[0];
my $meta = $result->{'meta'};
my $timestamps = $result->{'timestamp'};
my $quote= $result->{'indicators'}->{'quote'}->[0];
my $events = $result->{'events'};
my $dividends = $events->{'dividends'};
my $splits = $events->{'splits'};
### $meta
### $quote
### $timestamps
### $events
# symbol
# priceHint
# exchangeName
# currency
# gmtoffset
require HTTP::Response;
my $resp = HTTP::Response->new();
$resp->content($content);
my $h = App::Chart::Yahoo::daily_parse ($symbol, $resp);
App::Chart::Download::crunch_h ($h);
print Dumper(\$h);
exit 0;
}
{
# cookie
# cf Finance::Quote::YahooJSON
# https://www.yahoo.com/
# Set-Cookie: RRC=st=1725958300186.3&cnt=1; path=/; domain=.www.yahoo.com; HttpOnly
# Redirect to https://au.yahoo.com/?p=us
#
# https://finance.yahoo.com/quote/IBM/history/?p=IBM
# no cookie
my $url = 'https://www.yahoo.com/';
$url = 'https://finance.yahoo.com';
$url = 'https://finance.yahoo.com/quote/IBM/history/?p=IBM';
$App::Chart::option{'verbose'} = 2;
require HTTP::Cookies;
my $jar = HTTP::Cookies->new;
my $user_agent = 'Mozilla/5.0';
my $resp = App::Chart::Download->get
($url,
user_agent => $user_agent,
cookie_jar => $jar,
redirect_ok => 0);
### headers: $resp->headers->as_string
print "jar string: ",$jar->as_string,"\n";
print "content:\n";
my $content = $resp->decoded_content (raise_error => 1, charset => 'none');
print $content,"\n";
exit 0;
}
{
$App::Chart::option{'verbose'} = 2;
my $h = App::Chart::Yahoo::cookie_and_crumb_data();
print Dumper($h);
exit 0;
}
{
# v8 dividends ahead
# https://www.intelligentinvestor.com.au/investment-tools/shares/dividends
# https://query2.finance.yahoo.com/v8/finance/chart/IBM?formatted=true&lang=en-US®ion=US&period1=1487372400&period2=1495058400&interval=1d&events=div%7Csplit&corsDomain=finance.yahoo.com
my $symbol = 'NKLA.MX';
$symbol = 'WBCPK.AX';
my $tdate = App::Chart::Yahoo::daily_available_tdate ($symbol);
my $lo_timet = App::Chart::Yahoo::tdate_to_unix($tdate - 30);
my $hi_timet = App::Chart::Yahoo::tdate_to_unix($tdate + 100);
my $url = "https://query1.finance.yahoo.com/v8/finance/chart/"
. URI::Escape::uri_escape($symbol)
."?period1=$lo_timet"
."&period2=$hi_timet"
."&interval=1d"
."&events=". URI::Escape::uri_escape('div|split')
."&close=unadjusted";
print "$url\n";
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;
}
{
# v8 dates, as of June 2024
my $t = 1504013400; # IBM
my $tz = "America/New_York";
my $gmtoff = -14400;
$t = 1504051200; # BHP.AX
$tz = "Australia/Sydney";
$gmtoff = 36000;
misc/t-yahoo.pl view on Meta::CPAN
prefer_decimals => 2,
date_format => 'ymd',
};
App::Chart::Yahoo::daily_parse
($symbol, $resp, $h, App::Chart::ymd_to_tdate_floor(2017,9,7));
print Dumper(\$h);
exit 0;
# (chart-quote "NAB.AX")
# (chart-latest "NAB.AX" 'last)
}
{
# latest_parse() for quotes
my $symbol = 'NAB.AX';
my $filename = "$ENV{HOME}/chart/samples/yahoo/daily.csv";
require HTTP::Response;
my $resp = HTTP::Response->new();
my $content = slurp ($filename);
$resp->content($content);
$resp->content_type('text/html; charset=utf-8');
my $h = App::Chart::Yahoo::latest_parse
($symbol, $resp, App::Chart::ymd_to_tdate_floor(2017,9,1));
print Dumper(\$h);
# App::Chart::Download::write_latest_group ($h);
exit 0;
# (chart-quote "NAB.AX")
# (chart-latest "NAB.AX" 'last)
}
{
# 13:30
# -offset is 17:30
# +offset is 9:30
my $offset = -14400;
print POSIX::asctime(POSIX::gmtime(1504099800 + $offset));
print POSIX::asctime(POSIX::gmtime(1504272600 + $offset));
# 14:32
# +offset is 14:32
$offset = 36000;
print POSIX::asctime(POSIX::gmtime(1504845136 + $offset));
exit 0;
}
{
# kill the crumb
App::Chart::Database->write_extra ('', 'yahoo-daily-cookies', undef);
exit;
}
{
# cf
# https://gist.github.com/Mister-Meeseeks/df985c5e3abb1be88004319f11ebe3fb/raw/a6541d2a7cda6376ad0fc20fecd3388c7ada49ca/pullYahoo.sh
#
# "CrumbStore":{"crumb":"pwrULw9Alv\u002F"}
require File::Slurp;
require HTTP::Cookies;
require App::Chart::UserAgent;
my $symbol = 'GXY.AX';
my $ua = App::Chart::UserAgent->instance;
my $jar = HTTP::Cookies->new;
$ua->cookie_jar ($jar);
$ua->add_handler (request_send => sub {
my ($request, $ua, $headers) = @_;
print $request->method," ",$request->uri,"\n";
print $request->headers->as_string,"\n";
return;
});
my $crumb;
if (0) {
my $url = "https://finance.yahoo.com/quote/$symbol/history?p=$symbol";
my $resp = $ua->get($url);
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/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;
}
{
( run in 0.524 second using v1.01-cache-2.11-cpan-39bf76dae61 )