每次在Python中查看网页时,如何刷新yahoo finance API中的数据?

时间:2015-05-20 19:35:04

标签: python bottle yahoo-finance

我使用Bottle, a simple web server for python.

运行网站供个人使用

我使用this API从雅虎财务中获取市场数据。

这是我的脚本的简化版本(我的第一个Python脚本,btw),其中的注释解释了它的工作原理。我希望这是可以理解的: 编辑:不知道我是否说清楚但是并非所有的代码都在这里,我花了很多钱,因为在这种情况下它是无关紧要的。

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>

除了数据永远不会改变之外,一切正常。为了实际刷新数据,我必须停止并在服务器上启动我的脚本。 这有意义吗?所以我的问题是,如何在不停止并每次重新启动脚本的情况下刷新数据?

谢谢!如果某些事情没有足够的意义,请告诉我。我有一点麻烦。

2 个答案:

答案 0 :(得分:0)

在返回之前调用index()中的刷新代码。

答案 1 :(得分:0)

如果您未处于DEBUG模式,则Bottle is caching呈现模板。

一些事情:

  • Turn debug mode on,看看是否有帮助。运行服务器之前bottle.debug(True)。 (编辑:我之前没有注意到你已经在使用调试模式了。无论如何都要把这个项目留在这里作为参考。)

  • 请勿在模板中调用refresh()(或任何其他状态更改或阻止功能)。这是个坏主意。正如两个建议的那样,您应该在调用模板之前从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?他们在哪里通过?