Yahoo Finance URL not working

I used the following URL to retrieve historical data from yahoo finance for quite some time, but yesterday it did not work.

https://ichart.finance.yahoo.com/table.csv?s=SPY

When viewed on this site it says:

Will be back ...

Thank you for your patience.

Our engineers quickly work to solve the problem.

However, since this problem still exists from yesterday, I begin to think that they have stopped this service?

My SO search only pointed me to this section that was related to https, though ...

Anyone else having this problem? How can I solve this problem? Do they offer other access to their historical data?

+43
yahoo-finance
May 17 '17 at 17:06
source share
22 answers

It looks like they started adding the necessary cookie, but you can get it quite easily, for example:

GET https://uk.finance.yahoo.com/quote/AAPL/history 

Answers with a heading of the form:

 set-cookie:B=xxxxxxxx&b=3&s=qf; expires=Fri, 18-May-2018 00:00:00 GMT; path=/; domain=.yahoo.com 

You should be able to read this and attach it to your .csv request:

 GET https://query1.finance.yahoo.com/v7/finance/download/AAPL?period1=1492524105&period2=1495116105&interval=1d&events=history&crumb=tO1hNZoUQeQ cookie: B=xxxxxxxx&b=3&s=qf; 

Pay attention to the crumb request parameter, it looks like your cookie in some way. It is best to make this scrape from an HTML response to your initial GET request. Within this answer, you can do a regular expression search for: "CrumbStore":\{"crumb":"(?<crumb>[^"]+)"\} and extract the group matched by the baby.

It looks like if you have this crumb value, although you can use it with the same cookie for any character / ticker next year, which means you don't have to scrape too often.




To get current quotes, just download:

https://query1.finance.yahoo.com/v8/finance/chart/AAPL?interval=2m

FROM

  • AAPL replaced by your stock ticker
  • interval one of [1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo]
  • optional period1 is a query parameter with the start date of an era period, for example. period1=1510340760
  • optional period2 query parameter with expiration date of the era, for example. period2=1510663712
+32
May 18 '17 at 14:05
source share

I managed to develop a .NET class to get a valid token (cookie and crumb) from Yahoo Finance

For a complete API library in retrieving historical data from the new Yahoo Finance, you can visit the YahooFinanceAPI on Github

Here is a class to grab cookies and baby

