Foros del Web » Programando para Internet » PHP »

Sacar datos de una URL

Estas en el tema de Sacar datos de una URL en el foro de PHP en Foros del Web. Muy buenas, estoy tratando de sacar el cambio de divisa en tiempo real (o al menos con unos 20 minutos de retraso como mucho). Utilizo ...
  #1 (permalink)  
Antiguo 29/05/2017, 07:51
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 7 meses
Puntos: 3
Sacar datos de una URL

Muy buenas, estoy tratando de sacar el cambio de divisa en tiempo real (o al menos con unos 20 minutos de retraso como mucho). Utilizo yahoo finance. Llamo a la URL así:

Código PHP:
$url 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22GBPEUR%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=';                
    
$data file_get_contents($url);

    echo 
$data
Ésta URL me devuelve lo siguiente:

{"query":{"count":1,"created":"2017-05-29T13:43:39Z","lang":"en-US","diagnostics":{"url":[{"execution-start-time":"0","execution-stop-time":"1","execution-time":"1","content":"http://www.datatables.org/yahoo/finance/yahoo.finance.xchange.xml"},{"execution-start-time":"3","execution-stop-time":"4","execution-time":"1","content":"http://download.finance.yahoo.com/d/quotes.csv?s=GBPEUR=X&f=snl1d1t1ab"}],"publiclyCallable":"true","cache":{"execution-start-time":"2","execution-stop-time":"3","execution-time":"1","method":"GET","type":"MEMCACHED","conte nt":"128fd670d335fd8e3695c5d60f4b7ab5"},"query":{" execution-start-time":"3","execution-stop-time":"4","execution-time":"1","content":"select * from csv where url='http://download.finance.yahoo.com/d/quotes.csv?s=GBPEUR=X&f=snl1d1t1ab' and columns='Symbol,Name,Rate,Date,Time,Ask,Bid'"},"ja vascript":{"execution-start-time":"2","execution-stop-time":"4","execution-time":"2","instructions-used":"18662","table-name":"yahoo.finance.xchange"},"user-time":"5","service-time":"3","build-version":"2.0.134"},"results":{"rate":{"id":"GBPEU R","Name":"GBP/EUR","Rate":"1.1479","Date":"5/29/2017","Time":"9:14am","Ask":"1.1483","Bid":"1.1479 "}}}}

De aquí, lo que quiero sacar es en "results" -> "rate" -> "Rate". Que en este caso es 1.1479....hay alguna manera de sacarlo sin tener que utilizar funciones de cadenas para llegar a ese dato?

Gracias!!!
  #2 (permalink)  
Antiguo 29/05/2017, 09:02
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 8 meses
Puntos: 379
Respuesta: Sacar datos de una URL

utiliza json_decode y luego con un print_r ve que estructura tiene y sepas como acceder a la info que quieres
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 29/05/2017, 10:36
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: Sacar datos de una URL

Código PHP:
Ver original
  1. $url = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22GBPEUR%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=';    
  2.              
  3. $data = file_get_contents($url);
  4. $data = json_decode($data);
  5.  
  6.  
  7. echo $data->query->results->rate->Rate;
  #4 (permalink)  
Antiguo 30/05/2017, 01:05
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Sacar datos de una URL

Cita:
Iniciado por __SDP__ Ver Mensaje
Código PHP:
Ver original
  1. $url = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22GBPEUR%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=';    
  2.              
  3. $data = file_get_contents($url);
  4. $data = json_decode($data);
  5.  
  6.  
  7. echo $data->query->results->rate->Rate;


Muchísimas gracias, funciona a la perfección.

Un saludo!!
  #5 (permalink)  
Antiguo 30/05/2017, 01:11
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Sacar datos de una URL

Por cierto, siguiendo la misma estructura que antes, para sacar la cotizacion de una empresa en bolsa, me sale esto:

// [ { "id": "459189873320971" ,"t" : "SAN" ,"e" : "BME" ,"l" : "5.86" ,"l_fix" : "5.86" ,"l_cur" : "€5.86" ,"s": "0" ,"ltt":"5:35PM GMT+2" ,"lt" : "May 29, 5:35PM GMT+2" ,"lt_dts" : "2017-05-29T17:35:12Z" ,"c" : "0.00" ,"c_fix" : "0.00" ,"cp" : "0.00" ,"cp_fix" : "0.00" ,"ccol" : "chb" ,"pcls_fix" : "5.864" } ]

