Como usar API Yahoo (programación)

Todo sobre los proveedores de datos en tiempo real.
Responder
slayerbleast
Mensajes: 7
Registrado: 02 Sep 2014 13:03

Como usar API Yahoo (programación)

Mensaje por slayerbleast »

Buenas,

Resulta que estoy creando un proyecto web destinado a los mercados financieros, he estado preguntando a foros de programación y no me contestan, a ver si aquí tengo más suerte jeje.

Básicamente lo que necesito es lo siguiente:
-Obtener a la información de una empresa en bolsa (precio, volumen, etc. Ahora mismo)
-Obtener histórico de una empresa (pasar una fecha por parámetro o un rango,... como se tenga que hacer, para obtener la información de antes, pero histórica)
-Cambio de moneda (en tiempo real, Euro -> dolar, etc...).

Pues eso, como utilizo la API para poder ejecutar esas 3 funciones... practicamente me da igual como me retorne los valores... aunque preferiria que fuera algo sencillo... tipo:

Hago una petición -> (info X empresa) -> me devuelve formato XML o JSON.

PD: He puesto API Yahoo porque es la que la gente dice que es la mejor... no sé que pasó con google que lo cerraron o algo así? :S

Pero que si hay algo mejor me interesa escuchar.


Muchas gracias.
Avatar de Usuario
X-Trader
Administrador
Mensajes: 12781
Registrado: 06 Sep 2004 10:18
Contactar:

Re: Como usar API Yahoo (programación)

Mensaje por X-Trader »

Hola slayerbleast, la cuestión es dónde quieres recibir esos datos: en una web, en Excel, o quizás algo más sofisticado tipo R o Matlab. En todo caso puedes encontrar la referencia completa de la API tanto para generar CSVs como para YQL (Yahoo! Query Language) en estos enlaces:

CSV: https://code.google.com/p/yahoo-finance ... iki/CSVAPI
YQL: https://developer.yahoo.com/yql/

Si especificas un poco más sobre dónde quieres trabajar con la info, intento ayudarte.

Saludos,
X-Trader
"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."
slayerbleast
Mensajes: 7
Registrado: 02 Sep 2014 13:03

Re: Como usar API Yahoo (programación)

Mensaje por slayerbleast »

Gracias por contestar,

por si no había quedado claro, estoy desarrollando una aplicación web con php y mysql.
Una de las funcionalidades que necesito es tener todas las empresas del IBEX-35, DOW-JONES, etc... fichadas, o sea en mi bbdd tener toda la información de las empresas para poder mostrarlo, y ir actualizándose automáticamente.

Para estar todo actualizado tenía pensado programar un CRON que cada día en el cierre de cada mercado, se ejecutase para recibir el valor de todas las empresas y guardarlo, por eso lo de usar el API.
Evidentemente el día antes de ponerlo todo en marcha, tendré que hacer la consulta histórica, y guardar absolutamente todo hasta la fecha actual.


Me he estado mirando los 2 links y bueno ahora lo entiendo bastante mejor, el del csv está bastante sencillito y creo que ya podría usarlo bien pero no sería la mejor opción ya que des de la web se enviaría la petición, se descargaría el fichero csv... etc, un poco lío pero podría lidiar con ello, pero al intentar consultar sobre un intervalo, de faba error 404 not found :S.

Luego el YQL parece mucho más competente y parece más correcto para usar precisamente para lo que necesito... el problema es que no veo muchos ejemplos, los que hay son sobre obtener información geológica?, y hay una barbaridad de cosas.... si me pudieras dar algunos ejemplos de como mostrar la información que necesito... precio de las acciones, histórico, etc...

Muchas gracias.
Avatar de Usuario
X-Trader
Administrador
Mensajes: 12781
Registrado: 06 Sep 2004 10:18
Contactar:

Re: Como usar API Yahoo (programación)

Mensaje por X-Trader »

Hola slayerbleast, creo que este artículo te va a resolver todas las dudas ;)

http://www.jarloo.com/get-yahoo-finance ... a-via-yql/

Saludos,
X-Trader
"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."
slayerbleast
Mensajes: 7
Registrado: 02 Sep 2014 13:03

