web-dev-qa-db-fra.com

Erreur HTTP 404 de googlefinance en python 2.7

Dans Python 2.7 Shell, j'ai lancé les opérations suivantes: 

$from googlefinance import getQuotes
$import json
$from urllib2 import urlopen
$print json.dumps(getQuotes('AAPL'), indent=2)

Message d'erreur obtenu sur la 4ème commande comme suit: 

Traceback (most recent call last):
  Python Shell, Prompt 3, line 1
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\site-packages\googlefinance\__init__.py", line 70, in getQuotes
    content = json.loads(request(symbols))
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\site-packages\googlefinance\__init__.py", line 33, in request
    resp = urlopen(req)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 435, in open
    response = meth(req, response)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 548, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 473, in error
    return self._call_chain(*args)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 407, in _call_chain
    result = func(*args)
  File "C:\Users\mlashkar\_development\python\v2.7\Lib\urllib2.py", line 556, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found

Pas sûr de ce qui se passe. Voici une image de mes activités.  enter image description here

5
Polta Lashka

Il semble que Google Finance ait modifié ses URL/points de terminaison et que le package googlefinance n’ait pas été mis à jour pour refléter ce changement.

Étant donné que la plupart de ces modifications sont plutôt opaques pour les utilisateurs finaux (et que la bibliothèque que vous utilisez n'a pas été mise à jour depuis 2 ans), vous aurez peut-être plus de chance de gérer vous-même la réponse brute de Google Finance.

Le point de terminaison Google Finance

Vous pouvez récupérer des informations sur un symbole boursier particulier via l'URL suivante:

https://finance.google.com/finance?output=json&q=TICKER_SYMBOL

La réponse

Google Finance renvoie les résultats JSON dans ce format

\n// [\n{\n"symbol" : "AAPL",\n"exchange" : "NASDAQ",\n"id": "22144",\n"t" 
: "AAPL",\n"e" : "NASDAQ",\n"name" : "Apple Inc."\n, "f_reuters_url" : 
"http:\\x2F\\x2Fstocks.us.reuters.com\\x2Fstocks\\x2Fratios.asp?rpc=66\\x26symbol=AAPL.O",\n"f_recent_quarter_date" : "Q3 (Jul \\x2717)",\n"f_annual_date" : "2016",\n"f_ttm_date" : "2015",\n"financials" :

    ... a lot more stuff ...
[\n]\n}]\n'

Il ne peut pas être chargé tel quel par l'analyseur JSON de Python car il est précédé de // et enveloppe tout ce qui se trouve à l'intérieur de []. Il comporte également des caractères d'échappement Unicode dans différentes chaînes qui doivent être décodées.

Code complet et analyse

Je vais utiliser le module requests pour cela, mais si vous voulez un exemple avec le module intégré urllib, je peux également le montrer.

import json

import requests

rsp = requests.get('https://finance.google.com/finance?q=AAPL&output=json')

if rsp.status_code in (200,):

    # This magic here is to cut out various leading characters from the JSON 
    # response, as well as trailing stuff (a terminating ']\n' sequence), and then
    # we decode the escape sequences in the response
    # This then allows you to load the resulting string
    # with the JSON module.
    fin_data = json.loads(rsp.content[6:-2].decode('unicode_escape'))

    # print out some quote data
    print('Opening Price: {}'.format(fin_data['op']))
    print('Price/Earnings Ratio: {}'.format(fin_data['pe']))
    print('52-week high: {}'.format(fin_data['hi52']))
    print('52-week low: {}'.format(fin_data['lo52']))

Cela donnerait:

Opening Price: 162.71
Price/Earnings Ratio: 18.43
52-week high: 164.94
52-week low: 102.53

Un code JSON complet contenant beaucoup plus de données que ce que je produis contient beaucoup plus de données, il vous appartient donc de décider de la manière dont vous souhaitez l’utiliser.

Des alternatives

Alternativement, vous pouvez utiliser le module yahoo-finance , qui est probablement moins susceptible d’avoir des problèmes de ce type, car Yahoo fournit toujours une véritable API Finance.

11
wkl

Si vous utilisez Python 3.6 ou 2.7, utilisez: Quandl https://www.quandl.com/ Utilisez WIKI, il semble être stable. Exemple : Apple = quandl.get ('WIKI/AAPL', start_date = "2016-12-31", end_date = "") Documents de série chronologique: https : //docs.quandl.com/docs/time-series-2 Si vous faites plus de 50 demandes, quandl nécessite une clé (libre d'utilisation)

1
ShaneCalder

Plusieurs informations sur les stocks fonctionnant sur ce noeud final avec l'ID stock Google 

https://finance.google.com/finance/data?dp=mra&output=json&catid=all&cid=13564339,5904015
0
Anish Manchappillil