Quiero sacar el valor en negrita: 5.86.

Sin embargo, si uso:

Código PHP:
$url1 'https://www.google.com/finance/info?client=ig&q=BME:SAN';                
    
$data1 file_get_contents($url1);
    
$data1 json_decode($data1);
 
    echo 
$data1->l
como el ejemplo que me diste, no me muestra nada. No puedo aplicar la misma solución a este ejemplo?

Gracias y perdona las molestias.

Un saludo!!
  #6 (permalink)  
Antiguo 30/05/2017, 08:13
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 4 meses
Puntos: 154
Respuesta: Sacar datos de una URL

Hola bienpiyao,

Como te han comentado, primero debes imprimir el resultado para, en base a eso, ver la forma de acceder al dato que necesitas.
  #7 (permalink)  
Antiguo 30/05/2017, 23:58
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Sacar datos de una URL

Cita:
Iniciado por rbczgz Ver Mensaje
Hola bienpiyao,

Como te han comentado, primero debes imprimir el resultado para, en base a eso, ver la forma de acceder al dato que necesitas.
Buenas, en mi anterior mensaje puse lo que sale al imprimirlo:

// [ { "id": "459189873320971" ,"t" : "SAN" ,"e" : "BME" ,"l" : "5.86" ,"l_fix" : "5.86" ,"l_cur" : "€5.86" ,"s": "0" ,"ltt":"5:35PM GMT+2" ,"lt" : "May 29, 5:35PM GMT+2" ,"lt_dts" : "2017-05-29T17:35:12Z" ,"c" : "0.00" ,"c_fix" : "0.00" ,"cp" : "0.00" ,"cp_fix" : "0.00" ,"ccol" : "chb" ,"pcls_fix" : "5.864" } ]

Sin embargo, aplicando la solución que me dio __SDP__, no obtengo el resultado que quiero. Supongo que, una de dos, o no se puede aplicar a este caso o no la he aplicado bien a este caso particular.

Gracias!!!
  #8 (permalink)  
Antiguo 02/06/2017, 00:04
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Sacar datos de una URL

Buenas, después de mucho probar la he sacado así:

Código PHP:
$url 'https://www.google.com/finance/info?client=ig&q=BME:SAN';                
$data file_get_contents($url);
                
$cotDivisa substr($datastrpos($data,"l") + 6,4);

echo 
$cotDivisa
Lo cual me parece super cutre además de poco dinámico, ya que si cambia un solo carácter en algún momento, tengo que cambiar la función...es ésta la única manera de hacerlo? No hay otra manera mejor? (seguro que sí, pero soy incapaz de hacer más)...

Gracias por anticipado!
  #9 (permalink)  
Antiguo 03/06/2017, 22:50
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: Sacar datos de una URL

el problemas es que llega como string pero interiormente como objeto y lo limpie y lo deje como objeto y ahora se puede acceder igual que el anterior

Código PHP:
Ver original
  1. $url = 'https://www.google.com/finance/info?client=ig&q=BME:SAN';
  2. $data = file_get_contents($url);
  3.  
  4. $d = trim(substr($data, 5, -2));
  5. $d = json_decode($d);
  6. //print_r($d);
  7. echo $d->l;


Última edición por __SDP__; 03/06/2017 a las 22:57
  #10 (permalink)  
Antiguo 05/06/2017, 06:17
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Sacar datos de una URL

Cita:
Iniciado por __SDP__ Ver Mensaje
el problemas es que llega como string pero interiormente como objeto y lo limpie y lo deje como objeto y ahora se puede acceder igual que el anterior

Código PHP:
Ver original
  1. $url = 'https://www.google.com/finance/info?client=ig&q=BME:SAN';
  2. $data = file_get_contents($url);
  3.  
  4. $d = trim(substr($data, 5, -2));
  5. $d = json_decode($d);
  6. //print_r($d);
  7. echo $d->l;

:apla uso:

Eres un crack! Funciona a la perfección, muchísimas gracias!! (Como se puede observar, estoy muy verde con el tema json...).

Ahora tengo una nueva, y super abusando de tu amabilidad y sabiduría, la dejo por aquí a ver si hay suerte...

Estoy intentando sacar unos cuantos parámetros de un valor en bolsa. He probado varios scrips y no consigo dar con el dato (la cotización y demás es más sencillo). La URL que creo que puede contener el dato es esta:

Código:
https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22BME:SAN%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
Esto me muestra lo siguiente:

Código:
{
    "query": {
    "count": 0,
        "created": "2017-06-02T11:01:13Z",
        "lang": "en-GB",
        "diagnostics": {
            "url": [
                {
                    "execution-start-time": "0",
                    "execution-stop-time": "1",
                    "execution-time": "1",
                    "content": "http://www.datatables.org/yahoo/finance/yahoo.finance.quotes.xml"
                },
                {
                    "execution-start-time": "4",
                    "execution-stop-time": "10",
                    "execution-time": "6",
                    "content": "http://download.finance.yahoo.com/d/quotes.csv?f=aa2bb2b3b4cc1c3c4c6c8dd1d2ee1e7e8e9ghjkg1g3g4g5g6ii5j1j3j4j5j6k1k2k4k5ll1l2l3mm2m3m4m5m6m7m8nn4opp1p2p5p6qrr1r2r5r6r7ss1s7t1t7t8vv1v7ww1w4xy&s=BME%3ASAN"
                }
            ],
                "publiclyCallable": "true",
                "cache": {
                "execution-start-time": "3",
                    "execution-stop-time": "3",
                    "execution-time": "0",
                    "method": "GET",
                    "type": "MEMCACHED",
                    "content": "5d1e1de680846a307c9874dc3d6878dc"
            },
            "csv": "Column mismatch: [Ask, AverageDailyVolume, Bid, AskRealtime, BidRealtime, BookValue, Change&PercentChange, Change, Commission, Currency, ChangeRealtime, AfterHoursChangeRealtime, DividendShare, LastTradeDate, TradeDate, EarningsShare, ErrorIndicationreturnedforsymbolchangedinvalid, EPSEstimateCurrentYear, EPSEstimateNextYear, EPSEstimateNextQuarter, DaysLow, DaysHigh, YearLow, YearHigh, HoldingsGainPercent, AnnualizedGain, HoldingsGain, HoldingsGainPercentRealtime, HoldingsGainRealtime, MoreInfo, OrderBookRealtime, MarketCapitalization, MarketCapRealtime, EBITDA, ChangeFromYearLow, PercentChangeFromYearLow, LastTradeRealtimeWithTime, ChangePercentRealtime, ChangeFromYearHigh, PercebtChangeFromYearHigh, LastTradeWithTime, LastTradePriceOnly, HighLimit, LowLimit, DaysRange, DaysRangeRealtime, FiftydayMovingAverage, TwoHundreddayMovingAverage, ChangeFromTwoHundreddayMovingAverage, PercentChangeFromTwoHundreddayMovingAverage, ChangeFromFiftydayMovingAverage, PercentChangeFromFiftydayMovingAverage, Name, Notes, Open, PreviousClose, PricePaid, ChangeinPercent, PriceSales, PriceBook, ExDividendDate, PERatio, DividendPayDate, PERatioRealtime, PEGRatio, PriceEPSEstimateCurrentYear, PriceEPSEstimateNextYear, Symbol, SharesOwned, ShortRatio, LastTradeTime, TickerTrend, OneyrTargetPrice, Volume, HoldingsValue, HoldingsValueRealtime, YearRange, DaysValueChange, DaysValueChangeRealtime, StockExchange, DividendYield] vs ",
                "query": {
                "execution-start-time": "3",
                    "execution-stop-time": "10",
                    "execution-time": "7",
                    "params": "{url=[http://download.finance.yahoo.com/d/quotes.csv?f=aa2bb2b3b4cc1c3c4c6c8dd1d2ee1e7e8e9ghjkg1g3g4g5g6ii5j1j3j4j5j6k1k2k4k5ll1l2l3mm2m3m4m5m6m7m8nn4opp1p2p5p6qrr1r2r5r6r7ss1s7t1t7t8vv1v7ww1w4xy&s=BME%3ASAN]}",
                    "content": "select * from csv where url=@url and columns='Ask,AverageDailyVolume,Bid,AskRealtime,BidRealtime,BookValue,Change&PercentChange,Change,Commission,Currency,ChangeRealtime,AfterHoursChangeRealtime,DividendShare,LastTradeDate,TradeDate,EarningsShare,ErrorIndicationreturnedforsymbolchangedinvalid,EPSEstimateCurrentYear,EPSEstimateNextYear,EPSEstimateNextQuarter,DaysLow,DaysHigh,YearLow,YearHigh,HoldingsGainPercent,AnnualizedGain,HoldingsGain,HoldingsGainPercentRealtime,HoldingsGainRealtime,MoreInfo,OrderBookRealtime,MarketCapitalization,MarketCapRealtime,EBITDA,ChangeFromYearLow,PercentChangeFromYearLow,LastTradeRealtimeWithTime,ChangePercentRealtime,ChangeFromYearHigh,PercebtChangeFromYearHigh,LastTradeWithTime,LastTradePriceOnly,HighLimit,LowLimit,DaysRange,DaysRangeRealtime,FiftydayMovingAverage,TwoHundreddayMovingAverage,ChangeFromTwoHundreddayMovingAverage,PercentChangeFromTwoHundreddayMovingAverage,ChangeFromFiftydayMovingAverage,PercentChangeFromFiftydayMovingAverage,Name,Notes,Open,PreviousClose,PricePaid,ChangeinPercent,PriceSales,PriceBook,ExDividendDate,PERatio,DividendPayDate,PERatioRealtime,PEGRatio,PriceEPSEstimateCurrentYear,PriceEPSEstimateNextYear,Symbol,SharesOwned,ShortRatio,LastTradeTime,TickerTrend,OneyrTargetPrice,Volume,HoldingsValue,HoldingsValueRealtime,YearRange,DaysValueChange,DaysValueChangeRealtime,StockExchange,DividendYield'"
            },
            "javascript": {
                "execution-start-time": "2",
                    "execution-stop-time": "10",
                    "execution-time": "7",
                    "instructions-used": "12000",
                    "table-name": "yahoo.finance.quotes"
            },
            "user-time": "10",
                "service-time": "7",
                "build-version": "2.0.134"
        },
        "results": null
    }
}
Me interesaría poder acceder a la parte que he puesto en negrita, pues contiene todos los parámetros que me gustaría obtener, como por ejemplo el PERatio...¿es posible acceder a ellos? ¿Cómo se podría hacer? ¿conocéis alguna alternativa mejor para obtener estos valores que no sea esa URL?