Re: Como usar API Yahoo (programación)

Mensaje por slayerbleast »

Se ve todo bien... pero ahora viene la pregunta definitiva....

Solo he podido ver la información de los grandes, tipo google, Apple... etc.

http://query.yahooapis.com/v1/public/yq ... eswithkeys

http://query.yahooapis.com/v1/public/yq ... eswithkeys


Esto está muy bien.... pero la verdad es que necesito poder ver otros mercados.... el de IBEX-35 creo que es el más importante para mi... y no sé como obtenerlo...

Solo encuentro queries de este estilo: select * from yahoo.finance.quotes where symbol in (' ').
Donde veo los símbolos de todas las empresas???? y es más... con 4 chars difícil que se codifiquen todas las empresas jejeje
Y si no pongo where que sería por verlo todo, me dice que no se puede

He buscado inditex por ejemplo 'ITX' y no sale nada.... debe haber otras queries no? para decirle, where mercado=IBEX35 :/

Es que no si puedo acceder a otros mercados todo esto... creo que no servirá para nada....

Avatar de Usuario
X-Trader
Administrador
Mensajes: 12781
Registrado: 06 Sep 2004 10:18
Contactar:

Re: Como usar API Yahoo (programación)

Mensaje por X-Trader »

Es sencillo, tienes que buscar el ticker de cada valor. Por ejemplo para Inditex no es ITX sino ITX.MC. Te facilito la taerea: puedes encontrar la lista de componentes del IBEX 35 con sus símbolos en este enlace ;) 8) :

https://es.finance.yahoo.com/q/cp?s=^IBEX


Saludos,
X-Trader
"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."
slayerbleast
Mensajes: 7
Registrado: 02 Sep 2014 13:03

Re: Como usar API Yahoo (programación)

Mensaje por slayerbleast »

Bufff Me has ayudado mucho, pero es que no me está funcionando nada bien esto... quiero decir todo está de forma muy ambigua... para empezar estoy recopilando la información de la tabla yahoo.finance.quotes que realmente no sé donde carajos está, pero parece ser que es como una opentable? comunity table? O sea no es por decirlo de alguna manera "oficial"?

Digo esto porque hay valores que no salen... y esto es como estar jugando a ciegas...

Mi código de testeo es el siguiente:
$company = "'AAPL'";
$yql_base_url = "http://query.yahooapis.com/v1/public/yql";
$yql_query = "select * from yahoo.finance.quotes where symbol in ($company)";
$yql_query_url = $yql_base_url . "?q=" . urlencode($yql_query);
$yql_query_url .= "&env=http://datatables.org/alltables.env";
$yql_query_url .= "&format=json";
$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($session);
$phpObj = json_decode($json);

print_r($phpObj);



Con apple la cosa funciona estupendamente:

