2016-07-13 13 views
36

Per un po 'di tempo ho utilizzato la seguente API REST per interrogare Yahoo finanza per i prezzi correnti. È documentato in diversi post di overflow dello stack, ad es. Yahoo finance webservice e altrove in .Il servizio web di finanza di Yahoo è scomparso? API cambiata? Giù temporaneamente?

http://finance.yahoo.com/webservice/v1/symbols/$SYMBOLS/quote?format=json 

dove $ simboli è un elenco delimitato da virgole di indice azionario o simboli.

Ieri la query ha smesso di funzionare, restituendo solo un messaggio "Spostati temporaneamente. Reindirizzamento a ...".

Questo servizio Web è ora chiuso? È stato sostituito da YQL o un'altra API? Le query per una tabella di prezzi storici su "ichart" funzionano ancora. Per esempio,

http://ichart.finance.yahoo.com/table.csv?d=2&e=3&f=2016&g=d&a=0&b=1&c=2011&ignore=.csv&s=$SYMBOL 

Grazie.

+0

Robyn Tippins (Community Manager, YDN): "Sembra alcuni hanno reverse engineering un'API che usano per estrarre i dati finanziari, ma si stanno rompendo nostri Termini di servizio (senza ridistribuzione dei dati finanziari) nel fare questo quindi ti incoraggio a evitare l'uso di questi servizi web. " Le API ufficiali sono: https://developer.yahoo.com/finance/ "Non ci sono problemi con il download dei dati, supponendo che tu rimanga al di sotto dei limiti di velocità, non puoi semplicemente ridistribuirlo". –

+0

Controlla questo altro [dati sorgente API] (https://stackoverflow.com/questions/44030983/yahoo-finance-url-not-working/44495145#44495145) – user2471214

+0

Ti consiglio di utilizzare Alpha Vantage nell'era post Yahoo. Hanno una API di dati di borsa gratuita e funziona davvero bene. Ho scritto un post sul blog: http://www.the-data-wrangler.com/acquiring-stock-market-data-from-alpha-vantage/ –

risposta

5

Sì, sembra Yahoo! ha interrotto l'API di finanza (privata, per lo più non documentata) di Yahoo che molti si affidano da anni ai dati valutari. Abbiamo ricevuto alcune notifiche a riguardo nelle ultime 24 ore. (Edit: Tutte le risposte sembrano essere di ritorno "Not a valid parameter" Suppongo che ci sia una possibilità che possono riaccenderlo, ma non supportano ufficialmente tale API ovunque, per quanto posso dire..)

ho creato Open Exchange Rates circa cinque anni fa, e la nostra API di tasso di cambio ora supporta una comunità di decine di migliaia di sviluppatori - e le loro decine di milioni di utenti - con informazioni accurate e aggiornate.

Per favore sentitevi liberi di dare un'occhiata al nostro servizio Forever Free al https://openexchangerates.org.

nostra API è in un semplice, formato JSON originale, che è in realtà preso piede come un metodo standard per la visualizzazione di prezzi perché è così semplice con cui lavorare (a differenza della API di Yahoo, che ha richiesto di analizzare gli oggetti nidificati oscuri a estrae le informazioni di base che ti servivano ...)

Se hai bisogno di assistenza per il porting da Yahoo! API, saremo felici di aiutarti via email.

(Io sono il fondatore di Aperte Tassi di cambio.)

+5

Grazie per aver confermato le mie osservazioni. Sfortunatamente, non ho (al momento) bisogno di tassi di cambio, ma quando lo farò, controllerò il tuo servizio. Grazie. –

+5

"Open Exchange Rates" sembra non essere libero. In alternativa, forniscici un esempio per la sostituzione di http://finance.yahoo.com/webservice/v1/symbols/$SYMBOLS/quote?format=json – l0pan

+4

Non "Forever Free" – BLuEGoD

3

che sta destinando alla stessa pagina, ma aggiungendo il parametro "bypass = true", che dà un errore.

MODIFICA: La risposta fornita da https://stackoverflow.com/users/6593038/hemant-prasad funziona per me. Quando si modifica l'agente utente su un dispositivo mobile, l'API funziona correttamente e non esegue il reindirizzamento fino a quel momento.

Questo è il codice che sto utilizzando in Java (è per la versione di XML, ma può essere utilizzato per JSON pure):

URL url = new URL ("https://finance.yahoo.com/webservice/v1/symbols/" + stocks + "/quote"); 
HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
urlc.setRequestProperty ("User-Agent", "Mozilla/5.0 (Linux; Android 6.0; MotoE2(4G-LTE) Build/MPI24.65-39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.81 Mobile Safari/537.36"); 
Document xml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse (urlc.getInputStream()); 
+0

Almeno da Safari su OS X, sta aggiungendo il bypass e lamentandosi di un parametro non valido. Su un'altra API (privata, per lo più non documentata). –

+0

Sì, hai ragione. Ho provato con la modalità di navigazione in incognito in Chrome (Linux) e ha attivato il reindirizzamento. Suppongo che non sia successo prima a causa della cache del browser. – Carlos

+0

funziona ancora per te? –

27

stavo affrontando un problema simile da ultimo 2-3 giorni. L'url funziona sullo smartphone, dove sul desktop fornisce l'errore "Non un parametro valido" e il codice HTTP 406.

Questo può essere risolto aggiungendo agente utente come "Mozilla/5.0 (Linux; Android 6.0.1; MotoG3 Build/MPI24.107-55) AppleWebKit/537.36 (KHTML, come Gecko) Chrome/51.0.2704.81 Mobile Safari/537.36 "durante il richiamo della richiesta get.

Ad esempio, se si sta scaricando dal ricciolo in uso php come segue:

curl_setopt($session,CURLOPT_USERAGENT,"Mozilla/5.0 (Linux; Android 6.0.1; MotoG3 Build/MPI24.107-55) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.81 Mobile Safari/537.36"); 

Spero che questo possa risolvere il problema.

+0

Per favore, aiutami a capire un po 'di più il problema, sto emettendo la richiesta di rete da un'app (con Retrofit) e mi sta dando 406 risposte NON ACCETTABILI. Ma quando faccio la stessa richiesta di rete attraverso Chrome nel telefono restituisco risultati corretti (come hai detto tu). Perché dall'app non funziona (è all'interno di un telefono!) –