Muchas gracias por anticipado.

Un saludo!!
  #11 (permalink)  
Antiguo 05/06/2017, 23:01
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: Sacar datos de una URL

Código PHP:
Ver original
  1. $url3 = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22BME:SAN%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
  2. ';
  3.  
  4. $data3 = file_get_contents($url3);
  5. $d3 = trim(substr($data3, 7, -2));
  6. $d3 = json_decode($d3);
  7.  
  8. $arr =  explode("columns='", $d3->query->diagnostics->query->content);
  9. $info = substr($arr[1], 0, -1);
  10.  
  11. echo $info;


espero que te sirva
  #12 (permalink)  
Antiguo 06/06/2017, 00:39
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Sacar datos de una URL

Buenas de nuevo __SDP__,

Te agradezco tu tiempo pero no imprime nada. Creo que en realidad esa URL no contiene los datos que marco en negrita. Debe haber una manera de sacar estos datos, pero definitivamente no es con esa URL.

Es bastante complicado de sacar porque llevo varios días investigando y no he encontrado aún ningún scrip que los saque. Para excel o google spreadsheet es super sencillo, pero para php o javascript no.

Hay alguna manera de "exportar" los datos de una google spreadsheet en tiempo real y usarlos en php? Alguien sabría algún método para poder obtener dichos valores?

En cualquier caso, muchísimas gracias por tu tiempo y paciencia. Me has ayudado muchísimo.

Un saludo!!
  #13 (permalink)  