stdClass Object ( [query] => stdClass Object ( [count] => 1 [created] => 2014-09-05T09:10:52Z [lang] => en-US [results] => stdClass Object ( [quote] => stdClass Object ( [symbol] => AAPL [Ask] => 98.13 [AverageDailyVolume] => 49914100 [Bid] => 98.08 [AskRealtime] => 98.13 [BidRealtime] => 98.08 [BookValue] => 20.193 [Change_PercentChange] => -0.82 - -0.83% [Change] => -0.82 [Commission] => [Currency] => USD [ChangeRealtime] => -0.82 [AfterHoursChangeRealtime] => N/A - N/A [DividendShare] => 1.8114 [LastTradeDate] => 9/4/2014 [TradeDate] => [EarningsShare] => 6.20 [ErrorIndicationreturnedforsymbolchangedinvalid] => [EPSEstimateCurrentYear] => 6.33 [EPSEstimateNextYear] => 7.05 [EPSEstimateNextQuarter] => 2.33 [DaysLow] => 97.79 [DaysHigh] => 100.09 [YearLow] => 63.8886 [YearHigh] => 103.74 [HoldingsGainPercent] => - - - [AnnualizedGain] => [HoldingsGain] => [HoldingsGainPercentRealtime] => N/A - N/A [HoldingsGainRealtime] => [MoreInfo] => cnsprmiIed [OrderBookRealtime] => [MarketCapitalization] => 587.5B [MarketCapRealtime] => [EBITDA] => 59.128B [ChangeFromYearLow] => +34.2314 [PercentChangeFromYearLow] => +53.58% [LastTradeRealtimeWithTime] => N/A - 98.12 [ChangePercentRealtime] => N/A - -0.83% [ChangeFromYearHigh] => -5.62 [PercebtChangeFromYearHigh] => -5.42% [LastTradeWithTime] => Sep 4 - 98.12 [LastTradePriceOnly] => 98.12 [HighLimit] => [LowLimit] => [DaysRange] => 97.79 - 100.09 [DaysRangeRealtime] => N/A - N/A [FiftydayMovingAverage] => 97.9071 [TwoHundreddayMovingAverage] => 87.147 [ChangeFromTwoHundreddayMovingAverage] => +10.973 [PercentChangeFromTwoHundreddayMovingAverage] => +12.59% [ChangeFromFiftydayMovingAverage] => +0.2129 [PercentChangeFromFiftydayMovingAverage] => +0.22% [Name] => Apple Inc. [Notes] => [Open] => 99.00 [PreviousClose] => 98.94 [PricePaid] => [ChangeinPercent] => -0.83% [PriceSales] => 3.33 [PriceBook] => 4.90 [ExDividendDate] => Aug 7 [PERatio] => 15.96 [DividendPayDate] => Aug 14 [PERatioRealtime] => [PEGRatio] => 1.28 [PriceEPSEstimateCurrentYear] => 15.63 [PriceEPSEstimateNextYear] => 14.03 [Symbol] => AAPL [SharesOwned] => [ShortRatio] => 1.70 [LastTradeTime] => 4:15pm [TickerTrend] => ====== [OneyrTargetPrice] => 106.83 [Volume] => 85723576 [HoldingsValue] => [HoldingsValueRealtime] => [YearRange] => 63.8886 - 103.74 [DaysValueChange] => - - -0.83% [DaysValueChangeRealtime] => N/A - N/A [StockExchange] => NasdaqNM [DividendYield] => 1.83 [PercentChange] => -0.83% ) ) ) )



Pero si pongo por ejemplo una empresa del IBEX 35, DIA por ejemplo:
que sería ponerlo así no:
$company = "'DIA.MC'";

salen 2 tipos de errores, o todas las columnas vacías:

stdClass Object ( [query] => stdClass Object ( [count] => 1 [created] => 2014-09-05T09:15:52Z [lang] => en-US [results] => stdClass Object ( [quote] => stdClass Object ( [symbol] => DIA.MC [Ask] => [AverageDailyVolume] => 0 [Bid] => [AskRealtime] => [BidRealtime] => [BookValue] => [Change_PercentChange] => N/A - N/A [Change] => [Commission] => [Currency] => [ChangeRealtime] => 0.00 [AfterHoursChangeRealtime] => N/A - N/A [DividendShare] => [LastTradeDate] => [TradeDate] => [EarningsShare] => [ErrorIndicationreturnedforsymbolchangedinvalid] => No such ticker symbol. Try Symbol Lookup (Look up: DIA.MC) [EPSEstimateCurrentYear] => [EPSEstimateNextYear] => [EPSEstimateNextQuarter] => [DaysLow] => [DaysHigh] => [YearLow] => [YearHigh] => [HoldingsGainPercent] => - [AnnualizedGain] => [HoldingsGain] => [HoldingsGainPercentRealtime] => N/A - N/A [HoldingsGainRealtime] => [MoreInfo] => n [OrderBookRealtime] => [MarketCapitalization] => [MarketCapRealtime] => [EBITDA] => [ChangeFromYearLow] => [PercentChangeFromYearLow] => [LastTradeRealtimeWithTime] => N/A - 0.00 [ChangePercentRealtime] => N/A - 0.00% [ChangeFromYearHigh] => [PercebtChangeFromYearHigh] => [LastTradeWithTime] => N/A - 0.00 [LastTradePriceOnly] => 0.00 [HighLimit] => [LowLimit] => [DaysRange] => N/A - N/A [DaysRangeRealtime] => N/A - N/A [FiftydayMovingAverage] => [TwoHundreddayMovingAverage] => [ChangeFromTwoHundreddayMovingAverage] => [PercentChangeFromTwoHundreddayMovingAverage] => [ChangeFromFiftydayMovingAverage] => [PercentChangeFromFiftydayMovingAverage] => [Name] => DIA.MC [Notes] => [Open] => [PreviousClose] => [PricePaid] => [ChangeinPercent] => [PriceSales] => [PriceBook] => [ExDividendDate] => [PERatio] => [DividendPayDate] => [PERatioRealtime] => [PEGRatio] => [PriceEPSEstimateCurrentYear] => [PriceEPSEstimateNextYear] => [Symbol] => DIA.MC [SharesOwned] => [ShortRatio] => [LastTradeTime] => [TickerTrend] => [OneyrTargetPrice] => [Volume] => [HoldingsValue] => [HoldingsValueRealtime] => [YearRange] => N/A - N/A [DaysValueChange] => - 0.00% [DaysValueChangeRealtime] => N/A - N/A [StockExchange] => [DividendYield] => [PercentChange] => N/A ) ) ) )

