每次在 Python 中查看网页时,如何刷新来自 yahoo finance API 的数据?
How can I refresh data from yahoo finance API every time webpage is viewed in Python?
我是 运行 个人使用的网站 Bottle, a simple web server for python.
我正在使用 this API 从雅虎财经获取市场数据。
这是我的脚本(我的第一个 Python 脚本,顺便说一句)的简化版本,带有解释其工作原理的注释。我希望这是可以理解的:
编辑:不知道我是否说清楚了,但并不是所有的代码都在这里,我去掉了很多,因为在这种情况下它是无关紧要的。
from bottle import route, run, template
from yahoo_finance import Share
#Using AAPL and FB as an example..
# Gets market data
AAPL = Share('AAPL')
FB = Share('FB')
# Does a whole bunch of things with the data that eventually makes readable portfolio percentages..
# This is SUPPOSED to be a function that refreshes the data so that when called in the template it has up to date data.
# Refresh market data..
def refreshAll():
AAPL.refresh()
FB.refresh()
#Basically this just has a bunch of lines that refreshes the data for every symbol
# Makes it accessible to my template..
# Variables changed to make it understandable..
my_dict = {'holdings': printTotalHoldings, 'day_change': PercentDayChange, 'total_change': PercentTotalChange, 'date': date}
# This is supposed to make the function accessible by the view. So when I call it, it refreshes the data. Doesn't seem to work though..
my_dict['refresh'] = refreshAll
# Makes the template routed to root directory.
@route('/')
def index():
# Template file index.tpl.. **my_dict makes my variables and functions work on the view.
return template('index', **my_dict)
# Starts the webserver on port 8080
if __name__ == '__main__':
port = int(os.environ.get('PORT', 8080))
run(host='0.0.0.0', port=port, debug=True)
所以这基本上就是我的 index.py 文件的样子。
这是我在页面顶部的模板中的内容。我会认为每次查看页面都会刷新数据,对吗?
% refresh() #Refreshes market data
然后用数据调用变量我只是把这样的东西放在 HTML:
应该去的地方
<p class="day_change">Today's Change: <span id="price">{{get('day_change')}}</span></p>
一切正常,除了数据永远不会改变。为了实际刷新数据,我必须在服务器上停止并启动我的脚本。
这有意义吗?所以我的问题是,如何让我的数据刷新而不每次都停止并重新启动我的脚本?
谢谢!请让我知道是否有什么不够合理。我在这方面遇到了一些麻烦。
在 return 之前调用 index() 中的刷新代码。
如果您未处于 DEBUG 模式,则 Bottle is caching 您的渲染模板。
两件事:
Turn debug mode on 看看是否有帮助。 bottle.debug(True)
在 运行 服务器之前。 (编辑:我之前没有注意到您已经在使用调试模式。无论如何将此项目留在这里以供参考。)
不要从模板中调用 refresh()
(或任何其他状态更改或阻止函数)。这是个坏主意。正如 totowtwo 所建议的那样,您应该在调用模板之前从 index
调用它。
@route('/')
def index():
refresh()
return template('index', **my_dict)
- 打印出 AAPL 等人的价值。在您调用 refresh() 之后但在您调用模板之前,确认它们正在按照您的预期进行更新。
@route('/')
def index():
refresh()
# print the value of AAPL here, to confirm that it's updated
return template('index', **my_dict)
- 无论如何,您的模板如何访问 AAPL 和 FB?它们被传递到哪里?
我是 运行 个人使用的网站 Bottle, a simple web server for python.
我正在使用 this API 从雅虎财经获取市场数据。
这是我的脚本(我的第一个 Python 脚本,顺便说一句)的简化版本,带有解释其工作原理的注释。我希望这是可以理解的: 编辑:不知道我是否说清楚了,但并不是所有的代码都在这里,我去掉了很多,因为在这种情况下它是无关紧要的。
from bottle import route, run, template
from yahoo_finance import Share
#Using AAPL and FB as an example..
# Gets market data
AAPL = Share('AAPL')
FB = Share('FB')
# Does a whole bunch of things with the data that eventually makes readable portfolio percentages..
# This is SUPPOSED to be a function that refreshes the data so that when called in the template it has up to date data.
# Refresh market data..
def refreshAll():
AAPL.refresh()
FB.refresh()
#Basically this just has a bunch of lines that refreshes the data for every symbol
# Makes it accessible to my template..
# Variables changed to make it understandable..
my_dict = {'holdings': printTotalHoldings, 'day_change': PercentDayChange, 'total_change': PercentTotalChange, 'date': date}
# This is supposed to make the function accessible by the view. So when I call it, it refreshes the data. Doesn't seem to work though..
my_dict['refresh'] = refreshAll
# Makes the template routed to root directory.
@route('/')
def index():
# Template file index.tpl.. **my_dict makes my variables and functions work on the view.
return template('index', **my_dict)
# Starts the webserver on port 8080
if __name__ == '__main__':
port = int(os.environ.get('PORT', 8080))
run(host='0.0.0.0', port=port, debug=True)
所以这基本上就是我的 index.py 文件的样子。
这是我在页面顶部的模板中的内容。我会认为每次查看页面都会刷新数据,对吗?
% refresh() #Refreshes market data
然后用数据调用变量我只是把这样的东西放在 HTML:
应该去的地方<p class="day_change">Today's Change: <span id="price">{{get('day_change')}}</span></p>
一切正常,除了数据永远不会改变。为了实际刷新数据,我必须在服务器上停止并启动我的脚本。 这有意义吗?所以我的问题是,如何让我的数据刷新而不每次都停止并重新启动我的脚本?
谢谢!请让我知道是否有什么不够合理。我在这方面遇到了一些麻烦。
在 return 之前调用 index() 中的刷新代码。
如果您未处于 DEBUG 模式,则 Bottle is caching 您的渲染模板。
两件事:
Turn debug mode on 看看是否有帮助。
bottle.debug(True)
在 运行 服务器之前。 (编辑:我之前没有注意到您已经在使用调试模式。无论如何将此项目留在这里以供参考。)不要从模板中调用
refresh()
(或任何其他状态更改或阻止函数)。这是个坏主意。正如 totowtwo 所建议的那样,您应该在调用模板之前从index
调用它。
@route('/')
def index():
refresh()
return template('index', **my_dict)
- 打印出 AAPL 等人的价值。在您调用 refresh() 之后但在您调用模板之前,确认它们正在按照您的预期进行更新。
@route('/')
def index():
refresh()
# print the value of AAPL here, to confirm that it's updated
return template('index', **my_dict)
- 无论如何,您的模板如何访问 AAPL 和 FB?它们被传递到哪里?