Token.cs

 using System; using System.Diagnostics; using System.Net; using System.IO; using System.Text.RegularExpressions; namespace YahooFinanceAPI { /// <summary> /// Class for fetching token (cookie and crumb) from Yahoo Finance /// Copyright Dennis Lee /// 19 May 2017 /// /// </summary> public class Token { public static string Cookie { get; set; } public static string Crumb { get; set; } private static Regex regex_crumb; /// <summary> /// Refresh cookie and crumb value Yahoo Fianance /// </summary> /// <param name="symbol">Stock ticker symbol</param> /// <returns></returns> public static bool Refresh(string symbol = "SPY") { try { Token.Cookie = ""; Token.Crumb = ""; string url_scrape = "https://finance.yahoo.com/quote/{0}?p={0}"; //url_scrape = "https://finance.yahoo.com/quote/{0}/history" string url = string.Format(url_scrape, symbol); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.CookieContainer = new CookieContainer(); request.Method = "GET"; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { string cookie = response.GetResponseHeader("Set-Cookie").Split(';')[0]; string html = ""; using (Stream stream = response.GetResponseStream()) { html = new StreamReader(stream).ReadToEnd(); } if (html.Length < 5000) return false; string crumb = getCrumb(html); html = ""; if (crumb != null) { Token.Cookie = cookie; Token.Crumb = crumb; Debug.Print("Crumb: '{0}', Cookie: '{1}'", crumb, cookie); return true; } } } catch (Exception ex) { Debug.Print(ex.Message); } return false; } /// <summary> /// Get crumb value from HTML /// </summary> /// <param name="html">HTML code</param> /// <returns></returns> private static string getCrumb(string html) { string crumb = null; try { //initialize on first time use if (regex_crumb == null) regex_crumb = new Regex("CrumbStore\":{\"crumb\":\"(?<crumb>.+?)\"}", RegexOptions.CultureInvariant | RegexOptions.Compiled, TimeSpan.FromSeconds(5)); MatchCollection matches = regex_crumb.Matches(html); if (matches.Count > 0) { crumb = matches[0].Groups["crumb"].Value; } else { Debug.Print("Regex no match"); } //prevent regex memory leak matches = null; } catch (Exception ex) { Debug.Print(ex.Message); } GC.Collect(); return crumb; } } } 

Updated Jun 1, 17
Credits @ Ed0906
change the regular expression pattern of the Regex("CrumbStore\":{\"crumb\":\"(?<crumb>.+?)\"}" to Regex("CrumbStore\":{\"crumb\":\"(?<crumb>.+?)\"}"

+15
May 22 '17 at 7:25
source share

In this forum: https://forums.yahoo.net/t5/Yahoo-Finance-help/Is-Yahoo-Finance-API-broken/td-p/250503/page/3

Nixon said:

Hello to all. This function has been discontinued by the financial team and they will not re-enter this functionality.

+13
May 18 '17 at 11:26
source share

The url for loading historical data now looks something like this:

https://query1.finance.yahoo.com/v7/finance/download/SPY?period1=1492449771&period2=1495041771&interval=1d&events=history&crumb=9GaimFhz.WU

Please note that the above URL will not work for you or anyone else. You will get something like this:

 { "finance": { "error": { "code": "Unauthorized", "description": "Invalid cookie" } } } 

It seems that Yahoo now uses some hashing to prevent people from accessing data like you do. The URL depends on each session, so it is very likely that you can no longer do this with a fixed URL.

You will need to break a bit to get the correct URL from the main page, for example:

https://finance.yahoo.com/quote/SPY/history?p=SPY

+9
May 17 '17 at 17:31
source share

For python lovers, I updated yahooFinance.py in the tradingWithPython library.

There is also an example notepad based on Ed0906 tips that demonstrate how to get data step by step. Look at

+9
May 20, '17 at 21:01
source share

I'm in the same boat. Get there slowly. The link to the page with historical prices still works. So I added the export cookie extension to firefox, registered with yahoo, and reset the cookies. Used the crumb value from an interactive session, and I managed to get the values. Here is the part of the perl script test that worked.

 use Time::Local; # create unix time variables for start and end date values: 1/1/2014 thru 12/31/2017 $p1= timelocal(0,0,0,1,0,114); $p2= timelocal(0,0,0,31,11,117); $symbol = 'AAPL'; # create variable for string to be executed as a system command # cookies.txt exported from firefox # crumb variable retrieved from yahoo download data link $task = "wget --load-cookies cookies.txt --no-check-certificate -T 30 -O $symbol.csv \"https://query1.finance.yahoo.com/v7/finance/download/$symbol?period1=$p1&period2=$p2&interval=1d&events=history&crumb=7WhHVu5N4e3\" "; #show what we're executing print $task; # execute system command using backticks `$task`; #output is AAPL.csv 

It will take some time to automate what I do. I hope yahoo simplifies or gives some recommendations on this subject if they really intend to use it for users.

+5
May 17 '17 at 23:21
source share

For lovers of Java.

You can access your cookies from URLConnection this way.

  // "https://finance.yahoo.com/quote/SPY"; URLConnection con = url.openConnection(); ... for (Map.Entry<String, List<String>> entry : con.getHeaderFields().entrySet()) { if (entry.getKey() == null || !entry.getKey().equals("Set-Cookie")) continue; for (String s : entry.getValue()) { // store your cookie ... } } 

now you can search for baby on yahoo website:

 String crumb = null; InputStream inStream = con.getInputStream(); InputStreamReader irdr = new InputStreamReader(inStream); BufferedReader rsv = new BufferedReader(irdr); Pattern crumbPattern = Pattern.compile(".*\"CrumbStore\":\\{\"crumb\":\"([^\"]+)\"\\}.*"); String line = null; while (crumb == null && (line = rsv.readLine()) != null) { Matcher matcher = crumbPattern.matcher(line); if (matcher.matches()) crumb = matcher.group(1); } rsv.close(); 

and finally setting a cookie

 String quoteUrl = "https://query1.finance.yahoo.com/v7/finance/download/IBM?period1=1493425217&period2=1496017217&interval=1d&events=history&crumb=" + crumb ... List<String> cookies = cookieStore.get(key); if (cookies != null) { for (String c: cookies) con.setRequestProperty("Cookie", c); } ... con.connect(); 
+5
May 29 '17 at 19:00
source share

A fully working PHP example based on this post and related sources:

 function readYahoo($symbol, $tsStart, $tsEnd) { preg_match('"CrumbStore\":{\"crumb\":\"(?<crumb>.+?)\"}"', file_get_contents('https://uk.finance.yahoo.com/quote/' . $symbol), $crumb); // can contain \uXXXX chars if (!isset($crumb['crumb'])) return 'Crumb not found.'; $crumb = json_decode('"' . $crumb['crumb'] . '"'); // \uXXXX to UTF-8 foreach ($http_response_header as $header) { if (0 !== stripos($header, 'Set-Cookie: ')) continue; $cookie = substr($header, 14, strpos($header, ';') - 14); // after 'B=' } // cookie looks like "fkjfom9cj65jo&b=3&s=sg" if (!isset($cookie)) return 'Cookie not found.'; $fp = fopen('https://query1.finance.yahoo.com/v7/finance/download/' . $symbol . '?period1=' . $tsStart . '&period2=' . $tsEnd . '&interval=1d' . '&events=history&crumb=' . $crumb, 'rb', FALSE, stream_context_create(array('http' => array('method' => 'GET', 'header' => 'Cookie: B=' . $cookie)))); if (FALSE === $fp) return 'Can not open data.'; $buffer = ''; while (!feof($fp)) $buffer .= implode(',', fgetcsv($fp, 5000)) . PHP_EOL; fclose($fp); return $buffer; } 

Using

 $csv = readYahoo('AAPL', mktime(0, 0, 0, 6, 2, 2017), mktime(0, 0, 0, 6, 3, 2017)); 
+5
Jun 03 '17 at 20:17
source share

Python

I used this code to get a cookie (copied from fix-yahoo-finance ):

 def get_yahoo_crumb_cookie(): """Get Yahoo crumb cookie value.""" res = requests.get('https://finance.yahoo.com/quote/SPY/history') yahoo_cookie = res.cookies['B'] yahoo_crumb = None pattern = re.compile('.*"CrumbStore":\{"crumb":"(?P<crumb>[^"]+)"\}') for line in res.text.splitlines(): m = pattern.match(line) if m is not None: yahoo_crumb = m.groupdict()['crumb'] return yahoo_cookie, yahoo_crumb 

then this code will get the answer:

 cookie, crumb = get_yahoo_crumb_cookie() params = { 'symbol': stock.symbol, 'period1': 0, 'period2': int(time.time()), 'interval': '1d', 'crumb': crumb, } url_price = 'https://query1.finance.yahoo.com/v7/finance/download/{symbol}' response = requests.get(url_price, params=params, cookies={'B': cookie}) 

This looks good, but http://blog.bradlucas.com/posts/2017-06-03-yahoo-finance-quote-download-python/

+3
Jun 08 '17 at 20:30
source share

I am the author of this service

Basic information here

Daily prices

You should be familiar with RESTFUL services.

https://quantprice.herokuapp.com/api/v1.1/scoop/day?tickers=MSFT&date=2017-06-09

Historical prices

You must specify a date range:

https://quantprice.herokuapp.com/api/v1.1/scoop/period?tickers=MSFT&begin=2012-02-19&end=2012-02-20

If you do not specify a start or end, it will use the earliest or current date:

https://quantprice.herokuapp.com/api/v1.1/scoop/period?tickers=MSFT&begin=2012-02-19

Multiple tickers

You can just comma separate tickers:

https://quantprice.herokuapp.com/api/v1.1/scoop/period?tickers=IBM,MSFT&begin=2012-02-19

Speed ​​Limit

All requests are limited to 10 requests per hour. If you want to register for the Full Access API, send me a DM on Twitter. You will receive an API key to add to the URL.

We create a PayPal account for a paid subscription without bids.

List of available tickers

https://github.com/robomotic/valueviz/blob/master/scoop_tickers.csv

I am also working on providing fundamental data and company data from EDGAR. Greetings.

+3
Jun 12 '17 at 8:51 on
source share

Vba

Here are some VBA functions that load and extract a cookie / crumb pair and return them to Collection , and then use them to load the contents of the csv file for specific code.

The containing project should have a link to the added library "Microsoft XML, v6.0" (another version may be fine with some minor changes to the code).

 Sub Test() Dim X As Collection Set X = FindCookieAndCrumb() Debug.Print X!cookie Debug.Print X!crumb Debug.Print YahooRequest("AAPL", DateValue("31 Dec 2016"), DateValue("30 May 2017"), X) End Sub Function FindCookieAndCrumb() As Collection ' Tools - Reference : Microsoft XML, v6.0 Dim http As MSXML2.XMLHTTP60 Dim cookie As String Dim crumb As String Dim url As String Dim Pos1 As Long Dim X As String Set FindCookieAndCrumb = New Collection Set http = New MSXML2.ServerXMLHTTP60 url = "https://finance.yahoo.com/quote/MSFT/history" http.Open "GET", url, False ' http.setProxy 2, "https=127.0.0.1:8888", "" ' http.setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" ' http.setRequestHeader "Accept-Encoding", "gzip, deflate, sdch, br" ' http.setRequestHeader "Accept-Language", "en-ZA,en-GB;q=0.8,en-US;q=0.6,en;q=0.4" http.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" http.send X = http.responseText Pos1 = InStr(X, "CrumbStore") X = Mid(X, Pos1, 44) X = Mid(X, 23, 44) Pos1 = InStr(X, """") X = Left(X, Pos1 - 1) FindCookieAndCrumb.Add X, "Crumb" '====================================== X = http.getResponseHeader("set-cookie") Pos1 = InStr(X, ";") X = Left(X, Pos1 - 1) FindCookieAndCrumb.Add X, "Cookie" End Function Function YahooRequest(ShareCode As String, StartDate As Date, EndDate As Date, CookieAndCrumb As Collection) As String ' Tools - Reference : Microsoft XML, v6.0 Dim http As MSXML2.XMLHTTP60 Dim cookie As String Dim crumb As String Dim url As String Dim UnixStartDate As Long Dim UnixEndDate As Long Dim BaseDate As Date Set http = New MSXML2.ServerXMLHTTP60 cookie = CookieAndCrumb!cookie crumb = CookieAndCrumb!crumb BaseDate = DateValue("1 Jan 1970") If StartDate = 0 Then StartDate = BaseDate UnixStartDate = (StartDate - BaseDate) * 86400 UnixEndDate = (EndDate - BaseDate) * 86400 url = "https://query1.finance.yahoo.com/v7/finance/download/" & ShareCode & "?period1=" & UnixStartDate & "&period2=" & UnixEndDate & "&interval=1d&events=history&crumb=" & crumb http.Open "GET", url, False http.setRequestHeader "Cookie", cookie http.send YahooRequest = http.responseText End Function 
+3
Jun 15 '17 at 22:55
source share

I found another yahoo site that does not require cookies, but generates jason output: https://query1.finance.yahoo.com/v7/finance/chart/YHOO?range=2y&interval=1d&indicators=quote&includeTimestamps=true

was pointed out here: https://www.stock-data-solutions.com/kb/how-to-load-historical-prices-from-yahoo-finance-to-excel.htm

As it turned out, they seem to support the "perod1" and "period2" (at unix time) parameters, which can be used instead of the "interval".

 String quoteSite = "https://query1.finance.yahoo.com/v7/finance/chart/" + symbolName + "?" + "period1=" + period1 + "&period2=" + period2 + "&interval=1d&indicators=quote&includeTimestamps=true"; 

And the following Jason parser for me:

 JSONObject topObj = new JSONObject(inp); Object error = topObj.getJSONObject("chart").get("error"); if (!error.toString().equals("null")) { System.err.prinltn(error.toString()); return null; } JSONArray results = topObj.getJSONObject("chart").getJSONArray("result"); if (results == null || results.length() != 1) { return null; } JSONObject result = results.getJSONObject(0); JSONArray timestamps = result.getJSONArray("timestamp"); JSONObject indicators = result.getJSONObject("indicators"); JSONArray quotes = indicators.getJSONArray("quote"); if (quotes == null || quotes.length() != 1) { return null; } JSONObject quote = quotes.getJSONObject(0); JSONArray adjcloses = indicators.getJSONArray("adjclose"); if (adjcloses == null || adjcloses.length() != 1) { return null; } JSONArray adjclose = adjcloses.getJSONObject(0).getJSONArray("adjclose"); JSONArray open = quote.getJSONArray("open"); JSONArray close = quote.getJSONArray("close"); JSONArray high = quote.getJSONArray("high"); JSONArray low = quote.getJSONArray("low"); JSONArray volume = quote.getJSONArray("volume"); 
+3
Aug 27 '17 at 17:50
source share

I used a php script using the fopen () function to access financial data, here are the fragments that I changed to get it back to work:

Create timestamps for start and end dates:

 $timestampStart = mktime(0,0,0,$startMonth,$startDay,$startYear); $timestampEnd = mktime(0,0,0,$endMonth,$endDay,$endYear); 

Force fopen () send the necessary cookie with hard-coded values:

 $cookie="YourCookieTakenFromYahoo"; $opts = array( 'http'=>array( 'method'=>"GET", 'header'=>"Accept-language: en\r\n" . "Cookie: B=".$cookie."\r\n" ) ); $context = stream_context_create($opts); 

Use fopen () to get the csv file:

 $ticker="TickerSymbol"; $crumb="CrumbValueThatMatchesYourCookieFromYahoo"; $handle = fopen("https://query1.finance.yahoo.com/v7/finance/download/".$ticker."?period1=".$timestampStart."&period2=".$timestampEnd."&interval=1d&events=history&crumb=".$crumb."", "r", false, $context); 

Now you can do all the magic you did before this while loop:

 while (!feof($handle) ) { $line_of_text = fgetcsv($handle, 5000); } 

In the above snippets, make sure you set your own values ​​for $ticker , $crumb and $cookie . Follow the Ed0906 approach on how to get $crumb and $cookie .

+2
May 20, '17 at 21:25
source share

For these Excel / VBA users, I used the above suggestions to develop a VBA method to retrieve historical prices from the updated Yahoo website. The key code snippets are listed below, and I also provided my test workbook.

First request to get Crumb and Cookie values ​​before trying to retrieve data from Yahoo at prices.

 Dim strUrl As String: strUrl = "https://finance.yahoo.com/lookup?s=%7B0%7D" 'Symbol lookup used to set the values Dim objRequest As WinHTTP.WinHttpRequest Set objRequest = New WinHttp.WinHttpRequest With objRequest .Open "GET", strUrl, True .setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" .send .waitForResponse strCrumb = strExtractCrumb(.responseText) strCookie = Split(.getResponseHeader("Set-Cookie"), ";")(0) End With 

See the following Yahoo Historical Price Extract link to my site for an example file and more details on the method I used to retrieve historical security prices from the Yahoo website

+2
May 24 '17 at 21:32
source share

There is a fix that I found to work well. Please see my post:

Yahoo API API / URL not working: Python fix for Pandas DataReader , where I followed the steps at https://pypi.python.org/pypi/fix-yahoo-finance at: $ pip install fix_yahoo_finance --upgrade --no-cache -dir (and also updated pandas_datareader to make sure) and tested normally:

 from pandas_datareader import data as pdr import fix_yahoo_finance data = pdr.get_data_yahoo('BHP.AX', start='2017-04-23', end='2017-05-24') 

Also note that the order of the last two data columns is “Adj Close” and “Volume”, so for my purpose I have reset columns:

 cols = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close'] data = data.reindex(columns=cols) 
+1
May 24 '17 at 19:12
source share

I was on the same boat. I managed to get a CSV downloaded from Yahoo using frankencode vb.net, which I made from bits and parts of Google, SOF and some scratches on my head.

However, I discovered Intrinio (view it), registered, and my free account receives 500 historical api data per day, with much more data and much more accurate than Yahoo. I rewrote my code for the Intrinio API and I am happy as a clam.

By the way, I do not work or have nothing to do with Intrinio, but they have kept my butt for a long time ...

+1
Jun 08 '17 at 1:22 on
source share

Yahoo switched to the Reactjs interface, which means that if you parse the request headers from the client to the backend, you can get the actual JSON that they use to fill the client-side storage.

These calls seem to be load balancing between:

query1.finance.yahoo.com and query2.finance.yahoo.com

Using the following path, using one of the host names listed above, you can request financial reports, insider activity, SEC applications, analyst evaluations .. (module names are pretty clear, and I have listed them below)

Main data path: (replace ticker symbol with AAPL)

/v10/finance/quoteSummary/AAPL?modules=

Parameters for the request ?modules= :

modules = [ 'assetProfile', 'incomeStatementHistory', 'incomeStatementHistoryQuarterly', 'balanceSheetHistory', 'balanceSheetHistoryQuarterly', 'cashFlowStatementHistory', 'cashFlowStatementHistoryQuarterly', 'defaultKeyStatistics', 'financialData', 'calendarEvents', 'secFilings', 'recommendationTrend', 'upgradeDowngradeHistory', 'institutionOwnership', 'fundOwnership', 'majorDirectHolders', 'majorHoldersBreakdown', 'insiderTransactions', 'insiderHolders', 'netSharePurchaseActivity', 'earnings', 'earningsHistory', 'earningsTrend', 'industryTrend', 'indexTrend', 'sectorTrend' ]

A full URL request for the AAPL ticker and assetProfile, defaultKeyStatistics and earnings modules History will look like this:

https://query1.yahoo.com/v10/finance/quoteSummary/AAPL?modules=assetProfile%2CdefaultKeyStatistics%2CearningsHistory

%2C is only a hexadecimal representation of a , and must be inserted between each requested module. If you want to know more about encoding detailing, check out https://stackoverflow.com/a/16621/

You can request any combination of the modules I have listed. But don't be d *! ^. The request for all fields is slightly less than 300 KB, so if you download all the NYSE and NASDAQ, it will be about 2 GB, which, of course, is large enough for Yahoo to notice. This is a really handy api, and I would not want them to close it. Please take the time to find out what data you really need, and only request for this data set. ~~ take what you need and leave the rest .. ~~ (The Band)

Contract path option:

/v7/finance/options/AAPL

This call will give you JSON for the current expiration month. To receive future exits, you need to add a request for a date:

?date= The date value will be an integer that represents the expiration date of the contract as a UNIX timestamp (which the stackoverflow post explains methods for converting unix timestamps to readable dates in Python).

Price request:

/v8/finance/chart/AAPL?symbol=AAPL&period1=0&period2=9999999999&interval=3mo

This path will provide you with all the available price data for the AAPL ticker, grouped at 3-month intervals.

You can get interval=1m about 4-5 days. You can get interval=5m in the last 80 (ish) days. I assume that their circumcision is internally based on trading days, so my naive approach to creating past values ​​for period1 little blurred, because I did not take into account the holidays and such (but this may be a more simplified assumption. You can go at different intervals, a little confusing and inconsistent). If you created a query that is valid but interval not supported, yahoo will return interval=3mo . Therefore, simply move the value of period1 forward in time until you get the supported interval.

Add prices before and after the market

&includePrePost=true

Add dividends and splits

&events=div%2Csplit

Example request for all price data for AAPL with a ticker during a 1-day interval, including before and after the market, as well as dividends and splits:

https://query1.finance.yahoo.com/v8/finance/chart/AAPL?symbol=AAPL&period1=0&period2=9999999999&interval=1d&includePrePost=true&events=div%2Csplit

The value 9999999999 for period2= matters only in the sense that it is greater than or equal to the current unix timestamp.

Be respectful and perhaps roll YAHOO dice by clicking on some add-ons from time to time. Let them know that you value the service. They could easily collect all this information, so it would be almost impossible to detect, but they did not do this, and not by chance.

I wrote a personal library that uses random rotation of the user agent and forwards requests by rotating anonymous proxies to keep the original IP address of the requests private in order to avoid the blacklist. It also submits reasonable bid requests so as not to be unfair to yahoo servers. , github ( , , EC2 amazon , , ).

+1
27 . '17 6:28
source share
0
28 '17 1:38
source share

google finance api . .

0
13 . '17 20:56
source share
0
16 . '17 4:52
source share

Javascript

cookie;

 match = document.cookie.match(new RegExp('B=([^;]+)')); alert (match[1]); 

;

 i=document.body.innerHTML.search("CrumbStore") if (i>=0) alert (document.body.innerHTML.substr(i+22,11)) 

;

 i=document.body.innerHTML.search('USER={\"crumb\":'); if (i>=0) alert(document.body.innerHTML.substr(i+15,11)); 

, , (, https://finance.yahoo.com/quote/goog ), ,

 document.readyState 
0
24 . '17 18:02
source share

, (Yahoo, Google Intrinio), , Alpha Vantage. - , 50 . Excel - - Deriscope. ( .)

0
26 . '17 6:49
source share



All Articles