Antiguo 06/06/2017, 10:50
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: Sacar datos de una URL

la acabo de ejecutar y me devuelve esto que es lo que pusiste en negrita

Ask,AverageDailyVolume,Bid,AskRealtime,BidRealtime ,BookValue,Change&PercentChange,Change,Commission, Currency,ChangeRealtime,AfterHoursChangeRealtime,D ividendShare,LastTradeDate,TradeDate,EarningsShare ,ErrorIndicationreturnedforsymbolchangedinvalid,EP SEstimateCurrentYear,EPSEstimateNextYear,EPSEstima teNextQuarter,DaysLow,DaysHigh,YearLow,YearHigh,Ho ldingsGainPercent,AnnualizedGain,HoldingsGain,Hold ingsGainPercentRealtime,HoldingsGainRealtime,MoreI nfo,OrderBookRealtime,MarketCapitalization,MarketC apRealtime,EBITDA,ChangeFromYearLow,PercentChangeF romYearLow,LastTradeRealtimeWithTime,ChangePercent Realtime,ChangeFromYearHigh,PercebtChangeFromYearH igh,LastTradeWithTime,LastTradePriceOnly,HighLimit ,LowLimit,DaysRange,DaysRangeRealtime,FiftydayMovi ngAverage,TwoHundreddayMovingAverage,ChangeFromTwo HundreddayMovingAverage,PercentChangeFromTwoHundre ddayMovingAverage,ChangeFromFiftydayMovingAverage, PercentChangeFromFiftydayMovingAverage,Name,Notes, Open,PreviousClose,PricePaid,ChangeinPercent,Price Sales,PriceBook,ExDividendDate,PERatio,DividendPay Date,PERatioRealtime,PEGRatio,PriceEPSEstimateCurr entYear,PriceEPSEstimateNextYear,Symbol,SharesOwne d,ShortRatio,LastTradeTime,TickerTrend,OneyrTarget Price,Volume,HoldingsValue,HoldingsValueRealtime,Y earRange,DaysValueChange,DaysValueChangeRealtime,S tockExchange,DividendYield
  #14 (permalink)  
Antiguo 07/06/2017, 00:29
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Sacar datos de una URL

Buenas compi,

Es super extraño. Lo he probado metiendo el código en un archivo con más cosas y no imprime nada. También lo he probado en un archivo nuevo llamado test.php y no imprime nada tampoco :S. Acabo de probar metiendo un echo 'test'; y me imprime "test" pero no lo otro :S...qué puedo estar haciendo mal? qué raro...

Código PHP:
<?php 

echo 'test';

$url 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22BME:SAN%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=';
 
$data3 file_get_contents($url);
$d3 trim(substr($data37, -2));
$d3 json_decode($d3);
 
$arr =  explode("columns='"$d3->query->diagnostics->query->content);
$info substr($arr[1], 0, -1);
 
echo 
$info;

?>
Es muy raro. No tengo ninguna duda de que el código funciona, pero no consigo dar con lo que estoy haciendo mal...alguna idea?

Muchas gracias por tu paciencia.

Un saludo!!
  #15 (permalink)  
Antiguo 07/06/2017, 15:04
 
Fecha de Ingreso: agosto-2010
Ubicación: santiago, CHILE
Mensajes: 564
Antigüedad: 13 años, 7 meses
Puntos: 9
Respuesta: Sacar datos de una URL

jajaja nose porque pasa eso pero encontre la solucion, hay que dejar la url tal cual como se ve

al final que la comilla simple y el punto y coma queden solos una linea mas abajo

Código PHP:
Ver original
  1. $url = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22BME:SAN%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
  2. ';
  #16 (permalink)  
Antiguo 08/06/2017, 07:28
 
Fecha de Ingreso: agosto-2009
Mensajes: 216
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Sacar datos de una URL

Compi, me vas a matar, pero juro que no imprime nada. He copiado tu código tal cual y nada. Ya estoy intrigado de saber por qué no me imprime nada a mí...tendrá que ver el tipo de configuración que usemos? El navegador usado? La ruta en la que se coloca el archivo? No sé, estoy diciendo muchas tonterías, pero no consigo ver dónde está el error...

Muchas gracias.

Etiquetas: select, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:14.