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&region=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 )