o sin resultados:

stdClass Object ( [query] => stdClass Object ( [count] => 0 [created] => 2014-09-05T09:12:38Z [lang] => en-US [results] => ) )



Para probar he ido a otros mercados y parece que alguno funciona, por ejemplo en DAX: ADS.DE Adidas AG
pues cambio a
$company = "'ADS.DE'"; y tachán funciona:

stdClass Object ( [query] => stdClass Object ( [count] => 1 [created] => 2014-09-05T09:19:18Z [lang] => en-US [results] => stdClass Object ( [quote] => stdClass Object ( [symbol] => ADS.DE [Ask] => 59.46 [AverageDailyVolume] => 1717993 [Bid] => 59.41 [AskRealtime] => 59.46 [BidRealtime] => 59.41 [BookValue] => 26.351 [Change_PercentChange] => +0.239 - +0.40% [Change] => +0.239 [Commission] => [Currency] => EUR [ChangeRealtime] => +0.239 [AfterHoursChangeRealtime] => N/A - N/A [DividendShare] => 1.125 [LastTradeDate] => 9/5/2014 [TradeDate] => [EarningsShare] => 3.131 [ErrorIndicationreturnedforsymbolchangedinvalid] => [EPSEstimateCurrentYear] => 0.00 [EPSEstimateNextYear] => 0.00 [EPSEstimateNextQuarter] => 0.00 [DaysLow] => 59.14 [DaysHigh] => 59.60 [YearLow] => 54.16 [YearHigh] => 93.22 [HoldingsGainPercent] => - - - [AnnualizedGain] => [HoldingsGain] => [HoldingsGainPercentRealtime] => N/A - N/A [HoldingsGainRealtime] => [MoreInfo] => cnpI [OrderBookRealtime] => [MarketCapitalization] => 12.440B [MarketCapRealtime] => [EBITDA] => 1.251B [ChangeFromYearLow] => +5.299 [PercentChangeFromYearLow] => +9.78% [LastTradeRealtimeWithTime] => N/A - 59.459 [ChangePercentRealtime] => N/A - +0.40% [ChangeFromYearHigh] => -33.761 [PercebtChangeFromYearHigh] => -36.22% [LastTradeWithTime] => 5:03am - 59.459 [LastTradePriceOnly] => 59.459 [HighLimit] => [LowLimit] => [DaysRange] => 59.14 - 59.60 [DaysRangeRealtime] => N/A - N/A [FiftydayMovingAverage] => 62.8403 [TwoHundreddayMovingAverage] => 73.9558 [ChangeFromTwoHundreddayMovingAverage] => -14.4968 [PercentChangeFromTwoHundreddayMovingAverage] => -19.60% [ChangeFromFiftydayMovingAverage] => -3.3813 [PercentChangeFromFiftydayMovingAverage] => -5.38% [Name] => ADIDAS N [Notes] => [Open] => 59.22 [PreviousClose] => 59.22 [PricePaid] => [ChangeinPercent] => +0.40% [PriceSales] => 0.86 [PriceBook] => 2.25 [ExDividendDate] => May 9 [PERatio] => 18.91 [DividendPayDate] => [PERatioRealtime] => [PEGRatio] => [PriceEPSEstimateCurrentYear] => [PriceEPSEstimateNextYear] => [Symbol] => ADS.DE [SharesOwned] => [ShortRatio] => [LastTradeTime] => 5:03am [TickerTrend] => -+=+-+ [OneyrTargetPrice] => [Volume] => 333449 [HoldingsValue] => [HoldingsValueRealtime] => [YearRange] => 54.16 - 93.22 [DaysValueChange] => - - +0.40% [DaysValueChangeRealtime] => N/A - N/A [StockExchange] => XETRA [DividendYield] => 1.90 [PercentChange] => +0.40% ) ) ) )


