¿Ha terminado Yahoo de repente hoy su API de descarga de finanzas?

Durante meses he estado usando una url como esta, desde perl:

http://finance.yahoo.com/d/quotes.csv?s=$s&f=ynl1 #returns yield, name, price; 

Hoy, 1/1/17, de repente devuelve un error 999.

¿Es esto un problema, o Yahoo ha terminado el servicio?

Recibo el error incluso si ingreso la URL directamente en un navegador como, por ejemplo:

 http://finance.yahoo.com/d/quotes.csv?s=INTC&f=ynl1 

así que no parece ser un problema de “migajas”.

Nota: ¡Esta NO es una pregunta que ha sido respondida en el pasado! Estaba funcionando ayer. Lo que sucedió el primer día del mes es sospechoso.

Yahoo confirmó que finalizaron el servicio:

Hemos detectado que este servicio se está utilizando en violación de los Términos de servicio de Yahoo. Como tal, el servicio se descontinúa. Para toda la investigación de datos de mercados y acciones futuras, consulte finance.yahoo.com.

Como se señaló en las otras respuestas y en otras partes (por ejemplo , ayuda de divisas de yahoo – Lo sentimos, no se puede procesar la solicitud en este momento – error 999 ), Yahoo ha dejado de operar la API de Yahoo Finance. Sin embargo, como solución alternativa, puede acceder a una gran cantidad de información financiera, en formato JSON, para un símbolo de cotización dado, haciendo una solicitud HTTPS GET a: https://finance.yahoo.com/quote/SYMBOL (por ejemplo, https: //finance.yahoo.com/quote/MSFT ). Si realiza una solicitud GET a la URL anterior, verá que los datos financieros están contenidos en la respuesta en formato JSON. El siguiente script de Python muestra cómo puede analizar valores individuales que pueden interesarle:

 import requests import json symbol='MSFT' url='https://finance.yahoo.com/quote/' + symbol resp = requests.get(url) #parse the section from the html document containing the raw json data that we need #you can write jsonstr to a file, then open the file in a web browser to browse the structure of the json data r=resp.text.encode('utf-8') i1=0 i1=r.find('root.App.main', i1) i1=r.find('{', i1) i2=r.find("\n", i1) i2=r.rfind(';', i1, i2) jsonstr=r[i1:i2] #load the raw json data into a python data object data = json.loads(jsonstr) #pull the values that we are interested in name=data['context']['dispatcher']['stores']['QuoteSummaryStore']['price']['shortName'] price=data['context']['dispatcher']['stores']['QuoteSummaryStore']['price']['regularMarketPrice']['raw'] change=data['context']['dispatcher']['stores']['QuoteSummaryStore']['price']['regularMarketChange']['raw'] shares_outstanding=data['context']['dispatcher']['stores']['QuoteSummaryStore']['defaultKeyStatistics']['sharesOutstanding']['raw'] market_cap=data['context']['dispatcher']['stores']['QuoteSummaryStore']['summaryDetail']['marketCap']['raw'] trailing_pe=data['context']['dispatcher']['stores']['QuoteSummaryStore']['summaryDetail']['trailingPE']['raw'] earnings_per_share=data['context']['dispatcher']['stores']['QuoteSummaryStore']['defaultKeyStatistics']['trailingEps']['raw'] forward_annual_dividend_rate=data['context']['dispatcher']['stores']['QuoteSummaryStore']['summaryDetail']['dividendRate']['raw'] forward_annual_dividend_yield=data['context']['dispatcher']['stores']['QuoteSummaryStore']['summaryDetail']['dividendYield']['raw'] #print the values print 'Symbol:', symbol print 'Name:', name print 'Price:', price print 'Change:', change print 'Shares Outstanding:', shares_outstanding print 'Market Cap:', market_cap print 'Trailing PE:', trailing_pe print 'Earnings Per Share:', earnings_per_share print 'Forward Annual Dividend Rate:', forward_annual_dividend_rate print 'Forward_annual_dividend_yield:', forward_annual_dividend_yield 

