从Corey Goldberg开始:
#!/usr/bin/env python
import json
import pprint
import urllib2
def get_stock_quote(ticker_symbol):
url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol
lines = urllib2.urlopen(url).read().splitlines()
return json.loads(''.join([x for x in lines if x not in ('// [', ']')]))
if __name__ == '__main__':
quote = get_stock_quote('IBM')
print 'ticker: %s' % quote['t']
print 'current price: %s' % quote['l_cur']
print 'last trade: %s' % quote['lt']
print 'full quote:'
pprint.pprint(quote)
使用此:
import urllib2, json
def get_stock_quote(ticker_symbol):
url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol
lines = urllib2.urlopen(url).read().splitlines()
#print lines
return json.loads(''.join([x for x in lines if x not in ('// [', ']')]))
if __name__ == '__main__':
symbols = ('Goog',)
symbols2 = ('Goog','MSFT')
quote = get_stock_quote(symbols)
print 'ticker: %s' % quote['t'], 'current price: %s' % quote['l_cur'], 'last trade: %s' % quote['ltt']
print quote['t'], quote['l'], quote['ltt']
使用符号有效,符号2不起作用。错误消息是
TypeError:并非在字符串格式化期间转换所有参数
如何在字符串格式中将所有参数转换为字符串。在浏览器中,有效的代码是:Goog,MSFT。
编辑:我正在寻找的输出是一个带有goog,msft信息的列表。
答案 0 :(得分:2)
您的问题是%s无法处理包含2个元素的元组,请参阅下面的示例:
>>> "=%s" % ('Goog',)
'=Goog'
>>> "=%s" % ('Goog','MSFT')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
无论如何,请使用format()
代替%
。
答案 1 :(得分:1)
在这种情况下,你可以:
import urllib2, json
def get_stock_quote(ticker_symbol):
if isinstance(ticker_symbol, (list, tuple)):
ticker_symbol = ','.join(ticker_symbol)
url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol
lines = urllib2.urlopen(url).read().splitlines()
#print lines
return json.loads('[%s]' % ''.join([x for x in lines if x not in ('// [', ']')]))
if __name__ == '__main__':
symbols = ('Goog',)
symbols2 = ('Goog','MSFT')
quotes = get_stock_quote(symbols2)
for quote in quotes:
print 'ticker: %s' % quote['t'], 'current price: %s' % quote['l_cur'], 'last trade: %s' % quote['ltt']
print quote['t'], quote['l'], quote['ltt']
答案 2 :(得分:0)
您收到此错误,因为格式化只需要一个字符串,而您将元组放入2个字符串。如果你想获得http://finance.google.com/finance/info?q=Goog,MSFT,你应该做
quote = get_stock_quote(",".join(['Goog','MSFT']))
或者在周期中这样做:
for symbol in ('Goog', 'MSFT'):
quote = get_stock_quote(symbol)
答案 3 :(得分:0)
问题在于:
url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol
使用symbols2
,您将提供2元组,而格式化运算符需要标量或1元组。
以下内容将解决即时错误:
url = 'http://finance.google.com/finance/info?q=%s' % ",".join(ticker_symbol)
这只解决了问题的一半:解析结果的代码也需要更改。我将此作为练习留给读者。