web-dev-qa-db-fra.com

Yahoo a-t-il soudainement arrêté aujourd'hui son API de téléchargement financier?

Cela fait des mois que j'utilise une URL de ce type chez Perl:

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

Aujourd'hui, le 11/01/17, une erreur 999 est renvoyée.

Est-ce un problème ou Yahoo a-t-il mis fin au service?

J'obtiens l'erreur même si j'entre l'URL directement dans un navigateur, par exemple:

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

cela ne semble donc pas être un problème de "miettes".

Remarque: Ce n'est PAS une question à laquelle vous avez déjà répondu! Cela fonctionnait hier. Ce qui s'est passé le premier du mois est suspect.

33
user1067305

Comme indiqué dans les autres réponses et ailleurs (par exemple, assistant monétaire de yahoo - Désolé, impossible de traiter la demande pour l'instant - erreur 999 ), Yahoo a effectivement cessé l'exploitation de l'API Yahoo Finance. Toutefois, pour contourner le problème, vous pouvez accéder à une mine d'informations financières, au format JSON, pour un symbole boursier donné, en envoyant une demande HTTPS GET à: https://finance.yahoo.com/quote/SYMBOL (par exemple https://finance.yahoo.com/quote/MSFT ). Si vous envoyez une requête GET à l'URL ci-dessus, vous constaterez que les données financières sont contenues dans la réponse au format JSON. Le script python) suivant montre comment analyser des valeurs individuelles susceptibles de vous intéresser:

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

La sortie du script devrait ressembler à ceci:

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
17
mti2935

Yahoo confirmé qu'ils ont mis fin au service:

Il a été porté à notre attention que ce service est utilisé en violation des Conditions d'utilisation de Yahoo. En tant que tel, le service est interrompu. Pour toutes les recherches de données sur les marchés et les actions à venir, veuillez vous reporter à finance.yahoo.com.

17
aleg

var API = "https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL"; $.getJSON(API, function (json) {...}); call génère cette erreur: Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. Origin ' http://www.microplan.at/sar ' n'est donc pas autorisé à accéder.

6
Thomas Karl Reis

Il existe toujours un moyen d'obtenir ces données en interrogeant certaines API utilisées par la page finance.yahoo.com. Je ne sais pas si Yahoo le supportera à long terme comme l’avait l’API précédente (avec un peu de chance ils le feront).

J'ai adapté la méthode utilisée par https://github.com/pstadler/ticker.sh dans la suivante python bidouille qui prend une liste de symboles de la ligne de commande et affiche certaines des variables en tant que csv:

#!/usr/bin/env python

import sys
import time
import requests

if len(sys.argv) < 2:
    print("missing parameters: <symbol> ...")
    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]))

Exemple de cycle:

$ ./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
6
AlejandroVD

Mon programme Python utilisant Yahoo Finance a récemment cessé de fonctionner correctement, mais il n'a pas renvoyé cette erreur. Il a simplement remplacé le cours des actions par des 0. Je l'avais initialement vu lorsque je déboguais puis suis allé aux URLs yahoo finance pour ces actions, j'ai confirmé l'erreur. Puisque les données réelles sont foirées, je ne pense pas que les solutions de rechange suggérées résoudraient mes problèmes. Est-ce probablement lié à l'arrêt de yahoo de leur API? Je ne comprends pas ce qui pourrait expliquer cela.

Exemples:

0
partyphysics