Как создать заявку на покупку акций в python
Я новичок в программировании в Python.
Я хочу создать приложение, которое будет отображать цены акций из google finance. Одним из примеров является CSCO (Cisco Sytems). Затем я использовал эти данные для предупреждать пользователя, когда запас достигнет определенного значения. Он также должен обновляться каждые 30 секунд.
Проблема заключается в том, что я не знаю, как получить данные!
У кого-нибудь есть идеи?
Ответы
Ответ 1
Этот модуль представлен любезно Corey Goldberg.
Программа:
import urllib
import re
def get_quote(symbol):
base_url = 'http://finance.google.com/finance?q='
content = urllib.urlopen(base_url + symbol).read()
m = re.search('id="ref_694653_l".*?>(.*?)<', content)
if m:
quote = m.group(1)
else:
quote = 'no quote available for: ' + symbol
return quote
Пример использования:
import stockquote
print stockquote.get_quote('goog')
Обновление. Изменено регулярное выражение в соответствии с последним форматом Google Finance (по состоянию на 23 февраля 2011 года). Это демонстрирует основную проблему, когда вы используете экранирование экрана.
Ответ 2
Как сейчас (2015), google finance api устарел. Но вы можете использовать модуль pypi googlefinance.
Установить googlefinance
$pip install googlefinance
Легко получить текущую цену акций:
>>> from googlefinance import getQuotes
>>> import json
>>> print json.dumps(getQuotes('AAPL'), indent=2)
[
{
"Index": "NASDAQ",
"LastTradeWithCurrency": "129.09",
"LastTradeDateTime": "2015-03-02T16:04:29Z",
"LastTradePrice": "129.09",
"Yield": "1.46",
"LastTradeTime": "4:04PM EST",
"LastTradeDateTimeLong": "Mar 2, 4:04PM EST",
"Dividend": "0.47",
"StockSymbol": "AAPL",
"ID": "22144"
}
]
Google - источник, который предоставляет данные о запасах в реальном времени. Существуют также другие API от yahoo, такие как yahoo-finance, но они задерживаются на 15 минут для акций NYSE и NASDAQ.
Ответ 3
import urllib
import re
def get_quote(symbol):
base_url = 'http://finance.google.com/finance?q='
content = urllib.urlopen(base_url + symbol).read()
m = re.search('id="ref_(.*?)">(.*?)<', content)
if m:
quote = m.group(2)
else:
quote = 'no quote available for: ' + symbol
return quote
Я нахожу, что если вы используете ref_ (. *?) и используете m.group(2), вы получите лучший результат, поскольку ссылочный идентификатор изменится с запаса на запас.
Ответ 4
Я предлагаю использовать HTMLParser, чтобы получить значение метатег google мест в нем html
<meta itemprop="name"
content="Cerner Corporation" />
<meta itemprop="url"
content="https://www.google.com/finance?cid=92421" />
<meta itemprop="imageUrl"
content="https://www.google.com/finance/chart?cht=g&q=NASDAQ:CERN&tkr=1&p=1d&enddatetime=2014-04-09T12:47:31Z" />
<meta itemprop="tickerSymbol"
content="CERN" />
<meta itemprop="exchange"
content="NASDAQ" />
<meta itemprop="exchangeTimezone"
content="America/New_York" />
<meta itemprop="price"
content="54.66" />
<meta itemprop="priceChange"
content="+0.36" />
<meta itemprop="priceChangePercent"
content="0.66" />
<meta itemprop="quoteTime"
content="2014-04-09T12:47:31Z" />
<meta itemprop="dataSource"
content="NASDAQ real-time data" />
<meta itemprop="dataSourceDisclaimerUrl"
content="//www.google.com/help/stock_disclaimer.html#realtime" />
<meta itemprop="priceCurrency"
content="USD" />
С таким кодом:
import urllib
try:
from html.parser import HTMLParser
except:
from HTMLParser import HTMLParser
class QuoteData:
pass
class GoogleFinanceParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.quote = QuoteData()
self.quote.price = -1
def handle_starttag(self, tag, attrs):
if tag == "meta":
last_itemprop = ""
for attr, value in attrs:
if attr == "itemprop":
last_itemprop = value
if attr == "content" and last_itemprop == "name":
self.quote.name = value
if attr == "content" and last_itemprop == "price":
self.quote.price = value
if attr == "content" and last_itemprop == "priceCurrency":
self.quote.priceCurrency = value
if attr == "content" and last_itemprop == "priceChange":
self.quote.priceChange = value
if attr == "content" and last_itemprop == "priceChangePercent":
self.quote.priceChangePercent = value
if attr == "content" and last_itemprop == "quoteTime":
self.quote.quoteTime = value
if attr == "content" and last_itemprop == "exchange":
self.quote.exchange = value
if attr == "content" and last_itemprop == "exchangeTimezone":
self.quote.exchangeTimezone = value
def getquote(symbol):
url = "http://finance.google.com/finance?q=%s" % symbol
content = urllib.urlopen(url).read()
gfp = GoogleFinanceParser()
gfp.feed(content)
return gfp.quote;
quote = getquote('CSCO')
print quote.name, quote.price
Ответ 5
На всякий случай вы хотите извлечь данные из Yahoo... Вот простая функция. Это не очищает данные от обычной страницы. Я думал, что у меня есть ссылка на страницу, описывающая это в комментариях, но я не вижу ее сейчас - есть волшебная строка, добавленная к URL-адресу для запроса определенных полей.
import urllib as u
import string
symbols = 'amd ibm gm kft'.split()
def get_data():
data = []
url = 'http://finance.yahoo.com/d/quotes.csv?s='
for s in symbols:
url += s+"+"
url = url[0:-1]
url += "&f=sb3b2l1l"
f = u.urlopen(url,proxies = {})
rows = f.readlines()
for r in rows:
values = [x for x in r.split(',')]
symbol = values[0][1:-1]
bid = string.atof(values[1])
ask = string.atof(values[2])
last = string.atof(values[3])
data.append([symbol,bid,ask,last,values[4]])
return data
Здесь я нашел ссылку, которая описывает магическую строку:
http://cliffngan.net/a/13
Ответ 6
http://docs.python.org/library/urllib.html
для получения произвольных URL-адресов.
Кроме того, вам лучше посмотреть какой-либо веб-сервис, предоставляющий данные в формате JSON.
В противном случае вам придется выполнять разбор и т.д. самостоятельно.
Screenscrapping yahoo.com для получения акций вряд ли будет правильным путем к успеху.
Ответ 7
Вы можете начать с просмотра API Google Finance, хотя я не вижу API или оболочку Python. Похоже, что единственными параметрами для прямого доступа к данным являются Java и JavaScript. Вы также можете использовать cURL, если вы знакомы с ним, и он доступен в вашей системе.
Ответ 8
Другим хорошим местом для начала является собственный API Google Finance: http://code.google.com/apis/finance/ Вы можете посмотреть их финансовые гаджеты для примера кода.