+0

Ciao Carlos, il server Web riconosce la richiesta da telefono o desktop tramite le informazioni dell'intestazione USERAGENT nel carico utile della richiesta. Quindi, modificare le informazioni dell'intestazione USERAGENT sul telefono come suggerito sopra non fallirà dall'APP durante l'invio della richiesta. –

+0

Grazie per il chiarimento di Hemant, in effetti funziona, non avevo incluso correttamente le mie intestazioni nella richiesta di rete. La tua soluzione funziona al 100%. Mi hai salvato mesi di lavoro con una sola riga, non esagerando. –

6

Dal momento che il servizio non è attivo, io uso il seguente URL per interrogare i dati di Yahoo (per ACA.PA):

Link

Il risultato JSON è diversa, ma ho trovato le informazioni che mi interessa.

Per ulteriori informazioni, visitare la pagina https://developer.yahoo.com/yql/

6

ho avuto lo stesso problema. Ecco l'URL dell'API per tirare le scorte da YAHOO. Spero che questo ti aiuti.

https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22YHOO%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback= 
+0

@ james.garriss È possibile copiare e incollare quel collegamento in alto in un browser e restituisce ancora i dati. Probabilmente si sta facendo qualcosa di sbagliato sul proprio capo. – JetSet

+0

Così fa. Forse il servizio era scaduto il giorno in cui l'ho provato. –

+1

Ottengo risultati NULL – fanjavaid

3

Ho trovato un modo per utilizzare l'API CSV.

link

dove è necessario scrivere il simbolo, i parametri e le colonne.

Usare questo sito per trovare i parametri necessari: http://www.jarloo.com/yahoo_finance/

esempio:

Se avete bisogno di sapere il volume del simbolo sostituire la stringa sl1d1t1c1ohgv con v

e sostituire le colonne symbol%2Cprice%2Cdate%2Ctime%2Cchange%2Ccol1%2Chigh%2Clow%2Cvolume con volume

L'unico problema è che da ta è un pò casuale e non in tempo reale come se fosse nel webservice API

3

Dai un'occhiata a questo eccellente involucro API, disponibili sul NuGet: https://github.com/salmonthinlion/YahooFinanceApi

Get magazzino citazioni

var quotes = await Yahoo.Symbol("AAPL", "GOOG").Tag(Tag.LastTradePriceOnly, Tag,ChangeAndPercentChange, Tag.DaysLow, Tag.DaysHigh).GetAsync(); 
var aapl = quotes["AAPL"]; 
var price = aapl[Tag.LastTradePriceOnly]; 

Get storico dati per uno stock

// You should be able to query data from various markets including US, HK, TW 
var history = await Yahoo.GetHistoricalAsync("AAPL", new DateTime(2016, 1, 1), new DateTime(2016, 7, 1), Period.Daily); 
foreach (var candle in history) 
{ 
    Console.WriteLine($"DateTime: {candle.DateTime}, Open: {candle.Open}, High: {candle.High}, Low: {candle.Low}, Close: {candle.Close}, Volume: {candle.Volume}, AdjustedClose: {candle.AdjustedClose}"); 
} 

ottenere la cronologia dei dividendi per uno stock

// You should be able to query data from various markets including US, HK, TW 
var dividendHistory = await Yahoo.GetHistoricalDividendsAsync("AAPL", new DateTime(2016, 1, 1), new DateTime(2016, 7, 1)); 
foreach (var candle in dividendHistory) 
{ 
    Console.WriteLine($"DateTime: {candle.DateTime}, Dividend: {candle.Dividend}"); 
} 
4

Io sono l'autore di ValueViz su github.

Prezzi giornalieri

È necessario avere familiarità con i servizi RESTful.

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

Prezzi storici

è necessario fornire un intervallo di date:

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

Se non forniscono iniziare o terminare Userà la corrente prima o data:

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

ticker più

Si può solo virgola ticker separati:

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

Tasso limite

tutte le richieste vengono tasso limitata a 10 richieste all'ora. Se desideri registrarti per un'API di accesso completo, inviami DM su Twitter. Riceverai una chiave API da aggiungere all'URL.

Stiamo impostando un account paypal per l'abbonamento a pagamento senza tariffe.

Elenco dei ticker disponibili

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

sto lavorando anche a fornire i dati fondamentali e dati aziendali da EDGAR. Saluti.

0

Anche il Python Yahoo Finance API sembra avere un problema. Ad esempio, se lo si utilizza per cercare, i prezzi delle azioni Amazon mostrano solo gli stessi due valori più e più volte.

from yahoo_finance import Share import time f = open('/tmp/amazon/amzn.csv', 'w') while True: 
    amzn=Share("AMZN") 
    s = amzn.get_price() + "," + amzn.get_trade_datetime() + '\n' 
    print (s) 
    f.write (s) 
    f.flush() 
    time.sleep(5) 
    del amzn 
Problemi correlati