En fin que pasa, que el IBEX35 no vale nada internacionalmente? jeje

Es que ahora mismo ya lo tendría todo para empezar mi aplicación.... pero macho es que el IBEX35 precisamente sería el más importante de tener...
slayerbleast
Mensajes: 7
Registrado: 02 Sep 2014 13:03

Re: Como usar API Yahoo (programación)

Mensaje por slayerbleast »

Juhmm esto se quedó parado... pls alguna ayuda?

es que de verdad que no entiendo porque no me funciona... hay infinitas páginas de la bolsa, que tienen la información actualizada al minuto... como lo hacen???

Tiene que ser algo sencillo, un webservice, donde tu le envías la petición mediante la url, con sus parámetros y el servidor te devuelve sencillamente la información en XML o JSON.


La API Finance de yahoo al final logré entender como iba, el YQL... pero como dije en el anterior mensaje, es muy confuso todo.... veo que los mercados de EEUU están todos manteniendo la información al día... pero a la que pongo un mercado menos importante ya no sale información...


Mi pregunta es como lo hacen las páginas web donde accedemos todos nosotros para ver como van todos los mercados financieros??? además que tienen un montón, algunos que no sabía ni que existían...
pk2
Mensajes: 1
Registrado: 12 Abr 2018 10:09

Re: Como usar API Yahoo (programación)

Mensaje por pk2 »

Buenas...

Lo conseguiste?

Estoy muy interesado en hacer lo mismo... puedes ayudarme?

Gracias
bugler1
Mensajes: 876
Registrado: 04 Dic 2013 08:56

Re: Como usar API Yahoo (programación)

Mensaje por bugler1 »

He recuperado mis viejos ficheros de php para cargar datos de yahoo. Ahora lo hago con python.
A ver si esto te vale:

Código: Seleccionar todo

function get_yahoo_data_csv($symbol, $echo=false) {
	//$symbol = urlencode($symbol);
	$url = "http://ichart.finance.yahoo.com/table.csv?s=$symbol&a=$_SESSION[monthfrom]&b=01&c=$_SESSION[yearfrom]&d=$_SESSION[monthto]&e=31&f=$_SESSION[yearto]&g=d";
	to_log($url);
		//$url = "http://ichart.finance.yahoo.com/table.csv?s=$symbol&a=0&b=11&c=2015&d=31&e=0&f=2015&g=d";
	if (($gestor = fopen($url, "r")) !== FALSE) {
		$count = -1;
		$bars = array();
		while (($datos = fgetcsv($gestor, 1000, ",")) !== FALSE) { 
			$count++;
			if($count == 0) continue; // ignores first line with field names
			$bar = array();
			$ratio = $datos[ADJCLOSE] / $datos[CLOSE];
			$bar['day'] = $datos[DAY];
			$bar['open'] = $datos[OPEN]*$ratio;
			$bar['high'] = $datos[HIGH]*$ratio;
			$bar['low'] = $datos[LOW]*$ratio;
			$bar['close'] = $datos[ADJCLOSE]
			$bar['volume'] = $datos[VOLUME]*$ratio;
			$bars[] = $bar;
			//echo $count++."->".$symbol."<br>";
		} 
		fclose($gestor);		
	}
	return $bars;
}	
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Data Feeds e Históricos”