34 votes

Yahoo a-t-il soudainement mis fin aujourd'hui à son API de téléchargement de données financières ?

Depuis des mois, j'utilise une url comme celle-ci, en perl :

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

Aujourd'hui, 11/1/17, il renvoie soudainement une erreur 999.

S'agit-il d'un problème, ou Yahoo a-t-il mis fin à ce service ?

J'obtiens l'erreur même si je saisis l'URL directement dans un navigateur, par exemple sous la forme d'une page Web :

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

Il ne s'agit donc pas d'un problème de "miettes".

Note : Ce n'est PAS une question à laquelle on a déjà répondu dans le passé ! Elle fonctionnait hier. Le fait que cela se produise le premier du mois est suspect.

6 votes

Je vote pour fermer cette question comme hors-sujet car ce n'est pas le statut du site Yahoo. Nous ne sommes pas le support d'un site tiers ou d'un vendeur. Contactez directement ce site pour vous renseigner sur son statut. Ce site est destiné aux questions relatives à la programmation.

3 votes

Je rencontre le même problème de mon côté, tout allait bien hier. Quelqu'un a un code API qui fonctionne ?

5 votes

Beaucoup de gens ont ce problème, mais félicitations - votre site reste pur.

18voto

mti2935 Points 2753

Comme indiqué dans les autres réponses et ailleurs (par ex. https://stackoverflow.com/questions/47076404/currency-helper-of-yahoo-sorry-unable-to-process-request-at-this-time-erro/47096766#47096766 ), Yahoo a effectivement cessé d'exploiter l'API Yahoo Finance. Toutefois, pour pallier ce problème, vous pouvez accéder à une mine d'informations financières, au format JSON, pour un symbole boursier donné, en effectuant une requête HTTPS GET à l'adresse suivante : https://finance.yahoo.com/quote/SYMBOL (par exemple https://finance.yahoo.com/quote/MSFT ). Si vous effectuez une requête GET sur l'URL ci-dessus, vous verrez que les données financières sont contenues dans la réponse au format JSON. Le script python3 suivant montre comment vous pouvez analyser les valeurs individuelles qui peuvent 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=str(resp.content, '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)

0 votes

Existe-t-il une équivalence javascript de cette implémentation Python ? Merci.

0 votes

A partir de maintenant, quand je mets https://finance.yahoo.com/quote/MSFT dans la barre d'adresse d'un navigateur, ce qui revient n'est pas JSON, mais une page HTML joliment formatée.

2 votes

@mbmast - Il se peut que le serveur réponde différemment à la demande du navigateur, en fonction des en-têtes que ce dernier envoie. Je viens de tester à nouveau en utilisant le script python ci-dessus, et cela a produit les résultats attendus. J'ai également mis à jour le script pour python3.

17voto

aleg Points 179

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 conséquence, le service est supprimé. Pour toute recherche future de données sur les marchés et les actions, veuillez vous reporter à finance.yahoo.com .

0 votes

Je ne comprends pas la réponse de Yahoo.

0 votes

C'est plus comme Yahoo Non. Soins.

1 votes

AlenSiljak Oh, ils se soucient de l'argent et c'est probablement ce dont il s'agit vraiment, ils finiront par le proposer à nouveau mais les gens/entreprises/codeurs devront payer pour cela.

8voto

AlejandroVD Points 3

Il est toujours possible d'obtenir ces données en interrogeant certaines API utilisées par la page finance.yahoo.com. Il n'est pas certain que Yahoo assure un support à long terme, comme c'était le cas pour l'API précédente (espérons qu'ils le feront).

J'ai adapté la méthode utilisée par https://github.com/pstadler/ticker.sh dans le hack python suivant qui prend une liste de symboles de la ligne de commande et sort certaines des variables comme un 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 d'exécution :

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

7voto

var API = "https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL"; $.getJSON(API, function (json) {...}); Ce message d'erreur apparaît : Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. Origine ' http://www.microplan.at/sar L'accès est donc interdit.

0 votes

Cela semble fonctionner correctement à partir d'un navigateur, et renvoie du json.

0 votes

Ils pourraient également interrompre ce service

0voto

partyphysics Points 123

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é les prix des actions par des 0. J'ai d'abord vu cela lorsque j'ai débogué et ensuite, lorsque j'ai accédé aux URL de Yahoo Finance pour ces actions, j'ai confirmé l'erreur. Puisque les données réelles sont faussées, je ne pense pas que les solutions de contournement qui ont été suggérées puissent résoudre mes problèmes. Ce problème est-il probablement lié à la suppression de l'API de Yahoo ? Je n'arrive pas à comprendre ce qui pourrait expliquer cela.

Exemples :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X