Множество данных об акциях, работающих на этой конечной точке с Google ID акций

лочке Python 2.7 я запустил следующее:

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

Получил сообщение об ошибке 4-й команды следующим образом:

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

Не уверен, что происходит. Вот изображение моей деятельности.

 Polta Lashka06 сент. 2017 г., 19:11
Да @birryree, кажется, недавно сообщенная проблема ...
 wkl06 сент. 2017 г., 19:55
Я опубликовал пример того, как получить данные напрямую, а не использовать модуль, если это вам поможет.
 wkl06 сент. 2017 г., 18:58
Может быть связано с чем-то недавним с изменениями URL Google Finance:github.com/hongtaocai/googlefinance/issues/39

Ответы на вопрос(3)

Quandlhttps://www.quandl.com/ Используйте WIKI, это похоже на стабильный пример: Apple = quandl.get ('WIKI / AAPL', start_date = "2016-12-31", end_date = "") Документы временного ряда:https://docs.quandl.com/docs/time-series-2 Если вы делаете более 50 запросов, Quandl требует ключ (бесплатный для использования)

Решение Вопроса

googlefinance пакет не был обновлен, чтобы отразить изменение.

Поскольку большинство этих изменений довольно непрозрачны для конечных пользователей (а используемая вами библиотека не обновлялась в течение 2 лет), вам может повезти, если вы сами разберетесь с необработанным ответом Google Finance.

Конечная точка Google Finance

Вы можете получить информацию о конкретном символе тикера по следующему URL:

https://finance.google.com/finance?output=json&q=TICKER_SYMBOL
Ответ

Google Finance возвращает результаты в формате JSON в этом формате

\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'

Он не может быть загружен анализатором JSON Python как есть, потому что он имеет ведущий//и оборачивает все внутри[], У него также есть экранированные Unicode символы в различных строках, которые необходимо декодировать.

Полный код и разбор

Я собираюсь использоватьrequests модуль для этого, но если вы хотите пример со встроеннымurllib модуль, я тоже могу это показать.

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']))

Это вывело бы:

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

В полный тикер JSON включено гораздо больше данных, чем то, что я выводил, поэтому вам решать, как вы хотите использовать любой из них.

альтернативы

В качестве альтернативы, вы можете использоватьyahoo-finance модуль, который, вероятно, с меньшей вероятностью будет иметь такие проблемы, поскольку Yahoo по-прежнему предоставляет реальный финансовый API.

 bkcollection07 сент. 2017 г., 08:41
@birryree Спасибо. Любой другой способ, которым мы можем получить список цитат по одному запросу сейчас с Google?
 Polta Lashka06 сент. 2017 г., 21:36
Просто потрясающе @birryree! Спасибо за большие детали!
 bkcollection07 сент. 2017 г., 08:48
Одна проблема сhttp://finance.yahoo.com/d/quotes.csv?s=AAPL+GOOG+MSFT&f=snbaopl1 это время котировки акций, иногда возвращающееся к предыдущему после обновления, то есть я получаю котировку в 11:00, затем в 11.05 я обновляю снова, но иногда биржевые котировки получают данные за 10.50 или даже возвращаются к вчерашним котировкам. Не уверен, если у кого-то есть другие обходные пути.
 bkcollection07 сент. 2017 г., 06:01
@birryree Эта конечная точка не поддерживает несколько запросов одновременно?
 wkl07 сент. 2017 г., 06:02
@bkcollection к сожалению, нет. Я не знаю, есть ли замена для конечной точки, которую использовал модуль.

работающих на этой конечной точке с Google ID акций

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

Ваш ответ на вопрос