Last active
May 3, 2024 16:30
-
-
Save bpschuck/7c19064bccdf903de0977e59647813c4 to your computer and use it in GitHub Desktop.
FinanceQuote
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Gist for Finance::Quote | |
Test code snippets and other miscellaneous files. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl -w | |
# vi: set ts=2 sw=2 ic noai showmode showmatch: | |
# This program 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 2 of the License, or | |
# (at your option) any later version. | |
# | |
# This program 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 this program; if not, write to the Free Software | |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
# 02110-1301, USA | |
# Copyright (C) 2023, Bruce Schuck <bschuck@asgard-systems.com> | |
package Finance::Quote::CurrencyRates::YahooJSON; | |
use strict; | |
use warnings; | |
use constant DEBUG => $ENV{DEBUG}; | |
use if DEBUG, 'Smart::Comments'; | |
use JSON; | |
# VERSION | |
my $YIND_URL_HEAD = 'https://query2.finance.yahoo.com/v11/finance/quoteSummary/?symbols='; | |
my $YIND_URL_TAIL = '&modules=price'; | |
my $browser = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'; | |
sub new | |
{ | |
my $self = shift; | |
my $class = ref($self) || $self; | |
my $this = {}; | |
bless $this, $class; | |
my $args = shift; | |
### YahooJSON->new args : $args | |
return $this; | |
} | |
sub multipliers | |
{ | |
my ($this, $ua, $from, $to) = @_; | |
my $json_data; | |
my $rate; | |
my $cookie_jar = HTTP::Cookies->new(); | |
$ua->cookie_jar( $cookie_jar ); | |
$ua->agent($browser); | |
# get Yahoo cookies that are needed for crumb | |
my $reply = $ua->get('https://login.yahoo.com'); | |
# get the crumb that corrosponds to cookies retrieved | |
$reply = $ua->get('https://query2.finance.yahoo.com/v1/test/getcrumb'); | |
my $crumb = $reply->content; | |
$reply = $ua->get($YIND_URL_HEAD | |
. ${from} | |
. ${to} | |
. '%3DX' | |
. '&crumb=' . $crumb | |
. $YIND_URL_TAIL); | |
### HTTP Status: $reply->code | |
return unless ($reply->code == 200); | |
my $body = $reply->content; | |
$json_data = JSON::decode_json $body; | |
### JSON: $json_data | |
if ( !$json_data || !$json_data->{'quoteSummary'}->{'result'}->[0]->{'price'}->{'regularMarketPrice'}{'raw'} ) { | |
return; | |
} | |
$rate = | |
$json_data->{'quoteSummary'}->{'result'}->[0]->{'price'}->{'regularMarketPrice'}{'raw'}; | |
### Rate from JSON: $rate | |
return unless $rate + 0; | |
# For small rates, request the inverse | |
if ($rate < 0.001) { | |
### Rate is too small, requesting inverse : $rate | |
my ($a, $b) = $this->multipliers($ua, $to, $from); | |
return ($b, $a); | |
} | |
return (1.0, $rate); | |
} | |
1; | |
=head1 NAME | |
Finance::Quote::CurrencyRates::YahooJSON - Obtain currency rates from | |
https://query2.finance.yahoo.com/v11/finance/quoteSummary/...?modules=price | |
=head1 SYNOPSIS | |
use Finance::Quote; | |
$q = Finance::Quote->new(currency_rates => {order => ['YahooJSON']}); | |
$value = $q->currency('18.99 EUR', 'USD'); | |
=head1 DESCRIPTION | |
This module fetches currency rates from | |
https://query2.finance.yahoo.com/v11/finance/quoteSummary/...?modules=price | |
provides data to Finance::Quote to convert the first argument to the equivalent | |
value in the currency indicated by the second argument. | |
This module is not the default currency conversion module for a Finance::Quote | |
object. | |
=head1 Terms & Conditions | |
Use of https://query2.finance.yahoo.com/v11/finance/quoteSummary/...?modules=price is | |
governed by any terms & conditions of that site. | |
Finance::Quote is released under the GNU General Public License, version 2, | |
which explicitly carries a "No Warranty" clause. | |
=cut |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl -w | |
# vi: set ts=2 sw=2 ic noai showmode showmatch: | |
# This program 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 2 of the License, or | |
# (at your option) any later version. | |
# | |
# This program 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 this program; if not, write to the Free Software | |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
# 02110-1301, USA | |
# Copyright (C) 2023, Bruce Schuck <bschuck@asgard-systems.com> | |
# Changes: | |
# 2024-04-13 - Changed to use | |
# https://query1.finance.yahoo.com/v8/finance/chart/ | |
package Finance::Quote::CurrencyRates::YahooJSON; | |
use strict; | |
use warnings; | |
use constant DEBUG => $ENV{DEBUG}; | |
use if DEBUG, 'Smart::Comments'; | |
use JSON; | |
# VERSION | |
my $YIND_URL_HEAD = 'https://query1.finance.yahoo.com/v8/finance/chart/'; | |
my $YIND_URL_TAIL = '?metrics=high&interval=1d&range=1d'; | |
sub new | |
{ | |
my $self = shift; | |
my $class = ref($self) || $self; | |
my $this = {}; | |
bless $this, $class; | |
my $args = shift; | |
### YahooJSON->new args : $args | |
return $this; | |
} | |
sub multipliers | |
{ | |
my ($this, $ua, $from, $to) = @_; | |
my $json_data; | |
my $rate; | |
my $reply = $ua->get($YIND_URL_HEAD | |
. ${from} | |
. ${to} | |
. '%3DX' | |
. $YIND_URL_TAIL); | |
### HTTP Status: $reply->code | |
return unless ($reply->code == 200); | |
my $body = $reply->content; | |
$json_data = JSON::decode_json $body; | |
### JSON: $json_data | |
if ( !$json_data || !$json_data->{'chart'}->{'result'}->[0]->{'meta'}->{'regularMarketPrice'} ) { | |
return; | |
} | |
$rate = | |
$json_data->{'chart'}->{'result'}->[0]->{'meta'}->{'regularMarketPrice'}; | |
### Rate from JSON: $rate | |
return unless $rate + 0; | |
# For small rates, request the inverse | |
if ($rate < 0.001) { | |
### Rate is too small, requesting inverse : $rate | |
my ($a, $b) = $this->multipliers($ua, $to, $from); | |
return ($b, $a); | |
} | |
return (1.0, $rate); | |
} | |
1; | |
=head1 NAME | |
Finance::Quote::CurrencyRates::YahooJSON - Obtain currency rates from | |
https://query2.finance.yahoo.com/v11/finance/quoteSummary/...?modules=price | |
=head1 SYNOPSIS | |
use Finance::Quote; | |
$q = Finance::Quote->new(currency_rates => {order => ['YahooJSON']}); | |
$value = $q->currency('18.99 EUR', 'USD'); | |
=head1 DESCRIPTION | |
This module fetches currency rates from | |
https://query2.finance.yahoo.com/v11/finance/quoteSummary/...?modules=price | |
provides data to Finance::Quote to convert the first argument to the equivalent | |
value in the currency indicated by the second argument. | |
This module is not the default currency conversion module for a Finance::Quote | |
object. | |
=head1 Terms & Conditions | |
Use of https://query2.finance.yahoo.com/v11/finance/quoteSummary/...?modules=price is | |
governed by any terms & conditions of that site. | |
Finance::Quote is released under the GNU General Public License, version 2, | |
which explicitly carries a "No Warranty" clause. | |
=cut |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl -w | |
# vi: set ts=2 sw=2 noai ic showmode showmatch: | |
# | |
# Copyright (C) 2023, Bruce Schuck <bschuck@asgard-systems.com> | |
# | |
# This program 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 2 of the License, or | |
# (at your option) any later version. | |
# | |
# This program 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 this program; if not, write to the Free Software | |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
# 02110-1301, USA | |
# | |
package Finance::Quote::FooBar; | |
use strict; | |
use warnings; | |
use Encode qw(decode); | |
use HTTP::Request::Common; | |
use constant DEBUG => $ENV{DEBUG}; | |
use if DEBUG, 'Smart::Comments', '###'; | |
# VERSION | |
my $BVB_URL = 'https://bvb.ro/FinancialInstruments/Details/FinancialInstrumentsDetails.aspx?s='; | |
sub methods { | |
return (bvb => \&foobar, | |
romania => \&foobar, | |
tradeville => \&foobar, | |
europe => \&foobar); | |
} | |
our @labels = qw/symbol name open high low last bid ask date currency method/; | |
sub labels { | |
return (foobar => \@labels, | |
romania => \@labels, | |
tradeville => \@labels, | |
europe => \@labels); | |
} | |
sub foobar { | |
my $quoter = shift; | |
my @stocks = @_; | |
my (%info, $tree, $table, $pricetable, $url, $reply); | |
my $ua = $quoter->user_agent(); | |
foreach my $stock (@stocks) { | |
$url = $BVB_URL . $stock; | |
$reply = $ua->request( GET $url); | |
my $code = $reply->code; | |
my $desc = HTTP::Status::status_message($code); | |
my $headers = $reply->headers_as_string; | |
my $body = decode('UTF-8', $reply->content); | |
### Body: $body | |
my ($name, $bid, $ask, $last, $open, $high, $low, $date); | |
$info{ $stock, "symbol" } = $stock; | |
if ( $code == 200 ) { | |
# Use HTML::TreeBuilder to parse HTML in $body | |
$tree = HTML::TreeBuilder->new; | |
if ($tree->parse($body)) { | |
$tree->eof; | |
if ( $tree->look_down(_tag => 'div', id => 'ctl00_body_divNoData') ) { | |
$info{ $stock, "success" } = 0; | |
$info{ $stock, "errormsg" } = | |
"Error retrieving quote for $stock. No data returned"; | |
next; | |
} | |
$name = $tree->look_down(_tag => 'h2', class => qr/^mBot0 large textStyled/)->as_text; | |
$info{ $stock, 'success' } = 1; | |
($info{ $stock, 'name' } = $name) =~ s/^\s+|\s+$//g ; | |
$info{ $stock, 'currency' } = 'RON'; | |
$info{ $stock, 'method' } = 'bvb'; | |
$table = $tree->look_down(_tag => 'table', id => qr/^ctl00_body_ctl02_PricesControl_dvCPrices/)->as_HTML; | |
$pricetable = HTML::TableExtract->new(); | |
$pricetable->parse($table); | |
foreach my $row ($pricetable->rows) { | |
if ( @$row[0] =~ m/Ask$/ ) { | |
($bid, $ask) = @$row[1] =~ m|^\s+([\d\.]+)\s+\/\s+([\d\.]+)|; | |
$info{ $stock, 'bid' } = $bid; | |
$info{ $stock, 'ask' } = $ask; | |
} | |
elsif ( @$row[0] =~ m|^Date/time| ) { | |
($date) = @$row[1] =~ m|^([\d/]+)\s|; | |
$quoter->store_date(\%info, $stock, {usdate => $1}) if $date =~ m|([0-9]{1,2}/[0-9]{2}/[0-9]{4})|; | |
} | |
elsif ( @$row[0] =~ m|^Last price| ) { | |
($last) = @$row[1] =~ m|^([\d\.]+)|; | |
$info{ $stock, 'last' } = $last; | |
} | |
elsif ( @$row[0] =~ m|^Open price| ) { | |
($open) = @$row[1] =~ m|^([\d\.]+)|; | |
$info{ $stock, 'open' } = $open; | |
} | |
elsif ( @$row[0] =~ m|^High price| ) { | |
($high) = @$row[1] =~ m|^([\d\.]+)|; | |
$info{ $stock, 'high' } = $high; | |
} | |
elsif ( @$row[0] =~ m|^Low price| ) { | |
($low) = @$row[1] =~ m|^([\d\.]+)|; | |
$info{ $stock, 'low' } = $low; | |
} | |
} | |
} else { | |
$tree->eof; | |
$info{ $stock, "success" } = 0; | |
$info{ $stock, "errormsg" } = | |
"Error retrieving quote for $stock. Could not parse HTML returned from $url."; | |
} | |
} else { # HTTP Request failed (code != 200) | |
$info{ $stock, "success" } = 0; | |
$info{ $stock, "errormsg" } = | |
"Error retrieving quote for $stock. Attempt to fetch the URL $url resulted in HTTP response $code ($desc)"; | |
} | |
} | |
return wantarray() ? %info : \%info; | |
return \%info; | |
} | |
1; | |
__END__ | |
=head1 NAME | |
Finance::Quote::FooBar - Obtain quotes from FooBar Stock Exchange. | |
=head1 SYNOPSIS | |
use Finance::Quote; | |
$q = Finance::Quote->new; | |
%info = $q->fetch("foobar", "tlv"); # Only query foobar | |
%info = $q->fetch("romania", "brd"); # Failover to other sources OK. | |
=head1 DESCRIPTION | |
This module fetches information from L<https://foobar.ro/>. | |
This module is loaded by default on a Finance::Quote object. It's also possible | |
to load it explicitly by placing "foobar" in the argument list to | |
Finance::Quote->new(). | |
This module provides "foobar", "tradeville", "romania", and "europe" | |
fetch methods. It was written to replace a non-working Tradeville.pm | |
module. | |
Information obtained by this module may be covered by Bucharest Stock | |
Exchange terms and conditions. | |
=head1 LABELS RETURNED | |
The following labels are returned: | |
=over | |
=item name | |
=item symbol | |
=item open | |
=item high | |
=item low | |
=item price | |
=item bid | |
=item ask | |
=item date | |
=item currency | |
=back |
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
To fix Bloomberg.pm, need to figure out how to get the cookies used in this curl command:
curl 'https://www.bloomberg.com/quote/PCAR:US' --compressed -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate, br' -H 'Connection: keep-alive' -H 'Cookie: __sppvid=59a3ff1d-6301-49e7-9950-45a0ad1d9040; seen_uk=1; table: 0x7f6b48db19e8; __sppvid=c83e0394-5538-418c-9a35-abaa509996d4; country_code=US; exp_pref=AMER; agent_id=ce9bd7ab-f083-439e-bd94-057c7aa0aed2; session_id=b02e4525-623d-4662-920b-89bf6d0ad908; session_key=bbb458b5d9b7791ece3adede5ea62093474318b9; gatehouse_id=31efd99e-a64b-4151-9d80-a3975ff5643a; geo_info=%7B%22countryCode%22%3A%22US%22%2C%22country%22%3A%22US%22%2C%22cityId%22%3A%225392423%22%2C%22provinceId%22%3A%225332921%22%2C%22field_p%22%3A%22E99644%22%2C%22field_d%22%3A%22comcast.net%22%2C%22field_mi%22%3A12%2C%22field_n%22%3A%22hf%22%2C%22trackingRegion%22%3A%22US%22%2C%22cacheExpiredTime%22%3A1690666074576%2C%22region%22%3A%22US%22%2C%22fieldMI%22%3A12%2C%22fieldN%22%3A%22hf%22%2C%22fieldD%22%3A%22comcast.net%22%2C%22fieldP%22%3A%22E99644%22%7D%7C1690666074576; _reg-csrf-token=HTzQ0IfT-nrFZ1hBN87Gl2L0F8Z_CaYgqUj4; _reg-csrf=s%3A2fjaX9E-MV4WO6wFKnGnzRHA.B%2FQEf8z51RFgYiAs%2BcrTHVP4Uxpbd1IuWDp3UBP1KZ0; _user-data=%7B%22status%22%3A%22anonymous%22%7D; _last-refresh=2023-7-22%2021%3A27; pxcts=9ed35c2f-28d6-11ee-8fbd-5563524b4d6c; _pxvid=9ed34fbb-28d6-11ee-8fbd-721f349f61ab; _pxde=3321f55a32496b4246fcca1046748508597b9c6b696b209ee63b42621bb02959:eyJ0aW1lc3RhbXAiOjE2OTAwNjEzNjcxNTUsImZfa2IiOjAsImlwY19pZCI6W119; geo_info={%22country%22:%22US%22%2C%22region%22:%22US%22%2C%22cityId%22:%225392423%22%2C%22provinceId%22:%225332921%22%2C%22fieldP%22:%22E99644%22%2C%22fieldD%22:%22comcast.net%22%2C%22fieldMI%22:12%2C%22fieldN%22:%22hf%22}|1690666075991; _sp_krux=false; _sp_v1_ss=1:H4sIAAAAAAAAAItWqo5RKimOUbLKK83J0YlRSkVil4AlqmtrlXRGlQ0dZbEAf3mLbNUBAAA%3D; _sp_v1_p=77; _sp_v1_data=585912; _sp_su=false; ccpaUUID=58f20873-0269-4957-b730-591fe7c5f85e; dnsDisplayed=true; ccpaApplies=true; signedLspa=false; bbgconsentstring=req1fun1pad1; _gcl_au=1.1.816872108.1690061277; bdfpc=004.7138066349.1690061276561; _ga_GQ1PBLXZCT=GS1.1.1690061276.1.1.1690061291.0.0.0; _ga=GA1.2.518652684.1690061277; _rdt_uuid=1690061276791.1cb2a473-8e16-4ec5-8cf4-270b339c0e48; _px3=ffd23c83c2738d13d3c4ded180138a4c548cd294c5a7d176442ac56e3237795a:+O8vawzcWlXyNiaCINkgojeRNldhLHSkew4f+DsS8rvX/dBl/X0O5Doley2eLySrf30s/9gse8rW9TLWDWpy9w==:1000:Nw0BOeNFCYatNhMBND/VX6tGu3tJgbU8PAbFr3809PinWfRa+GXeNUgdbIjOz7P5EX5zDBu6V1+LA/qzWJnU6lnuR3s4T+011AJnLAPeULW8IazL1zsT9K/3UufNvdLqfpO2IFCm/j6t9CFrL88FxfApVqjEJU8NKcnS6xGwundhmBLFxs07awrOQYOpny4k89Q2TtW8wdIxPBqcAV7AWQ==; _px2=eyJ1IjoiYTcyOWYwNDAtMjhkNi0xMWVlLThhNzktZWZjODBlODJhYWMwIiwidiI6IjllZDM0ZmJiLTI4ZDYtMTFlZS04ZmJkLTcyMWYzNDlmNjFhYiIsInQiOjE2OTAwNjE1OTAyMTAsImgiOiJiNDJlYzQwMGE4OGI1NWIxNzBmNTY3ZTdiMzU0OWI1OWUyNjY2MWNjZmE3MDZlNjhmYzVmMzA1ODA4MmZmYTVkIn0=; _scid=020faed6-5b32-4a74-92c8-4c1f9a1a94a2; _cc_id=b0a1d53bdc8c780f9435c15ca5818bd5; _cc_cc=ACZ4XmNQSDJINEwxNU5KSbZINrcwSLM0MTZNNjRNTjS1MLRISjFlAIKUPZ6vPv%2F%2F%2F58fxAED6Ydr7kszHopj%2BM%2FIyLDl7B4dGPv1KoT4HyT25pUI8eW3Z4rD1K9djxCftAnBXoOkt611mQFM%2FSYkcxYisT9cnWQIdwMS%2B%2FD0A0ww8dunHrHB2Hc%2FWMKN%2FFMIYz5bPIcFxn4%2FtYcRxj539BAzjH0eSc1hJPaXyw%2F1YWrWdGvBmA3%2FNWHMo2ufcsPYAO2Thdo%3D; _cc_aud=ABR4XmNgYGBI2eP5CkhBABMDa2YRiMmaWQgkAUtIBBU%3D; panoramaId_expiry=1690666090168; panoramaId=55957def679f632c667bd9f6387e4945a7025a7455190abd463ce51edbc5474c; panoramaIdType=panoIndiv; _gid=GA1.2.2011490682.1690061278; __gads=ID=62800114a4ab1277:T=1690061277:RT=1690061277:S=ALNI_MZPufkvkc8ElON02gsLgFGK7SkRTQ; __gpi=UID=000009ab87507766:T=1690061277:RT=1690061277:S=ALNI_MYOPvOsm8LRJo-vRwPolnc1Wnm0bg; _sctr=1%7C1690009200000; ln_or=eyI0MDM1OTMiOiJkIn0%3D; afUserId=866ea76c-7c3a-4021-9d7d-8480040987fb-p; AF_SYNC=1690061279396; _scid_r=020faed6-5b32-4a74-92c8-4c1f9a1a94a2; _uetsid=a041c04028d611eea5f61d6ac28c5401; _uetvid=a041d4a028d611ee9e41ab83f4c04b41; __stripe_mid=919cd9e2-b407-43e8-a094-da0faa3867fd24c3e5; __stripe_sid=b27062c1-1e1e-4ef8-90b0-41d0ac25e963ee0009' -H 'Upgrade-Insecure-Requests: 1' -H 'Sec-Fetch-Dest: document' -H 'Sec-Fetch-Mode: navigate' -H 'Sec-Fetch-Site: none' -H 'Sec-Fetch-User: ?1' -H 'TE: trailers'
# or
curl 'https://www.bloomberg.com/quote/PCAR:US' --compressed \
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' \
-H 'Accept-Language: en-US,en;q=0.5' \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Connection: keep-alive;' \
-H 'Cookie: __sppvid=59a3ff1d-6301-49e7-9950-45a0ad1d9040' \
-H 'Cookie: seen_uk=1' \
-H 'Cookie: table: 0x7f6b48db19e8' \
-H 'Cookie: __sppvid=c83e0394-5538-418c-9a35-abaa509996d4' \
-H 'Cookie: country_code=US' \
-H 'Cookie: exp_pref=AMER' \
-H 'Cookie: agent_id=ce9bd7ab-f083-439e-bd94-057c7aa0aed2' \
-H 'Cookie: session_id=b02e4525-623d-4662-920b-89bf6d0ad908' \
-H 'Cookie: session_key=bbb458b5d9b7791ece3adede5ea62093474318b9' \
-H 'Cookie: gatehouse_id=31efd99e-a64b-4151-9d80-a3975ff5643a' \
-H 'Cookie: geo_info=%7B%22countryCode%22%3A%22US%22%2C%22country%22%3A%22US%22%2C%22cityId%22%3A%225392423%22%2C%22provinceId%22%3A%225332921%22%2C%22field_p%22%3A%22E99644%22%2C%22field_d%22%3A%22comcast.net%22%2C%22field_mi%22%3A12%2C%22field_n%22%3A%22hf%22%2C%22trackingRegion%22%3A%22US%22%2C%22cacheExpiredTime%22%3A1690666074576%2C%22region%22%3A%22US%22%2C%22fieldMI%22%3A12%2C%22fieldN%22%3A%22hf%22%2C%22fieldD%22%3A%22comcast.net%22%2C%22fieldP%22%3A%22E99644%22%7D%7C1690666074576' \
-H 'Cookie: _reg-csrf-token=HTzQ0IfT-nrFZ1hBN87Gl2L0F8Z_CaYgqUj4' \
-H 'Cookie: _reg-csrf=s%3A2fjaX9E-MV4WO6wFKnGnzRHA.B%2FQEf8z51RFgYiAs%2BcrTHVP4Uxpbd1IuWDp3UBP1KZ0' \
-H 'Cookie: _user-data=%7B%22status%22%3A%22anonymous%22%7D' \
-H 'Cookie: _last-refresh=2023-7-22%2021%3A27' \
-H 'Cookie: pxcts=9ed35c2f-28d6-11ee-8fbd-5563524b4d6c' \
-H 'Cookie: _pxvid=9ed34fbb-28d6-11ee-8fbd-721f349f61ab' \
-H 'Cookie: _pxde=3321f55a32496b4246fcca1046748508597b9c6b696b209ee63b42621bb02959:eyJ0aW1lc3RhbXAiOjE2OTAwNjEzNjcxNTUsImZfa2IiOjAsImlwY19pZCI6W119' \
-H 'Cookie: geo_info={%22country%22:%22US%22%2C%22region%22:%22US%22%2C%22cityId%22:%225392423%22%2C%22provinceId%22:%225332921%22%2C%22fieldP%22:%22E99644%22%2C%22fieldD%22:%22comcast.net%22%2C%22fieldMI%22:12%2C%22fieldN%22:%22hf%22}|1690666075991' \
-H 'Cookie: _sp_krux=false' \
-H 'Cookie: _sp_v1_ss=1:H4sIAAAAAAAAAItWqo5RKimOUbLKK83J0YlRSkVil4AlqmtrlXRGlQ0dZbEAf3mLbNUBAAA%3D' \
-H 'Cookie: _sp_v1_p=77' \
-H 'Cookie: _sp_v1_data=585912' \
-H 'Cookie: _sp_su=false' \
-H 'Cookie: ccpaUUID=58f20873-0269-4957-b730-591fe7c5f85e' \
-H 'Cookie: dnsDisplayed=true' \
-H 'Cookie: ccpaApplies=true' \
-H 'Cookie: signedLspa=false' \
-H 'Cookie: bbgconsentstring=req1fun1pad1' \
-H 'Cookie: _gcl_au=1.1.816872108.1690061277' \
-H 'Cookie: bdfpc=004.7138066349.1690061276561' \
-H 'Cookie: _ga_GQ1PBLXZCT=GS1.1.1690061276.1.1.1690061291.0.0.0' \
-H 'Cookie: _ga=GA1.2.518652684.1690061277' \
-H 'Cookie: _rdt_uuid=1690061276791.1cb2a473-8e16-4ec5-8cf4-270b339c0e48' \
-H 'Cookie: _px3=ffd23c83c2738d13d3c4ded180138a4c548cd294c5a7d176442ac56e3237795a:+O8vawzcWlXyNiaCINkgojeRNldhLHSkew4f+DsS8rvX/dBl/X0O5Doley2eLySrf30s/9gse8rW9TLWDWpy9w==:1000:Nw0BOeNFCYatNhMBND/VX6tGu3tJgbU8PAbFr3809PinWfRa+GXeNUgdbIjOz7P5EX5zDBu6V1+LA/qzWJnU6lnuR3s4T+011AJnLAPeULW8IazL1zsT9K/3UufNvdLqfpO2IFCm/j6t9CFrL88FxfApVqjEJU8NKcnS6xGwundhmBLFxs07awrOQYOpny4k89Q2TtW8wdIxPBqcAV7AWQ==' \
-H 'Cookie: _px2=eyJ1IjoiYTcyOWYwNDAtMjhkNi0xMWVlLThhNzktZWZjODBlODJhYWMwIiwidiI6IjllZDM0ZmJiLTI4ZDYtMTFlZS04ZmJkLTcyMWYzNDlmNjFhYiIsInQiOjE2OTAwNjE1OTAyMTAsImgiOiJiNDJlYzQwMGE4OGI1NWIxNzBmNTY3ZTdiMzU0OWI1OWUyNjY2MWNjZmE3MDZlNjhmYzVmMzA1ODA4MmZmYTVkIn0=' \
-H 'Cookie: _scid=020faed6-5b32-4a74-92c8-4c1f9a1a94a2' \
-H 'Cookie: _cc_id=b0a1d53bdc8c780f9435c15ca5818bd5' \
-H 'Cookie: _cc_cc=ACZ4XmNQSDJINEwxNU5KSbZINrcwSLM0MTZNNjRNTjS1MLRISjFlAIKUPZ6vPv%2F%2F%2F58fxAED6Ydr7kszHopj%2BM%2FIyLDl7B4dGPv1KoT4HyT25pUI8eW3Z4rD1K9djxCftAnBXoOkt611mQFM%2FSYkcxYisT9cnWQIdwMS%2B%2FD0A0ww8dunHrHB2Hc%2FWMKN%2FFMIYz5bPIcFxn4%2FtYcRxj539BAzjH0eSc1hJPaXyw%2F1YWrWdGvBmA3%2FNWHMo2ufcsPYAO2Thdo%3D' \
-H 'Cookie: _cc_aud=ABR4XmNgYGBI2eP5CkhBABMDa2YRiMmaWQgkAUtIBBU%3D' \
-H 'Cookie: panoramaId_expiry=1690666090168' \
-H 'Cookie: panoramaId=55957def679f632c667bd9f6387e4945a7025a7455190abd463ce51edbc5474c' \
-H 'Cookie: panoramaIdType=panoIndiv' \
-H 'Cookie: _gid=GA1.2.2011490682.1690061278' \
-H 'Cookie: __gads=ID=62800114a4ab1277:T=1690061277:RT=1690061277:S=ALNI_MZPufkvkc8ElON02gsLgFGK7SkRTQ' \
-H 'Cookie: __gpi=UID=000009ab87507766:T=1690061277:RT=1690061277:S=ALNI_MYOPvOsm8LRJo-vRwPolnc1Wnm0bg' \
-H 'Cookie: _sctr=1%7C1690009200000' \
-H 'Cookie: ln_or=eyI0MDM1OTMiOiJkIn0%3D' \
-H 'Cookie: afUserId=866ea76c-7c3a-4021-9d7d-8480040987fb-p' \
-H 'Cookie: AF_SYNC=1690061279396' \
-H 'Cookie: _scid_r=020faed6-5b32-4a74-92c8-4c1f9a1a94a2' \
-H 'Cookie: _uetsid=a041c04028d611eea5f61d6ac28c5401' \
-H 'Cookie: _uetvid=a041d4a028d611ee9e41ab83f4c04b41' \
-H 'Cookie: __stripe_mid=919cd9e2-b407-43e8-a094-da0faa3867fd24c3e5' \
-H 'Cookie: __stripe_sid=b27062c1-1e1e-4ef8-90b0-41d0ac25e963ee0009' \
-H 'Upgrade-Insecure-Requests: 1' \
-H 'Sec-Fetch-Dest: document' \
-H 'Sec-Fetch-Mode: navigate' \
-H 'Sec-Fetch-Site: none' \
-H 'Sec-Fetch-User: ?1' \
-H 'TE: trailers'
The bloomberg-session.chls CharlesProxy capture may contain helpful information for this.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Site with trading hours for multiple markets - https://www.tradinghours.com/markets