El resultado del script debería verse más o menos así:

 Symbol: MSFT Name: Microsoft Corporation Price: 84.14 Change: 0.08999634 Shares Outstanding: 7714590208 Market Cap: 649105637376 Trailing PE: 31.04797 Earnings Per Share: 2.71 Forward Annual Dividend Rate: 1.68 Forward_annual_dividend_yield: 0.02 

Todavía hay una manera de obtener estos datos al consultar algunas API utilizadas por la página finance.yahoo.com. No estoy seguro de si Yahoo lo soportará a largo plazo ya que la API anterior fue (con suerte lo harán).

Adapté el método utilizado por https://github.com/pstadler/ticker.sh en el siguiente truco de Python que toma una lista de símbolos de la línea de comando y genera algunas de las variables como un csv:

 #!/usr/bin/env python import sys import time import requests if len(sys.argv) < 2: print("missing parameters:  ...") exit() apiEndpoint = "https://query1.finance.yahoo.com/v7/finance/quote" fields = [ 'symbol', 'regularMarketVolume', 'regularMarketPrice', 'regularMarketDayHigh', 'regularMarketDayLow', 'regularMarketTime', 'regularMarketChangePercent'] fields = ','.join(fields) symbols = sys.argv[1:] symbols = ','.join(symbols) payload = { 'lang': 'en-US', 'region': 'US', 'corsDomain': 'finance.yahoo.com', 'fields': fields, 'symbols': symbols} r = requests.get(apiEndpoint, params=payload) for i in r.json()['quoteResponse']['result']: if 'regularMarketPrice' in i: a = [] a.append(i['symbol']) a.append(i['regularMarketPrice']) a.append(time.strftime( '%Y-%m-%d %H:%M:%S', time.localtime(i['regularMarketTime']))) a.append(i['regularMarketChangePercent']) a.append(i['regularMarketVolume']) a.append("{0:.2f} - {1:.2f}".format( i['regularMarketDayLow'], i['regularMarketDayHigh'])) print(",".join([str(e) for e in a])) 

Ejecución de muestra:

 $ ./getquotePy.py AAPL GOOGL AAPL,174.5342,2017-11-07 17:21:28,0.1630961,19905458,173.60 - 173.60 GOOGL,1048.6753,2017-11-07 17:21:22,0.5749836,840447,1043.00 - 1043.00 

var API = "https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL"; $.getJSON(API, function (json) {...}); llamada arroja este error: No hay encabezado ‘Access-Control-Allow-Origin’ presente en el recurso solicitado. El origen ‘ http://www.microplan.at/sar ‘ no está, por lo tanto, permitido.

El progtwig My Python que usa Yahoo Finance ha dejado de funcionar correctamente recientemente, pero no devolvió ese error, simplemente reemplazó los precios de las acciones por 0. Inicialmente vi esto cuando depuré y luego, cuando fui a las URL de Finanzas de Yahoo para esas acciones, confirmé el error. Dado que los datos reales están en mal estado, no creo que las soluciones alternativas que se han sugerido solucionen mis problemas. ¿Es probable que esto esté relacionado con que Yahoo descontinúe su API? No puedo entender lo que podría explicar esto.

Ejemplos:

de qué te quejas? Todavía puede ir a Yahoo y ver la cotización de cualquier símbolo de cotización y anotarlo o escribirlo en una hoja de cálculo. De hecho, puedes hacer esto para obtener una lista completa de símbolos.

Lo que ya no puedo hacer es descargar los datos de hoy para obtener una lista completa de símbolos en formato de hoja de cálculo. Al menos lo hice esta mañana. Ahora, de repente, mi computadora no puede establecer una “conexión segura” con las finanzas de Yahoo.

Tengo curiosidad por saber qué términos de servicio fueron violados. ¿Alguien encontró una forma de usar los datos de manera rentable? Eso, por supuesto, sería groseramente inmoral, a menos que todas las ganancias fueran donadas a una causa digna no racista como el gobierno de Zimbabwe o Venezuela.

Esta es la SEGUNDA VEZ que Yahoo ha dificultado la obtención de datos. Por la presente pronostico que en el futuro sus datos solicitados se formatearán como un archivo .PNG con una fuente loca que desafía cualquier bash de OCR.